aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Pankov <yuripv@FreeBSD.org>2021-04-11 22:02:12 +0000
committerYuri Pankov <yuripv@FreeBSD.org>2021-04-15 19:15:51 +0000
commitc6dcae2dfa3b96edc1fd8bbb6254c48fafbc8cd3 (patch)
treefcf7cd9316c41be867d95c30493e771bbcb020b4
parentbda3bf09d82daf4352691a7b3a5b0e1cff66a5fd (diff)
downloadsrc-c6dcae2dfa3b96edc1fd8bbb6254c48fafbc8cd3.tar.gz
src-c6dcae2dfa3b96edc1fd8bbb6254c48fafbc8cd3.zip
setclassenvironment: trim leading spaces in variable names
Trim leading spaces in variable names when the list is e.g. pretty-formatted in /etc/login.conf or ~/.login_conf. PR: 247947 Reviewed by: allanjude Differential Revision: https://reviews.freebsd.org/D25649 (cherry picked from commit eeaf9d562fe137e0c52b8c346742dccfc8bde015)
-rw-r--r--lib/libutil/login_class.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/libutil/login_class.c b/lib/libutil/login_class.c
index fd0b232d0a43..38666bc8e3d3 100644
--- a/lib/libutil/login_class.c
+++ b/lib/libutil/login_class.c
@@ -231,12 +231,17 @@ setclassenvironment(login_cap_t *lc, const struct passwd * pwd, int paths)
while (*set_env != NULL) {
char *p = strchr(*set_env, '=');
- if (p != NULL) { /* Discard invalid entries */
+ if (p != NULL && p != *set_env) { /* Discard invalid entries */
+ const char *ep;
char *np;
*p++ = '\0';
+ /* Strip leading spaces from variable name */
+ ep = *set_env;
+ while (*ep == ' ' || *ep == '\t')
+ ep++;
if ((np = substvar(p, pwd, hlen, pch, nlen)) != NULL) {
- setenv(*set_env, np, 1);
+ setenv(ep, np, 1);
free(np);
}
}