diff options
author | Tobias Stoeckmann <tobias@stoeckmann.org> | 2024-01-01 22:38:12 +0100 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2024-01-02 18:24:08 +0000 |
commit | 47420d19940302f00c940da47d8f60a9e45af03e (patch) | |
tree | 7e10ec5885dea3a9b49e847107fe0f7f86e2bcee /modules/pam_faillock | |
parent | f9d38b1f0cba7447573d1b773aeae4bde0421ef9 (diff) | |
download | pam-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.c | 18 |
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); } } |