aboutsummaryrefslogtreecommitdiff
path: root/modules/pam_faillock
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@stoeckmann.org>2024-01-01 22:38:12 +0100
committerDmitry V. Levin <ldv@strace.io>2024-01-02 18:24:08 +0000
commit47420d19940302f00c940da47d8f60a9e45af03e (patch)
tree7e10ec5885dea3a9b49e847107fe0f7f86e2bcee /modules/pam_faillock
parentf9d38b1f0cba7447573d1b773aeae4bde0421ef9 (diff)
downloadpam-47420d19940302f00c940da47d8f60a9e45af03e.tar.gz
pam-47420d19940302f00c940da47d8f60a9e45af03e.tar.bz2
pam-47420d19940302f00c940da47d8f60a9e45af03e.zip
pam_faillock: do not truncate arguments
The FAILLOCK_CONF_MAX_LINELINE limitation is not true for arguments which derive from pam configuration file. Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Diffstat (limited to 'modules/pam_faillock')
-rw-r--r--modules/pam_faillock/pam_faillock.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/modules/pam_faillock/pam_faillock.c b/modules/pam_faillock/pam_faillock.c
index a89909ab..e636a24e 100644
--- a/modules/pam_faillock/pam_faillock.c
+++ b/modules/pam_faillock/pam_faillock.c
@@ -106,21 +106,25 @@ args_parse(pam_handle_t *pamh, int argc, const char **argv,
opts->action = FAILLOCK_ACTION_AUTHSUCC;
}
else {
- char buf[FAILLOCK_CONF_MAX_LINELEN + 1];
- char *val;
+ char *name, *val;
- strncpy(buf, argv[i], sizeof(buf) - 1);
- buf[sizeof(buf) - 1] = '\0';
+ if ((name = strdup(argv[i])) == NULL) {
+ pam_syslog(pamh, LOG_CRIT,
+ "Error allocating memory: %m");
+ return PAM_BUF_ERR;
+ }
- val = strchr(buf, '=');
+ val = strchr(name, '=');
if (val != NULL) {
*val = '\0';
++val;
}
else {
- val = buf + sizeof(buf) - 1;
+ val = name + strlen(name);
}
- set_conf_opt(pamh, opts, buf, val);
+ set_conf_opt(pamh, opts, name, val);
+
+ free(name);
}
}