From: Todd C. Miller Date: Wed, 16 May 2018 16:48:50 +0000 (-0600) Subject: Set handle->pw before sss_to_sudoers() since sss_check_user() X-Git-Tag: SUDO_1_8_24^2~72 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c30ad97107f05be9aa4440ad9edf8a4210cbcd13;p=sudo Set handle->pw before sss_to_sudoers() since sss_check_user() uses it. Coverity CID 185651 --- diff --git a/plugins/sudoers/sssd.c b/plugins/sudoers/sssd.c index d57f80a69..9ecdd4109 100644 --- a/plugins/sudoers/sssd.c +++ b/plugins/sudoers/sssd.c @@ -332,21 +332,24 @@ sudo_sss_query(struct sudo_nss *nss, struct passwd *pw) if (sss_result == NULL) goto done; + /* Stash a ref to the passwd struct in the handle. */ + sudo_pw_addref(pw); + handle->pw = pw; + /* Convert to sudoers parse tree. */ if (!sss_to_sudoers(handle, sss_result, &nss->userspecs)) { ret = -1; goto done; } - /* Stash a ref to the passwd struct in the handle. */ - sudo_pw_addref(pw); - handle->pw = pw; - done: /* Cleanup */ handle->fn_free_result(sss_result); - if (ret == -1) + if (ret == -1) { free_userspecs(&nss->userspecs); + sudo_pw_delref(handle->pw); + handle->pw = NULL; + } sudo_debug_printf(SUDO_DEBUG_DIAG, "Done with LDAP searches");