diff options
Diffstat (limited to 'contrib/openpam/lib/libpam/pam_getenv.c')
-rw-r--r-- | contrib/openpam/lib/libpam/pam_getenv.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/contrib/openpam/lib/libpam/pam_getenv.c b/contrib/openpam/lib/libpam/pam_getenv.c index c3bbcd8eac2f..c207f5cfe470 100644 --- a/contrib/openpam/lib/libpam/pam_getenv.c +++ b/contrib/openpam/lib/libpam/pam_getenv.c @@ -1,6 +1,6 @@ /*- * Copyright (c) 2002-2003 Networks Associates Technology, Inc. - * Copyright (c) 2004-2017 Dag-Erling Smørgrav + * Copyright (c) 2004-2019 Dag-Erling Smørgrav * All rights reserved. * * This software was developed for the FreeBSD Project by ThinkSec AS and @@ -32,7 +32,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $OpenPAM: pam_getenv.c 938 2017-04-30 21:34:42Z des $ + * $OpenPAM: pam_getenv.c 944 2019-02-22 09:49:12Z des $ */ #ifdef HAVE_CONFIG_H @@ -58,19 +58,20 @@ const char * pam_getenv(pam_handle_t *pamh, const char *name) { - char *str; + size_t len; int i; ENTERS(name); - if (strchr(name, '=') != NULL) { - errno = EINVAL; - RETURNS(NULL); + for (len = 0; name[len] != '\0'; ++len) { + if (name[len] == '=') { + errno = EINVAL; + RETURNS(NULL); + } } - if ((i = openpam_findenv(pamh, name, strlen(name))) < 0) + if ((i = openpam_findenv(pamh, name, len)) < 0) RETURNS(NULL); - if ((str = strchr(pamh->env[i], '=')) == NULL) - RETURNS(""); - RETURNS(str); + /* assert(pamh->env[i][len] == '='); */ + RETURNS(pamh->env[i] + len + 1); } /** |