diff options
Diffstat (limited to 'contrib/notmuch-deliver/numlib/changeuidgid.c')
-rw-r--r-- | contrib/notmuch-deliver/numlib/changeuidgid.c | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/contrib/notmuch-deliver/numlib/changeuidgid.c b/contrib/notmuch-deliver/numlib/changeuidgid.c deleted file mode 100644 index 56793927..00000000 --- a/contrib/notmuch-deliver/numlib/changeuidgid.c +++ /dev/null @@ -1,111 +0,0 @@ -/* -** Copyright 1998 - 2002 Double Precision, Inc. See COPYING for -** distribution information. -*/ - -#if HAVE_CONFIG_H -#include "config.h" -#endif -#include <sys/types.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <grp.h> -#include <pwd.h> -#include <errno.h> - -#include "numlib.h" - -static const char rcsid[]="$Id: changeuidgid.c,v 1.2 2003/01/05 04:01:17 mrsam Exp $"; - -void libmail_changegroup(gid_t gid) -{ - if ( setgid(gid)) - { - perror("setgid"); - exit(1); - } - -#if HAVE_SETGROUPS - if ( getuid() == 0 && setgroups(1, &gid) ) - { - perror("setgroups"); - exit(1); - } -#endif -} - -void libmail_changeuidgid(uid_t uid, gid_t gid) -{ - libmail_changegroup(gid); - if ( setuid(uid)) - { - perror("setuid"); - exit(1); - } -} - -void libmail_changeusername(const char *uname, const gid_t *forcegrp) -{ -struct passwd *pw; -uid_t changeuid; -gid_t changegid; - -/* uname might be a pointer returned from a previous called to getpw(), -** and libc has a problem getting it back. -*/ -char *p=malloc(strlen(uname)+1); - - if (!p) - { - perror("malloc"); - exit(1); - } - strcpy(p, uname); - - errno=ENOENT; - if ((pw=getpwnam(p)) == 0) - { - free(p); - perror("getpwnam"); - exit(1); - } - free(p); - - changeuid=pw->pw_uid; - - if ( !forcegrp ) forcegrp= &pw->pw_gid; - - changegid= *forcegrp; - - if ( setgid( changegid )) - { - perror("setgid"); - exit(1); - } - -#if HAVE_INITGROUPS - if ( getuid() == 0 && initgroups(pw->pw_name, changegid) ) - { - perror("initgroups"); - exit(1); - } -#else -#if HAVE_SETGROUPS - if ( getuid() == 0 && setgroups(1, &changegid) ) - { - perror("setgroups"); - exit(1); - } -#endif -#endif - - if (setuid(changeuid)) - { - perror("setuid"); - exit(1); - } -} |