aboutsummaryrefslogtreecommitdiff
path: root/modules/pam_faillock/faillock_config.c
diff options
context:
space:
mode:
authorTobias Stoeckmann <tobias@stoeckmann.org>2024-01-02 22:33:15 +0100
committerDmitry V. Levin <ldv@strace.io>2024-01-03 17:28:06 +0000
commitc0ca17b36aa850e33ecd4254e5445f798d885e3b (patch)
tree98d4ad1062725c86f0332d2c55527e486dcba695 /modules/pam_faillock/faillock_config.c
parent3a9cd90a97c64a66d2912df5109793ee9158858c (diff)
downloadpam-c0ca17b36aa850e33ecd4254e5445f798d885e3b.tar.gz
pam-c0ca17b36aa850e33ecd4254e5445f798d885e3b.tar.bz2
pam-c0ca17b36aa850e33ecd4254e5445f798d885e3b.zip
pam_faillock: use getline
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Diffstat (limited to 'modules/pam_faillock/faillock_config.c')
-rw-r--r--modules/pam_faillock/faillock_config.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/modules/pam_faillock/faillock_config.c b/modules/pam_faillock/faillock_config.c
index 5d796240..91c8001d 100644
--- a/modules/pam_faillock/faillock_config.c
+++ b/modules/pam_faillock/faillock_config.c
@@ -79,7 +79,8 @@ config_log(const pam_handle_t *pamh, int priority, const char *fmt, ...)
int
read_config_file(pam_handle_t *pamh, struct options *opts, const char *cfgfile)
{
- char linebuf[FAILLOCK_CONF_MAX_LINELEN+1];
+ char *linebuf = NULL;
+ size_t n = 0;
const char *fname = (cfgfile != NULL) ? cfgfile : FAILLOCK_DEFAULT_CONF;
FILE *f = fopen(fname, "r");
@@ -100,15 +101,15 @@ read_config_file(pam_handle_t *pamh, struct options *opts, const char *cfgfile)
return PAM_SERVICE_ERR;
}
- while (fgets(linebuf, sizeof(linebuf), f) != NULL) {
+ while (getline(&linebuf, &n, f) != -1) {
size_t len;
char *ptr;
char *name;
int eq;
len = strlen(linebuf);
- /* len cannot be 0 unless there is a bug in fgets */
if (len && linebuf[len - 1] != '\n' && !feof(f)) {
+ free(linebuf);
(void) fclose(f);
return PAM_SERVICE_ERR;
}
@@ -162,6 +163,7 @@ read_config_file(pam_handle_t *pamh, struct options *opts, const char *cfgfile)
set_conf_opt(pamh, opts, name, ptr);
}
+ free(linebuf);
(void)fclose(f);
return PAM_SUCCESS;
}