--- 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);