Diff for /embedaddon/sudo/src/env_hooks.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/05/29 12:26:49 version 1.1.1.2, 2013/07/22 10:46:13
Line 70  rpl_getenv(const char *name) Line 70  rpl_getenv(const char *name)
 typedef char * (*sudo_fn_getenv_t)(const char *);  typedef char * (*sudo_fn_getenv_t)(const char *);
   
 char *  char *
   getenv_unhooked(const char *name)
   {
   #if defined(HAVE_DLOPEN) && defined(RTLD_NEXT)
       sudo_fn_getenv_t fn;
   
       fn = (sudo_fn_getenv_t)dlsym(RTLD_NEXT, "getenv");
       if (fn != NULL)
           return fn(name);
   #endif /* HAVE_DLOPEN && RTLD_NEXT */
       return rpl_getenv(name);
   }
   
   char *
 getenv(const char *name)  getenv(const char *name)
 {  {
     char *val = NULL;      char *val = NULL;
Line 79  getenv(const char *name) Line 92  getenv(const char *name)
             return val;              return val;
         case SUDO_HOOK_RET_ERROR:          case SUDO_HOOK_RET_ERROR:
             return NULL;              return NULL;
        default: {        default:
#if defined(HAVE_DLOPEN) && defined(RTLD_NEXT)            return getenv_unhooked(name);
            sudo_fn_getenv_t fn; 
 
            fn = (sudo_fn_getenv_t)dlsym(RTLD_NEXT, "getenv"); 
            if (fn != NULL) 
                return fn(name); 
#endif /* HAVE_DLOPEN && RTLD_NEXT */ 
            return rpl_getenv(name); 
        } 
     }      }
 }  }
   
Line 136  rpl_putenv(PUTENV_CONST char *string) Line 141  rpl_putenv(PUTENV_CONST char *string)
   
 typedef int (*sudo_fn_putenv_t)(PUTENV_CONST char *);  typedef int (*sudo_fn_putenv_t)(PUTENV_CONST char *);
   
   static int
   putenv_unhooked(PUTENV_CONST char *string)
   {
   #if defined(HAVE_DLOPEN) && defined(RTLD_NEXT)
       sudo_fn_putenv_t fn;
   
       fn = (sudo_fn_putenv_t)dlsym(RTLD_NEXT, "putenv");
       if (fn != NULL)
           return fn(string);
   #endif /* HAVE_DLOPEN && RTLD_NEXT */
       return rpl_putenv(string);
   }
   
 int  int
 putenv(PUTENV_CONST char *string)  putenv(PUTENV_CONST char *string)
 {  {
Line 144  putenv(PUTENV_CONST char *string) Line 162  putenv(PUTENV_CONST char *string)
             return 0;              return 0;
         case SUDO_HOOK_RET_ERROR:          case SUDO_HOOK_RET_ERROR:
             return -1;              return -1;
        default: {        default:
#if defined(HAVE_DLOPEN) && defined(RTLD_NEXT)            return putenv_unhooked(string);
            sudo_fn_putenv_t fn; 
 
            fn = (sudo_fn_putenv_t)dlsym(RTLD_NEXT, "putenv"); 
            if (fn != NULL) 
                return fn(string); 
#endif /* HAVE_DLOPEN && RTLD_NEXT */ 
            return rpl_putenv(string); 
        } 
     }      }
 }  }
   
