From: Timo Sirainen Date: Fri, 21 Feb 2003 13:01:55 +0000 (+0200) Subject: Added env_remove() and restrict_access_clear_env(). X-Git-Tag: 1.1.alpha1~4884 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6086c1babba050999c2945edada676a1106554cc;p=thirdparty%2Fdovecot%2Fcore.git Added env_remove() and restrict_access_clear_env(). --HG-- branch : HEAD --- diff --git a/src/lib/env-util.c b/src/lib/env-util.c index 4f1b9d78c7..0d6fc074d3 100644 --- a/src/lib/env-util.c +++ b/src/lib/env-util.c @@ -39,6 +39,26 @@ void env_put(const char *env) i_fatal("Environment full, can't add: %s", env); } +void env_remove(const char *env) +{ + extern char **environ; + size_t len; + + if (environ == NULL) + return; + + len = strlen(env); + for (; *environ != NULL; environ++) { + if (strncmp(*environ, env, len) == 0 && + (*environ)[len] == '=') { + char **p; + + for (p = environ; *p != NULL; p++) + p[0] = p[1]; + } + } +} + void env_clean(void) { extern char **environ; diff --git a/src/lib/env-util.h b/src/lib/env-util.h index 18562c3946..d180ed2069 100644 --- a/src/lib/env-util.h +++ b/src/lib/env-util.h @@ -4,6 +4,8 @@ /* Add new environment variable. Wrapper to putenv(). Note that calls to this function allocates memory which isn't free'd until env_clean() is called. */ void env_put(const char *env); +/* Remove environment variable. */ +void env_remove(const char *env); /* Clear all environment variables. */ void env_clean(void); diff --git a/src/lib/restrict-access.c b/src/lib/restrict-access.c index 27e209976f..bb53237d0f 100644 --- a/src/lib/restrict-access.c +++ b/src/lib/restrict-access.c @@ -42,6 +42,14 @@ void restrict_access_set_env(const char *user, uid_t uid, gid_t gid, env_put(t_strdup_printf("RESTRICT_SETGID=%s", dec2str(gid))); } +void restrict_access_clear_env(void) +{ + env_remove("RESTRICT_USER"); + env_remove("RESTRICT_CHROOT"); + env_remove("RESTRICT_SETUID"); + env_remove("RESTRICT_SETGID"); +} + void restrict_access_by_env(int disallow_root) { const char *env; diff --git a/src/lib/restrict-access.h b/src/lib/restrict-access.h index 78f8039790..23ebbb51c4 100644 --- a/src/lib/restrict-access.h +++ b/src/lib/restrict-access.h @@ -6,6 +6,9 @@ void restrict_access_set_env(const char *user, uid_t uid, gid_t gid, const char *chroot_dir); +/* clear the environment variables set by restrict_access_set_env() */ +void restrict_access_clear_env(void); + /* chroot, setuid() and setgid() based on environment variables. If disallow_roots is TRUE, we'll kill ourself if we didn't have the environment settings and we have root uid or gid. */