diff options
author | yar <yar@FreeBSD.org> | 2003-02-05 11:11:32 +0000 |
---|---|---|
committer | yar <yar@FreeBSD.org> | 2003-02-05 11:11:32 +0000 |
commit | 5d11fbeaec93d3de5b6596f794a6f5f29ed59f25 (patch) | |
tree | 4b29e35aa35941f09786f00cc1ba9616d4b55f2e /libexec/ftpd | |
parent | 60462a1f22acfbfb6b0e4226ba8bbbd8809e15ed (diff) | |
download | FreeBSD-src-5d11fbeaec93d3de5b6596f794a6f5f29ed59f25.zip FreeBSD-src-5d11fbeaec93d3de5b6596f794a6f5f29ed59f25.tar.gz |
Allow "~/" in pathnames to work for a chrooted user.
Diffstat (limited to 'libexec/ftpd')
-rw-r--r-- | libexec/ftpd/ftpcmd.y | 6 |
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); |