From 9f37b1a2b4ce5b2e8a1654ce3b08dbacf05d5752 Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Mon, 18 Jan 2010 23:28:25 +0000 Subject: [PATCH] Really disable wtmp logging when chrooting. Also perform a small cleanup to ftpd_logwtmp(). Just use a NULL parameter for the username to indicate a logout, instead of an empty string. Reported by: Alexey Shuvaev --- libexec/ftpd/ftpd.c | 13 ++++++++----- libexec/ftpd/logwtmp.c | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c index 681fdc342881..119c57543105 100644 --- a/libexec/ftpd/ftpd.c +++ b/libexec/ftpd/ftpd.c @@ -1178,8 +1178,8 @@ end_login(void) #endif (void) seteuid(0); - if (logged_in && dowtmp && !dochroot) - ftpd_logwtmp(wtmpid, "", NULL); + if (logged_in && dowtmp) + ftpd_logwtmp(wtmpid, NULL, NULL); pw = NULL; #ifdef LOGIN_CAP setusercontext(NULL, getpwuid(0), 0, @@ -1482,7 +1482,10 @@ skip: ; chrootdir = NULL; - if (dowtmp && !dochroot) + /* Disable wtmp logging when chrooting. */ + if (dochroot || guest) + dowtmp = 0; + if (dowtmp) ftpd_logwtmp(wtmpid, pw->pw_name, (struct sockaddr *)&his_addr); logged_in = 1; @@ -2730,9 +2733,9 @@ void dologout(int status) { - if (logged_in && dowtmp && !dochroot) { + if (logged_in && dowtmp) { (void) seteuid(0); - ftpd_logwtmp(wtmpid, "", NULL); + ftpd_logwtmp(wtmpid, NULL, NULL); } /* beware of flushing buffers after a SIGPIPE */ _exit(status); diff --git a/libexec/ftpd/logwtmp.c b/libexec/ftpd/logwtmp.c index 3d810dd4b649..82683f53530b 100644 --- a/libexec/ftpd/logwtmp.c +++ b/libexec/ftpd/logwtmp.c @@ -60,7 +60,7 @@ ftpd_logwtmp(char *id, char *user, struct sockaddr *addr) memset(&ut, 0, sizeof(ut)); - if (*user != '\0') { + if (user != NULL) { /* Log in. */ ut.ut_type = USER_PROCESS; (void)strncpy(ut.ut_user, user, sizeof(ut.ut_user));