]> granicus.if.org Git - sudo/commitdiff
Define RTLD_GLOBAL for older systems without it. Bug #621
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 20 Nov 2013 14:22:10 +0000 (07:22 -0700)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 20 Nov 2013 14:22:10 +0000 (07:22 -0700)
compat/dlopen.c
plugins/sudoers/regress/check_symbols/check_symbols.c

index dc33d80bd2e6368fc0647f3dd4d2f4c313eaaa21..ec87e1adf16c465dbce6685ce1e8512d84f09b6a 100644 (file)
@@ -124,13 +124,17 @@ extern struct sudo_preload_table sudo_preload_table[];
 void *
 sudo_dlopen(const char *path, int mode)
 {
-    return (void *)path;
+    /* XXX - compare path against builtins */
+    return sudo_preload_table;
 }
 
 int
 sudo_dlclose(void *handle)
 {
-    return 0;
+    if (handle == sudo_preload_table)
+       return 0;
+    errno = ENOENT;
+    return -1;
 }
 
 void *
@@ -138,7 +142,7 @@ sudo_dlsym(void *handle, const char *symbol)
 {
     struct sudo_preload_table *sym;
 
-    if (symbol != RTLD_NEXT && symbol != RTLD_DEFAULT && symbol != RTLD_SELF) {
+    if (handle == sudo_preload_table || handle == RTLD_DEFAULT) {
        for (sym = sudo_preload_table; sym->name != NULL; sym++) {
            if (strcmp(symbol, sym->name) == 0)
                return sym->address;
index a761e6a16db95aa980c6794b1d78734536ed9164..30c8ec332ae6debe54afa9fec101fd69f1dee0f4 100644 (file)
 #include "missing.h"
 #include "fatal.h"
 
+#ifndef RTLD_GLOBAL
+# define RTLD_GLOBAL   0
+#endif
+
 #ifndef LINE_MAX
 # define LINE_MAX 2048
 #endif