diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | sink.c | 10 |
2 files changed, 9 insertions, 2 deletions
@@ -63,6 +63,7 @@ fetchmail 6.3.15 (not yet released): * Log operating system errors when BSMTP writes fail. * Fix verbose mode progress formatting regression from 6.3.10; SMTP trace lines were no longer on a line of their own. Reported by Melchior Franz. +* Check seteuid() return value and abort running MDA if switch fails. # CHANGES * The repository has been converted and moved from the Subversion (SVN) format @@ -1235,7 +1235,10 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg, * under all BSDs and Linux) */ orig_uid = getuid(); - seteuid(ctl->uid); + if (seteuid(ctl->uid)) { + report(stderr, GT_("Cannot switch effective user id to %ld: %s\n"), (long)ctl->uid, strerror(errno)); + return PS_IOERR; + } #endif /* HAVE_SETEUID */ sinkfp = popen(before, "w"); @@ -1244,7 +1247,10 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg, #ifdef HAVE_SETEUID /* this will fail quietly if we didn't start as root */ - seteuid(orig_uid); + if (seteuid(orig_uid)) { + report(stderr, GT_("Cannot switch effective user id back to original %ld: %s\n"), (long)orig_uid, strerror(errno)); + return PS_IOERR; + } #endif /* HAVE_SETEUID */ if (!sinkfp) |