rpcd-mod-luci: allow finding suffixed libwinfo.so
authorJo-Philipp Wich <jo@mein.io>
Fri, 8 Jan 2021 17:25:29 +0000 (18:25 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 8 Jan 2021 17:34:17 +0000 (18:34 +0100)
Recent versions ship a version suffixed libiwinfo.so, therefor we cannot
rely on a fixed path name anymore. Use globbing to find matching libraries
and load the first one we find.

Fixes: #4718
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
libs/rpcd-mod-luci/src/luci.c

index 94ccdf27160d35e7ecbd86817478b3cc5c9e8909..a16418d49d2dbbb48e490d678c58038c66974dc9 100644 (file)
@@ -802,11 +802,19 @@ static bool rpc_luci_get_iwinfo(struct blob_buf *buf, const char *devname,
        struct iwinfo_crypto_entry crypto = {};
        struct iwinfo_hardware_id ids = {};
        const struct iwinfo_ops *iw;
-       void *iwlib, *o, *o2, *a;
-       int nret;
+       void *iwlib = NULL;
+       void *o, *o2, *a;
+       glob_t paths;
+       int nret, i;
 
        if (!iw_backend || !iw_close || !iw_modenames) {
-               iwlib = dlopen("libiwinfo.so", RTLD_LAZY | RTLD_LOCAL);
+               if (glob("/usr/lib/libiwinfo.so*", 0, NULL, &paths) != 0)
+                       return false;
+
+               for (i = 0; i < paths.gl_pathc && !iwlib; i++)
+                       iwlib = dlopen(paths.gl_pathv[i], RTLD_LAZY | RTLD_LOCAL);
+
+               globfree(&paths);
 
                if (!iwlib)
                        return false;