From: Marcin Cieslak Date: Fri, 13 Feb 2015 03:09:26 +0000 (-0600) Subject: Replaced setgid() calls with setegid() so that it works with dot X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/30dd408d502b42e46d59cfc89af5f7aa07f8c1ff?ds=inline;hp=-c Replaced setgid() calls with setegid() so that it works with dot locking on FreeBSD. setegid() should be supported on modern POSIX systems. --- 30dd408d502b42e46d59cfc89af5f7aa07f8c1ff diff --git a/uip/inc.c b/uip/inc.c index 8b9fe7ae..b4572824 100644 --- a/uip/inc.c +++ b/uip/inc.c @@ -8,7 +8,13 @@ */ #ifdef MAILGROUP -/* Revised: Sat Apr 14 17:08:17 PDT 1990 (marvit@hplabs) +/* + * Thu Feb 12 21:00 CST 2015 Marcin Cieslak + * Replaced setgid() calls with setegid() so that it works with dot + * locking on FreeBSD. setegid() should be supported on modern POSIX + * systems. + * + * Revised: Sat Apr 14 17:08:17 PDT 1990 (marvit@hplabs) * Added hpux hacks to set and reset gid to be "mail" as needed. The reset * is necessary so inc'ed mail is the group of the inc'er, rather than * "mail". We setgid to egid only when [un]locking the mail file. This @@ -127,10 +133,16 @@ static FILE *pf = NULL; * For setting and returning to "mail" gid */ #ifdef MAILGROUP -static int return_gid; +static gid_t return_gid; #define TRYDROPGROUPPRIVS() DROPGROUPPRIVS() -#define DROPGROUPPRIVS() setgid(getgid()) -#define GETGROUPPRIVS() setgid(return_gid) +#define DROPGROUPPRIVS() \ + if (setegid(getgid()) != 0) { \ + adios ("setegid", "unable to set group to %ld", (long) getgid()); \ + } +#define GETGROUPPRIVS() \ + if (setegid(return_gid) != 0) { \ + adios ("setegid", "unable to set group to %ld", (long) return_gid); \ + } #define SAVEGROUPPRIVS() return_gid = getegid() #else /* define *GROUPPRIVS() as null; this avoids having lots of "#ifdef MAILGROUP"s */