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_VOID | static 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_VOID | static int |
void | unsetenv_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 */ |
|