diff options
author | Tobias Stoeckmann <tobias@stoeckmann.org> | 2024-01-02 22:42:58 +0100 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2024-01-03 17:28:06 +0000 |
commit | 73d009e9ea8edafc18c7fe3650b25dd6bdce88c1 (patch) | |
tree | 6f2241202748293e59b02a6764c615703a193aa4 /modules/pam_unix/passverify.c | |
parent | b285652d864120a967401da28f3d20555f6cc9f5 (diff) | |
download | pam-73d009e9ea8edafc18c7fe3650b25dd6bdce88c1.tar.gz pam-73d009e9ea8edafc18c7fe3650b25dd6bdce88c1.tar.bz2 pam-73d009e9ea8edafc18c7fe3650b25dd6bdce88c1.zip |
pam_unix: use getline
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Diffstat (limited to 'modules/pam_unix/passverify.c')
-rw-r--r-- | modules/pam_unix/passverify.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/modules/pam_unix/passverify.c b/modules/pam_unix/passverify.c index 3bcfed7f..2474fa7a 100644 --- a/modules/pam_unix/passverify.c +++ b/modules/pam_unix/passverify.c @@ -651,7 +651,7 @@ save_old_password(pam_handle_t *pamh, const char *forwho, const char *oldpass, int howmany) #endif { - static char buf[16384]; + char *buf = NULL; char *s_luser, *s_uid, *s_npas, *s_pas, *pass; int npas; FILE *pwfile, *opwfile; @@ -660,6 +660,7 @@ save_old_password(pam_handle_t *pamh, const char *forwho, const char *oldpass, int found = 0; struct passwd *pwd = NULL; struct stat st; + size_t bufsize = 0; size_t len = strlen(forwho); #ifdef WITH_SELINUX char *prev_context_raw = NULL; @@ -727,7 +728,7 @@ save_old_password(pam_handle_t *pamh, const char *forwho, const char *oldpass, goto done; } - while (fgets(buf, 16380, opwfile)) { + while (getline(&buf, &bufsize, opwfile) == -1) { if (!strncmp(buf, forwho, len) && strchr(":,\n", buf[len]) != NULL) { char *ep, *sptr = NULL; long value; @@ -777,6 +778,7 @@ save_old_password(pam_handle_t *pamh, const char *forwho, const char *oldpass, break; } } + free(buf); fclose(opwfile); if (!found) { |