From a9fd3582f8ed032ee91163eac65a80db80bc287f Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Wed, 19 Dec 2012 17:51:41 +0100 Subject: Always properly free the pwquality settings. --- src/pam_pwquality.c | 7 +++++++ src/pwmake.c | 2 ++ src/pwscore.c | 2 ++ 3 files changed, 11 insertions(+) (limited to 'src') diff --git a/src/pam_pwquality.c b/src/pam_pwquality.c index 82104ee..ac7e826 100644 --- a/src/pam_pwquality.c +++ b/src/pam_pwquality.c @@ -176,6 +176,7 @@ pam_sm_chauthtok(pam_handle_t *pamh, int flags, * We cannot do that, since the original path is compiled * into the cracklib library and we don't know it. */ + pwquality_free_settings(options.pwq); return PAM_SUCCESS; } else if (flags & PAM_UPDATE_AUTHTOK) { int retval; @@ -187,6 +188,7 @@ pam_sm_chauthtok(pam_handle_t *pamh, int flags, if (retval != PAM_SUCCESS || user == NULL) { if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_ERR, "Can not get username"); + pwquality_free_settings(options.pwq); return PAM_AUTHTOK_ERR; } @@ -218,6 +220,7 @@ pam_sm_chauthtok(pam_handle_t *pamh, int flags, pam_strerror(pamh, retval)); continue; } else if (newtoken == NULL) { /* user aborted password change, quit */ + pwquality_free_settings(options.pwq); return PAM_AUTHTOK_ERR; } @@ -255,12 +258,15 @@ pam_sm_chauthtok(pam_handle_t *pamh, int flags, pam_set_item(pamh, PAM_AUTHTOK, NULL); continue; } else if (newtoken == NULL) { /* user aborted password change, quit */ + pwquality_free_settings(options.pwq); return PAM_AUTHTOK_ERR; } + pwquality_free_settings(options.pwq); return PAM_SUCCESS; } + pwquality_free_settings(options.pwq); pam_set_item (pamh, PAM_AUTHTOK, NULL); /* if we have only one try, we can use the real reason, @@ -270,6 +276,7 @@ pam_sm_chauthtok(pam_handle_t *pamh, int flags, else return retval; } else { + pwquality_free_settings(options.pwq); if (ctrl & PAM_DEBUG_ARG) pam_syslog(pamh, LOG_NOTICE, "UNKNOWN flags setting %02X",flags); } diff --git a/src/pwmake.c b/src/pwmake.c index 3372169..5b8cfb8 100644 --- a/src/pwmake.c +++ b/src/pwmake.c @@ -52,10 +52,12 @@ main(int argc, char *argv[]) if ((rv = pwquality_read_config(pwq, NULL, &auxerror)) != 0) { fprintf(stderr, "Error: %s\n", pwquality_strerror(NULL, 0, rv, auxerror)); + pwquality_free_settings(pwq); exit(3); } rv = pwquality_generate(pwq, bits, &password); + pwquality_free_settings(pwq); if (rv != 0) { fprintf(stderr, "Error: %s\n", pwquality_strerror(NULL, 0, rv, NULL)); diff --git a/src/pwscore.c b/src/pwscore.c index f3a9210..219a175 100644 --- a/src/pwscore.c +++ b/src/pwscore.c @@ -61,11 +61,13 @@ main(int argc, char *argv[]) } if ((rv=pwquality_read_config(pwq, NULL, &auxerror)) != 0) { + pwquality_free_settings(pwq); fprintf(stderr, _("Error: %s\n"), pwquality_strerror(NULL, 0, rv, auxerror)); exit(3); } rv = pwquality_check(pwq, buf, NULL, user, &auxerror); + pwquality_free_settings(pwq); if (rv < 0) { fprintf(stderr, _("Password quality check failed:\n %s\n"), -- cgit v1.2.1