aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
}
}