aboutsummaryrefslogtreecommitdiff
path: root/contrib/openpam/lib/libpam/pam_getenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/openpam/lib/libpam/pam_getenv.c')
-rw-r--r--contrib/openpam/lib/libpam/pam_getenv.c21
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);
}
/**