]> granicus.if.org Git - sudo/commitdiff
Avoid calling dlerror() multiple times since it clear the error
authorTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 10 Jul 2015 16:31:21 +0000 (10:31 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 10 Jul 2015 16:31:21 +0000 (10:31 -0600)
status after printing the error.
Problem caused by sudo_warn/sudo_fatal being macros...

plugins/sudoers/group_plugin.c
plugins/sudoers/regress/check_symbols/check_symbols.c
plugins/sudoers/sssd.c
src/load_plugins.c

index 467eaa4cda844ec6e18bf85732ad95276afebfde..bbd7d5c290e144e3870b118397d30205ea9c30d5 100644 (file)
@@ -93,7 +93,9 @@ group_plugin_load(char *plugin_info)
     /* Open plugin and map in symbol. */
     group_handle = sudo_dso_load(path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL);
     if (!group_handle) {
-       sudo_warnx(U_("unable to load %s: %s"), path, sudo_dso_strerror());
+       const char *errstr = sudo_dso_strerror();
+       sudo_warnx(U_("unable to load %s: %s"), path,
+           errstr ? errstr : "unknown error");
        goto done;
     }
     group_plugin = sudo_dso_findsym(group_handle, "group_plugin");
index 6d104abf5814df170880e4909426f635b65a77d5..4ba05837921d99ff4d30e5ea4e9759a84d5ef92e 100644 (file)
@@ -60,8 +60,11 @@ main(int argc, char *argv[])
     symbols_file = argv[2];
 
     handle = sudo_dso_load(plugin_path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL);
-    if (handle == NULL)
-       sudo_fatalx_nodebug("unable to load %s: %s", plugin_path, sudo_dso_strerror());
+    if (handle == NULL) {
+       const char *errstr = sudo_dso_strerror();
+       sudo_fatalx_nodebug("unable to load %s: %s", plugin_path,
+           errstr ? errstr : "unknown error");
+    }
 
     fp = fopen(symbols_file, "r");
     if (fp == NULL)
@@ -73,8 +76,9 @@ main(int argc, char *argv[])
            *cp = '\0';
        sym = sudo_dso_findsym(handle, line);
        if (sym == NULL) {
+           const char *errstr = sudo_dso_strerror();
            printf("%s: test %d: unable to resolve symbol %s: %s\n",
-               getprogname(), ntests, line, sudo_dso_strerror());
+               getprogname(), ntests, line, errstr ? errstr : "unknown error");
            errors++;
        }
     }
index 7e6f4fc508c78429dc3d436cf4150b5b33933f95..7da05b198bce7d08b5b9ce4e422b840aad7b8514 100644 (file)
@@ -328,7 +328,9 @@ sudo_sss_open(struct sudo_nss *nss)
     /* Load symbols */
     handle->ssslib = sudo_dso_load(path, SUDO_DSO_LAZY);
     if (handle->ssslib == NULL) {
-       sudo_warnx(U_("unable to load %s: %s"), path, sudo_dso_strerror());
+       const char *errstr = sudo_dso_strerror();
+       sudo_warnx(U_("unable to load %s: %s"), path,
+           errstr ? errstr : "unknown error");
        sudo_warnx(U_("unable to initialize SSS source. Is SSSD installed on your machine?"));
        free(handle);
        debug_return_int(EFAULT);
index d26a2b0cfa5033f5330ef9db3c010e84d93eda29..3e7d4700eb886fb0d10d93b059bd349f0bff457c 100644 (file)
@@ -159,9 +159,11 @@ sudo_load_plugin(struct plugin_container *policy_plugin,
     /* Open plugin and map in symbol */
     handle = sudo_dso_load(path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL);
     if (!handle) {
+       const char *errstr = sudo_dso_strerror();
        sudo_warnx(U_("error in %s, line %d while loading plugin `%s'"),
            _PATH_SUDO_CONF, info->lineno, info->symbol_name);
-       sudo_warnx(U_("unable to load %s: %s"), path, sudo_dso_strerror());
+       sudo_warnx(U_("unable to load %s: %s"), path,
+           errstr ? errstr : "unknown error");
        goto bad;
     }
     plugin = sudo_dso_findsym(handle, info->symbol_name);