From: Timo Sirainen Date: Thu, 8 May 2003 03:36:21 +0000 (+0300) Subject: Support wu-ftpd-like chrooting in /etc/passwd. If home directory ends with X-Git-Tag: 1.1.alpha1~4667 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=02d32b05a69c125b9c30d7002f023de4bd55ab4b;p=thirdparty%2Fdovecot%2Fcore.git Support wu-ftpd-like chrooting in /etc/passwd. If home directory ends with "/./", it's chrooted to. --HG-- branch : HEAD --- diff --git a/src/auth/userdb-passwd.c b/src/auth/userdb-passwd.c index 601463d202..f1f5de762d 100644 --- a/src/auth/userdb-passwd.c +++ b/src/auth/userdb-passwd.c @@ -15,6 +15,7 @@ static void passwd_lookup(const char *user, userdb_callback_t *callback, { struct user_data data; struct passwd *pw; + size_t len; pw = getpwnam(user); if (pw == NULL) { @@ -31,7 +32,16 @@ static void passwd_lookup(const char *user, userdb_callback_t *callback, data.gid = pw->pw_gid; data.virtual_user = data.system_user = pw->pw_name; - data.home = pw->pw_dir; + + len = strlen(pw->pw_dir); + if (len < 3 || strcmp(pw->pw_dir + len - 3, "/./") != 0) + data.home = pw->pw_dir; + else { + /* wu-ftpd uses /./. We don't support + the dir after chroot, but this should work well enough. */ + data.home = t_strndup(pw->pw_dir, len-3); + data.chroot = TRUE; + } callback(&data, context); }