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;
/* 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);
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;
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. */