Changeset 2010

Show
Ignore:
Timestamp:
10/27/2007 11:06:17 PM (9 months ago)
Author:
jan
Message:

fixed initgroup() failing as it is called after chroot() (fixes #1384)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/server.c

    r1988 r2010  
    13251325                        return -1; 
    13261326                } 
     1327 
     1328#ifdef HAVE_PWD_H 
     1329                /** 
     1330                 * initgroups() has to be called before chroot() 
     1331                 */ 
     1332                if (srv->srvconf.groupname->used) { 
     1333                        setgid(grp->gr_gid); 
     1334                        setgroups(0, NULL); 
     1335                        if (srv->srvconf.username->used) { 
     1336                                initgroups(srv->srvconf.username->ptr, grp->gr_gid); 
     1337                        } 
     1338                } 
     1339#endif 
    13271340#ifdef HAVE_CHROOT 
    13281341                if (srv->srvconf.changeroot->used) { 
     
    13411354#ifdef HAVE_PWD_H 
    13421355                /* drop root privs */ 
    1343                 if (srv->srvconf.groupname->used) { 
    1344                         setgid(grp->gr_gid); 
    1345                         setgroups(0, NULL); 
    1346                 } 
    1347                 if (srv->srvconf.username->used && srv->srvconf.groupname->used) 
    1348                         initgroups(srv->srvconf.username->ptr, grp->gr_gid); 
    13491356                if (srv->srvconf.username->used) setuid(pwd->pw_uid); 
    13501357#endif 
  • trunk/src/spawn-fcgi.c

    r1945 r2010  
    430430                                return -1; 
    431431                        } 
     432 
     433                        /* do the change before we do the chroot() */ 
     434                        setgid(grp->gr_gid); 
     435                        setgroups(0, NULL);  
     436 
     437                        if (username) { 
     438                                initgroups(username, grp->gr_gid); 
     439                        } 
     440 
    432441                } 
    433442 
     
    448457 
    449458                /* drop root privs */ 
    450                 if (groupname) { 
    451                         setgid(grp->gr_gid); 
    452                 } 
    453459                if (username) { 
    454                         if (groupname) { 
    455                                 initgroups(username, grp->gr_gid); 
    456                         } 
    457460                        setuid(pwd->pw_uid); 
    458461                }