--- masqmail-0.2.27.orig/src/masqmail.c
+++ masqmail-0.2.27/src/masqmail.c
@@ -62,8 +62,10 @@
sigterm_in_progress = 1;
if (pidfile) {
- uid_t uid;
- uid = seteuid(0);
+ uid_t uid = geteuid();
+ if (seteuid(0) != 0) {
+ logwrite(LOG_ALERT, "sigterm_handler: could not set euid to %d: %s\n", 0, strerror(errno));
+ }
if (unlink(pidfile) != 0)
logwrite(LOG_WARNING, "could not delete pid file %s: %s\n", pidfile, strerror(errno));
seteuid(uid); /* we exit anyway after this, just to be sure */
@@ -236,8 +238,7 @@
conf.do_verbose = FALSE;
if (!conf.run_as_user) {
- seteuid(conf.orig_uid);
- setegid(conf.orig_gid);
+ set_euidgid(conf.orig_uid, conf.orig_gid, NULL, NULL);
}
DEBUG(5) debugf("accepting smtp message on stdin\n");
@@ -265,8 +266,7 @@
}
if (!conf.run_as_user) {
- seteuid(conf.orig_uid);
- setegid(conf.orig_gid);
+ set_euidgid(conf.orig_uid, conf.orig_gid, NULL, NULL);
}
DEBUG(5) debugf("accepting message on stdin\n");
@@ -635,10 +635,15 @@
if (strcmp(conf_file, CONF_FILE) != 0) {
if (conf.orig_uid != 0) {
conf.run_as_user = TRUE;
- seteuid(conf.orig_uid);
- setegid(conf.orig_gid);
- setuid(conf.orig_uid);
- setgid(conf.orig_gid);
+ set_euidgid(conf.orig_uid, conf.orig_gid, NULL, NULL);
+ if (setgid(conf.orig_gid)) {
+ logwrite(LOG_ALERT, "could not set gid to %d: %s\n", conf.orig_gid, strerror(errno));
+ exit(1);
+ }
+ if (setuid(conf.orig_uid)) {
+ logwrite(LOG_ALERT, "could not set uid to %d: %s\n", conf.orig_uid, strerror(errno));
+ exit(1);
+ }
}
}