upstream: fix home-directory extension implementation, it always

returned the current user's home directory contrary to the spec.

Patch from Jakub Jelen via GHPR477

OpenBSD-Commit-ID: 5afd775eab7f9cbe222d7fbae4c793de6c3b3d28
This commit is contained in:
djm@openbsd.org 2024-04-30 06:23:51 +00:00 committed by Damien Miller
parent 14e2b16bc6
commit 385ecb31e1
No known key found for this signature in database

View File

@ -1,4 +1,4 @@
/* $OpenBSD: sftp-server.c,v 1.147 2023/04/12 08:53:54 jsg Exp $ */ /* $OpenBSD: sftp-server.c,v 1.148 2024/04/30 06:23:51 djm Exp $ */
/* /*
* Copyright (c) 2000-2004 Markus Friedl. All rights reserved. * Copyright (c) 2000-2004 Markus Friedl. All rights reserved.
* *
@ -1706,14 +1706,16 @@ process_extended_home_directory(u_int32_t id)
fatal_fr(r, "parse"); fatal_fr(r, "parse");
debug3("request %u: home-directory \"%s\"", id, username); debug3("request %u: home-directory \"%s\"", id, username);
if ((user_pw = getpwnam(username)) == NULL) { if (username[0] == '\0') {
user_pw = pw;
} else if ((user_pw = getpwnam(username)) == NULL) {
send_status(id, SSH2_FX_FAILURE); send_status(id, SSH2_FX_FAILURE);
goto out; goto out;
} }
verbose("home-directory \"%s\"", pw->pw_dir); verbose("home-directory \"%s\"", user_pw->pw_dir);
attrib_clear(&s.attrib); attrib_clear(&s.attrib);
s.name = s.long_name = pw->pw_dir; s.name = s.long_name = user_pw->pw_dir;
send_names(id, 1, &s); send_names(id, 1, &s);
out: out:
free(username); free(username);