From: bitblt Date: Sun, 5 Jan 1997 21:28:07 +0000 (+0000) Subject: Signals are now blocked while ftpd runs with euid 0, as suggested by X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=5b333653f771f2b9c95150fe88bf4222b1c99b54;p=openbsd Signals are now blocked while ftpd runs with euid 0, as suggested by Weiste Venema. If this triggers any problems (most likely with ABOR not working at certain times) let me know. --- diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c index d1ff7fc5a95..48f2b951bbb 100644 --- a/libexec/ftpd/ftpd.c +++ b/libexec/ftpd/ftpd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ftpd.c,v 1.29 1997/01/02 21:33:33 deraadt Exp $ */ +/* $OpenBSD: ftpd.c,v 1.30 1997/01/05 21:28:07 bitblt Exp $ */ /* $NetBSD: ftpd.c,v 1.15 1995/06/03 22:46:47 mycroft Exp $ */ /* @@ -680,7 +680,9 @@ checkuser(fname, name) static void end_login() { - + sigset_t allsigs; + sigfillset (&allsigs); + sigprocmask (SIG_BLOCK, &allsigs, NULL); (void) seteuid((uid_t)0); if (logged_in) { logwtmp(ttyline, "", ""); @@ -701,6 +703,7 @@ pass(passwd) FILE *fd; static char homedir[MAXPATHLEN]; char rootdir[MAXPATHLEN]; + sigset_t allsigs; if (logged_in || askpasswd == 0) { reply(503, "Login with USER first."); @@ -832,6 +835,8 @@ skip: reply(550, "Can't set uid."); goto bad; } + sigfillset(&allsigs); + sigprocmask(SIG_UNBLOCK,&allsigs,NULL); /* * Set home directory so that use of ~ (tilde) works correctly. @@ -1045,9 +1050,12 @@ getdatasock(mode) char *mode; { int on = 1, s, t, tries; + sigset_t allsigs; if (data >= 0) return (fdopen(data, mode)); + sigfillset(&allsigs); + sigprocmask (SIG_BLOCK, &allsigs, NULL); (void) seteuid((uid_t)0); s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) @@ -1068,6 +1076,9 @@ getdatasock(mode) sleep(tries); } (void) seteuid((uid_t)pw->pw_uid); + sigfillset(&allsigs); + sigprocmask (SIG_UNBLOCK, &allsigs, NULL); + #ifdef IP_TOS on = IPTOS_THROUGHPUT; if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *)&on, sizeof(int)) < 0) @@ -1095,6 +1106,8 @@ bad: /* Return the real value of errno (close may change it) */ t = errno; (void) seteuid((uid_t)pw->pw_uid); + sigfillset (&allsigs); + sigprocmask (SIG_UNBLOCK, &allsigs, NULL); (void) close(s); errno = t; return (NULL); @@ -1708,9 +1721,13 @@ void dologout(status) int status; { + sigset_t allsigs; + transflag = 0; if (logged_in) { + sigfillset(&allsigs); + sigprocmask(SIG_BLOCK, &allsigs, NULL); (void) seteuid((uid_t)0); logwtmp(ttyline, "", ""); if (doutmp)