aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-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;
}