diff options
author | des <des@FreeBSD.org> | 2008-07-23 09:15:38 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2008-07-23 09:15:38 +0000 |
commit | 367fd865463ff70d9176231cb7590e6e69b51b06 (patch) | |
tree | 31274ced9514914f9504202c6e49c93d509e710d /monitor_wrap.c | |
parent | e3cfeae816c1b89dbdb19357e2256b4b252fbf05 (diff) | |
download | FreeBSD-src-367fd865463ff70d9176231cb7590e6e69b51b06.zip FreeBSD-src-367fd865463ff70d9176231cb7590e6e69b51b06.tar.gz |
Vendor import of OpenSSH 4.6p1 for posterity's sake
Diffstat (limited to 'monitor_wrap.c')
-rw-r--r-- | monitor_wrap.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/monitor_wrap.c b/monitor_wrap.c index 3865539..27cc1c5 100644 --- a/monitor_wrap.c +++ b/monitor_wrap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: monitor_wrap.c,v 1.54 2006/08/12 20:46:46 miod Exp $ */ +/* $OpenBSD: monitor_wrap.c,v 1.55 2007/02/19 10:45:58 dtucker Exp $ */ /* * Copyright 2002 Niels Provos <provos@citi.umich.edu> * Copyright 2002 Markus Friedl <markus@openbsd.org> @@ -73,6 +73,7 @@ #include "channels.h" #include "session.h" +#include "servconf.h" /* Imports */ extern int compat20; @@ -207,7 +208,8 @@ mm_getpwnamallow(const char *username) { Buffer m; struct passwd *pw; - u_int pwlen; + u_int len; + ServerOptions *newopts; debug3("%s entering", __func__); @@ -223,8 +225,8 @@ mm_getpwnamallow(const char *username) buffer_free(&m); return (NULL); } - pw = buffer_get_string(&m, &pwlen); - if (pwlen != sizeof(struct passwd)) + pw = buffer_get_string(&m, &len); + if (len != sizeof(struct passwd)) fatal("%s: struct passwd size mismatch", __func__); pw->pw_name = buffer_get_string(&m, NULL); pw->pw_passwd = buffer_get_string(&m, NULL); @@ -234,6 +236,16 @@ mm_getpwnamallow(const char *username) #endif pw->pw_dir = buffer_get_string(&m, NULL); pw->pw_shell = buffer_get_string(&m, NULL); + + /* copy options block as a Match directive may have changed some */ + newopts = buffer_get_string(&m, &len); + if (len != sizeof(*newopts)) + fatal("%s: option block size mismatch", __func__); + if (newopts->banner != NULL) + newopts->banner = buffer_get_string(&m, NULL); + copy_set_server_options(&options, newopts, 1); + xfree(newopts); + buffer_free(&m); return (pw); |