X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsrc%2Fdbfn.c;h=5cbe10c1f2631333bf171023c1fd7ae7264093e9;hb=e8e7fafabffe61077794a2f1e5febd7b96b01116;hp=b66d4603fdc563615b5cde3c4a1248b3d125cdba;hpb=186e99bafcf8dbc53f9a25ea26998cab9b091a62;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/dbfn.c b/src/src/dbfn.c index b66d4603f..5cbe10c1f 100644 --- a/src/src/dbfn.c +++ b/src/src/dbfn.c @@ -63,68 +63,6 @@ log_write(0, LOG_MAIN, "Berkeley DB error: %s", msg); #endif - - -static enum { - PRIV_DROPPING, PRIV_DROPPED, - PRIV_RESTORING, PRIV_RESTORED -} priv_state = PRIV_RESTORED; - -static uid_t priv_euid; -static gid_t priv_egid; -static gid_t priv_groups[EXIM_GROUPLIST_SIZE + 1]; -static int priv_ngroups; - -/* Inspired by OpenSSH's temporarily_use_uid(). Thanks! */ - -static void -priv_drop_temp(const uid_t temp_uid, const gid_t temp_gid) -{ -if (priv_state != PRIV_RESTORED) _exit(EXIT_FAILURE); -priv_state = PRIV_DROPPING; - -priv_euid = geteuid(); -if (priv_euid == root_uid) - { - priv_egid = getegid(); - priv_ngroups = getgroups(nelem(priv_groups), priv_groups); - if (priv_ngroups < 0) _exit(EXIT_FAILURE); - - if (priv_ngroups > 0 && setgroups(1, &temp_gid) != 0) _exit(EXIT_FAILURE); - if (setegid(temp_gid) != 0) _exit(EXIT_FAILURE); - if (seteuid(temp_uid) != 0) _exit(EXIT_FAILURE); - - if (geteuid() != temp_uid) _exit(EXIT_FAILURE); - if (getegid() != temp_gid) _exit(EXIT_FAILURE); - } - -priv_state = PRIV_DROPPED; -} - -/* Inspired by OpenSSH's restore_uid(). Thanks! */ - -static void -priv_restore(void) -{ -if (priv_state != PRIV_DROPPED) _exit(EXIT_FAILURE); -priv_state = PRIV_RESTORING; - -if (priv_euid == root_uid) - { - if (seteuid(priv_euid) != 0) _exit(EXIT_FAILURE); - if (setegid(priv_egid) != 0) _exit(EXIT_FAILURE); - if (priv_ngroups > 0 && setgroups(priv_ngroups, priv_groups) != 0) _exit(EXIT_FAILURE); - - if (geteuid() != priv_euid) _exit(EXIT_FAILURE); - if (getegid() != priv_egid) _exit(EXIT_FAILURE); - } - -priv_state = PRIV_RESTORED; -} - - - - /************************************************* * Open and lock a database file * *************************************************/