diff --git a/ChangeLog b/ChangeLog index acefbfbc8..e3239c946 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-10-08 Richard Frith-Macdonald + + * Tools/gdomap.c: Added some checks that getting/setting uid/gid + worked as expected and moved getpwnam() call to where it works. + 2003-10-07 Richard Frith-Macdonald * Source/Additions/GSMime.m: ([GSMimeDocument-setContentType:]) diff --git a/Headers/Additions/GNUstepBase/GSMime.h b/Headers/Additions/GNUstepBase/GSMime.h index 5552feebf..240a978de 100644 --- a/Headers/Additions/GNUstepBase/GSMime.h +++ b/Headers/Additions/GNUstepBase/GSMime.h @@ -136,6 +136,7 @@ - (void) setContent: (id)newContent type: (NSString*)type name: (NSString*)name; +- (void) setContentType: (NSString*)newType; - (void) setHeader: (GSMimeHeader*)info; @end diff --git a/Tools/gdomap.c b/Tools/gdomap.c index f8da860ed..bf42b95ea 100644 --- a/Tools/gdomap.c +++ b/Tools/gdomap.c @@ -4598,6 +4598,21 @@ printf( } #endif } +{ + int uid = -2; + int gid = -2; + +#ifdef HAVE_PWD_H +#ifdef HAVE_GETPWNAM + struct passwd *pw = getpwnam("nobody"); + + if (pw != 0) + { + uid = pw->pw_uid; + gid = pw->pw_gid; + } +#endif +#endif #if !defined(__svr4__) /* @@ -4627,42 +4642,35 @@ printf( /* * Try to become a 'safe' user now that we have * done everything that needs root priv. + * + * Try to be the user who launched us ... so they can kill us too. + * Otherwise default to user nobody. */ if (getuid () != 0) { - /* - * Try to be the user who launched us ... so they can kill us too. - */ - setuid (getuid ()); - setgid (getgid ()); + uid = getuid(); + gid = getgid(); } - else + if (setgid (gid) < 0) { - int uid = -2; - int gid = -2; -#ifdef HAVE_PWD_H -#ifdef HAVE_GETPWNAM - struct passwd *pw = getpwnam("nobody"); - - if (pw != 0) - { - uid = pw->pw_uid; - gid = pw->pw_gid; - } -#endif -#endif - setuid (uid); - setgid (gid); - setgroups (0, 0); /* Empty additional groups list */ + sprintf(ebuf, "Failed setgid(%d) - %s", gid, strerror(errno)); + gdomap_log(LOG_CRIT); + exit(EXIT_FAILURE); } - if (getuid() == 0) + if (setuid (uid) < 0) + { + sprintf(ebuf, "Failed setuid(%d) - %s", uid, strerror(errno)); + gdomap_log(LOG_CRIT); + exit(EXIT_FAILURE); + } + if (getuid () == 0) { sprintf(ebuf, "Still running as root after trying to change"); gdomap_log(LOG_CRIT); exit(EXIT_FAILURE); } - #endif /* __MINGW__ */ +} init_probe(); /* Probe other name servers on net. */