restrict-access.c revision e2e71ea6440b1758adba6d374eabcfd26358a7da
af0732a2bf24fbea12a085b855224577e7101851kiirala/* Copyright (c) 2002-2003 Timo Sirainen */
af0732a2bf24fbea12a085b855224577e7101851kiiralavoid restrict_access_set_env(const char *user, uid_t uid, gid_t gid,
259fbef23dd30285e7355b13c6ce524565fa0cb6Krzysztof Kosiński gid_t first_valid_gid, gid_t last_valid_gid,
d9a7c806ee7f408ddb61ff4f233c9d96111ee2b5johanengelen env_put(t_strconcat("RESTRICT_CHROOT=", chroot_dir, NULL));
af0732a2bf24fbea12a085b855224577e7101851kiirala env_put(t_strdup_printf("RESTRICT_SETUID=%s", dec2str(uid)));
af0732a2bf24fbea12a085b855224577e7101851kiirala env_put(t_strdup_printf("RESTRICT_SETGID=%s", dec2str(gid)));
259fbef23dd30285e7355b13c6ce524565fa0cb6Krzysztof Kosiński if (extra_groups != NULL && *extra_groups != '\0') {
259fbef23dd30285e7355b13c6ce524565fa0cb6Krzysztof Kosiński env_put(t_strconcat("RESTRICT_SETEXTRAGROUPS=",
af0732a2bf24fbea12a085b855224577e7101851kiirala /* @UNSAFE */
af0732a2bf24fbea12a085b855224577e7101851kiirala while ((ret = getgroups(gid_count, gid_list)) < 0) {
af0732a2bf24fbea12a085b855224577e7101851kiirala gid_list = t_buffer_reget(gid_list, sizeof(gid_t) * gid_count);
return gid_list;
static void drop_restricted_groups(void)
const char *env;
t_push();
t_pop();
const char *const *tmp;
int gid_count;
t_push();
t_pop();
const char *env;
time_t t = 0;
(void)localtime(&t);
if (uid != 0) {
if (setuid(0) == 0)
if (gid != 0) {