restrict-access.c revision ba05e1999908512693d61c7e88cae04f607ba3c4
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2002-2018 Dovecot authors, see the included COPYING file */
ff7056842f14fd3b30a2d327dfab165b9d15dd30Timo Sirainenstatic gid_t process_privileged_gid = (gid_t)-1;
ff7056842f14fd3b30a2d327dfab165b9d15dd30Timo Sirainenvoid restrict_access_init(struct restrict_access_settings *set)
910fa4e4204a73d3d24c03f3059dd24e727ca057Timo Sirainen const char *ret;
4321f6c969e7b8f6b243ff5bb6b8d297921676f6Timo Sirainen ret = t_strdup_printf("%s(%s)", dec2str(uid), pw.pw_name);
ff7056842f14fd3b30a2d327dfab165b9d15dd30Timo Sirainen const char *ret;
return ret;
const char *gid_source)
#ifdef HAVE_SETRESGID
if (geteuid() == 0) {
return gid_list;
bool *have_root_group)
unsigned int i, used;
if (gid_list[i] == 0)
return gid;
unsigned int i, gid_count;
bool add_primary_gid;
if (preserve_existing) {
for (i = 0; i < gid_count; i++) {
gid_count = 0;
if (gid_count == 0) {
if (add_primary_gid)
bool allow_root_gid;
if (!is_root &&
getuid() == 0) {
if (seteuid(0) < 0)
/* set the primary/privileged group */
process_primary_gid) < 0) {
} T_END;
time_t t = 0;
(void)localtime(&t);
if (setuid(0) == 0) {
if (disallow_root &&
if (process_primary_gid == 0)
const char *value;
const char *restrict_access_get_current_chroot(void)
return chroot_dir;
#ifdef HAVE_PR_SET_DUMPABLE
bool restrict_access_get_dumpable(void)
#ifdef HAVE_PR_SET_DUMPABLE
return allow;
return TRUE;
int restrict_access_use_priv_gid(void)
void restrict_access_drop_priv_gid(void)
if (!process_using_priv_gid)
bool restrict_access_have_priv_gid(void)