rendered paste body--- linux-ftpd-0.17/ftpd/popen.c.bak 1999-07-16 11:12:54.000000000 +1000
+++ linux-ftpd-0.17/ftpd/popen.c 2006-08-25 13:31:33.950447078 +1000
@@ -169,8 +169,13 @@
* XXX: this doesn't seem right... and shouldn't
* we initgroups, or at least setgroups(0,0)?
*/
- setgid(getegid());
- setuid(i);
+
+/*
+ * PSz 25 Aug 06 Must check the return status of these setgid/setuid calls,
+ * see http://www.bress.net/blog/archives/34-setuid-madness.html
+ */
+ if ( setgid(geteuid()) != 0 ) _exit(1);
+ if ( setuid(i) != 0 ) _exit(1);
#ifndef __linux__
/*
@@ -1408,7 +1412,8 @@
goto bad;
sleep(tries);
}
- (void) seteuid((uid_t)pw->pw_uid);
+/* PSz 25 Aug 06 Check return status */
+ if (seteuid((uid_t)pw->pw_uid) != 0) _exit(1);
sigfillset(&allsigs);
sigprocmask (SIG_UNBLOCK, &allsigs, NULL);
@@ -1440,7 +1445,8 @@
bad:
/* Return the real value of errno (close may change it) */
t = errno;
- (void) seteuid((uid_t)pw->pw_uid);
+/* PSz 25 Aug 06 Check return status */
+ if (seteuid((uid_t)pw->pw_uid) != 0) _exit(1);
sigfillset (&allsigs);
sigprocmask (SIG_UNBLOCK, &allsigs, NULL);
(void) close(s);