Line 201  rpl_setenv(const char *var, const char *val, int overw Line 211  rpl_setenv(const char *var, const char *val, int overw
   
 typedef int (*sudo_fn_setenv_t)(const char *, const char *, int);  typedef int (*sudo_fn_setenv_t)(const char *, const char *, int);
   
   static int
   setenv_unhooked(const char *var, const char *val, int overwrite)
   {
   #if defined(HAVE_SETENV) && defined(HAVE_DLOPEN) && defined(RTLD_NEXT)
       sudo_fn_setenv_t fn;
   
       fn = (sudo_fn_setenv_t)dlsym(RTLD_NEXT, "setenv");
       if (fn != NULL)
           return fn(var, val, overwrite);
   #endif /* HAVE_SETENV && HAVE_DLOPEN && RTLD_NEXT */
       return rpl_setenv(var, val, overwrite);
   }
   
 int  int
 setenv(const char *var, const char *val, int overwrite)  setenv(const char *var, const char *val, int overwrite)
 {  {
Line 209  setenv(const char *var, const char *val, int overwrite Line 232  setenv(const char *var, const char *val, int overwrite
             return 0;              return 0;
         case SUDO_HOOK_RET_ERROR:          case SUDO_HOOK_RET_ERROR:
             return -1;              return -1;
        default: {        default:
#if defined(HAVE_SETENV) && defined(HAVE_DLOPEN) && defined(RTLD_NEXT)            return setenv_unhooked(var, val, overwrite);
            sudo_fn_setenv_t fn; 
 
            fn = (sudo_fn_setenv_t)dlsym(RTLD_NEXT, "setenv"); 
            if (fn != NULL) 
                return fn(var, val, overwrite); 
#endif /* HAVE_SETENV && HAVE_DLOPEN && RTLD_NEXT */ 
            return rpl_setenv(var, val, overwrite); 
        } 
     }      }
 }  }
   
#ifdef UNSETENV_VOIDstatic int
static void 
#else 
int 
#endif 
 rpl_unsetenv(const char *var)  rpl_unsetenv(const char *var)
 {  {
     char **ep = environ;      char **ep = environ;
Line 234  rpl_unsetenv(const char *var) Line 245  rpl_unsetenv(const char *var)
   
     if (var == NULL || *var == '\0' || strchr(var, '=') != NULL) {      if (var == NULL || *var == '\0' || strchr(var, '=') != NULL) {
         errno = EINVAL;          errno = EINVAL;
 #ifdef UNSETENV_VOID  
         return;  
 #else  
         return -1;          return -1;
 #endif  
     }      }
   
     len = strlen(var);      len = strlen(var);
Line 253  rpl_unsetenv(const char *var) Line 260  rpl_unsetenv(const char *var)
             ep++;              ep++;
         }          }
     }      }
 #ifndef UNSETENV_VOID  
     return 0;      return 0;
 #endif  
 }  }
   
 #ifdef UNSETENV_VOID  #ifdef UNSETENV_VOID
Line 264  typedef void (*sudo_fn_unsetenv_t)(const char *); Line 269  typedef void (*sudo_fn_unsetenv_t)(const char *);
 typedef int (*sudo_fn_unsetenv_t)(const char *);  typedef int (*sudo_fn_unsetenv_t)(const char *);
 #endif  #endif
   
#ifdef UNSETENV_VOIDstatic int
voidunsetenv_unhooked(const char *var)
unsetenv(const char *var) 
 {  {
    switch (process_hooks_unsetenv(var)) {    int rval = 0;
        case SUDO_HOOK_RET_STOP: 
            return 0; 
        case SUDO_HOOK_RET_ERROR: 
            return -1; 
        default: { 
 #if defined(HAVE_UNSETENV) && defined(HAVE_DLOPEN) && defined(RTLD_NEXT)  #if defined(HAVE_UNSETENV) && defined(HAVE_DLOPEN) && defined(RTLD_NEXT)
            sudo_fn_unsetenv_t fn;    sudo_fn_unsetenv_t fn;
   
            fn = (sudo_fn_unsetenv_t)dlsym(RTLD_NEXT, "unsetenv");    fn = (sudo_fn_unsetenv_t)dlsym(RTLD_NEXT, "unsetenv");
            if (fn != NULL)    if (fn != NULL) {
                fn(var);# ifdef UNSETENV_VOID
            else        fn(var);
 # else
         rval = fn(var);
 # endif
     } else
 #endif /* HAVE_UNSETENV && HAVE_DLOPEN && RTLD_NEXT */  #endif /* HAVE_UNSETENV && HAVE_DLOPEN && RTLD_NEXT */
                rpl_unsetenv(var);    {
        }        rval = rpl_unsetenv(var);
     }      }
       return rval;
 }  }
   
   #ifdef UNSETENV_VOID
   void
 #else  #else
 int  int
   #endif
 unsetenv(const char *var)  unsetenv(const char *var)
 {  {
       int rval;
   
     switch (process_hooks_unsetenv(var)) {      switch (process_hooks_unsetenv(var)) {
         case SUDO_HOOK_RET_STOP:          case SUDO_HOOK_RET_STOP:
            return 0;            rval = 0;
             break;
         case SUDO_HOOK_RET_ERROR:          case SUDO_HOOK_RET_ERROR:
            return -1;            rval = -1;
        default: {            break;
#if defined(HAVE_UNSETENV) && defined(HAVE_DLOPEN) && defined(RTLD_NEXT)        default:
            sudo_fn_unsetenv_t fn;            rval = unsetenv_unhooked(var);
            break;
            fn = (sudo_fn_unsetenv_t)dlsym(RTLD_NEXT, "unsetenv"); 
            if (fn != NULL) 
                return fn(var); 
#endif /* HAVE_UNSETENV && HAVE_DLOPEN && RTLD_NEXT */ 
            return rpl_unsetenv(var); 
        } 
     }      }
   #ifndef UNSETENV_VOID
       return rval;
   #endif
 }  }
 #endif /* UNSETENV_VOID */  

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>