summaryrefslogtreecommitdiffstats
path: root/libexec
diff options
context:
space:
mode:
authoryar <yar@FreeBSD.org>2003-02-05 11:11:32 +0000
committeryar <yar@FreeBSD.org>2003-02-05 11:11:32 +0000
commit5d11fbeaec93d3de5b6596f794a6f5f29ed59f25 (patch)
tree4b29e35aa35941f09786f00cc1ba9616d4b55f2e /libexec
parent60462a1f22acfbfb6b0e4226ba8bbbd8809e15ed (diff)
downloadFreeBSD-src-5d11fbeaec93d3de5b6596f794a6f5f29ed59f25.zip
FreeBSD-src-5d11fbeaec93d3de5b6596f794a6f5f29ed59f25.tar.gz
Allow "~/" in pathnames to work for a chrooted user.
Diffstat (limited to 'libexec')
-rw-r--r--libexec/ftpd/ftpcmd.y6
1 files changed, 4 insertions, 2 deletions
diff --git a/libexec/ftpd/ftpcmd.y b/libexec/ftpd/ftpcmd.y
index c9d5263..49fc1ff 100644
--- a/libexec/ftpd/ftpcmd.y
+++ b/libexec/ftpd/ftpcmd.y
@@ -1671,8 +1671,10 @@ exptilde(char *s)
user = p + 1; /* skip tilde */
if ((path = strchr(p, '/')) != NULL)
*(path++) = '\0'; /* separate ~user from the rest of path */
- ppw = *user ? getpwnam(user) : pw;
- if (ppw) {
+ if (*user == '\0') /* no user specified, use the current user */
+ user = pw->pw_name;
+ /* read passwd even for the current user since we may be chrooted */
+ if ((ppw = getpwnam(user)) != NULL) {
/* user found, substitute login directory for ~user */
if (path)
asprintf(&q, "%s/%s", ppw->pw_dir, path);
OpenPOWER on IntegriCloud