From owner-p4-projects@FreeBSD.ORG Thu Dec 11 08:41:56 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 176E116A4D0; Thu, 11 Dec 2003 08:41:56 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id CDE0216A4CE for ; Thu, 11 Dec 2003 08:41:55 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 365CA43D2F for ; Thu, 11 Dec 2003 08:41:52 -0800 (PST) (envelope-from des@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.9/8.12.9) with ESMTP id hBBGfqXJ021727 for ; Thu, 11 Dec 2003 08:41:52 -0800 (PST) (envelope-from des@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.9/8.12.9/Submit) id hBBGfpfP021723 for perforce@freebsd.org; Thu, 11 Dec 2003 08:41:51 -0800 (PST) (envelope-from des@freebsd.org) Date: Thu, 11 Dec 2003 08:41:51 -0800 (PST) Message-Id: <200312111641.hBBGfpfP021723@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to des@freebsd.org using -f From: Dag-Erling Smorgrav To: Perforce Change Reviews Subject: PERFORCE change 43812 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Dec 2003 16:41:56 -0000 http://perforce.freebsd.org/chv.cgi?CH=43812 Change 43812 by des@des.at.des.thinksec.com on 2003/12/11 08:41:17 I originally thought the XSSO was wrong to declare pam_get_data()'s final argument as void ** rather than const void **, but having seen the strict aliasing warnings gcc generates at higher -O levels, it makes a lot more sense. Change the prototype and definition back to what the XSSO specifies, and make the necessary changes to avoid warnings in code that calls pam_get_data(). Affected files ... .. //depot/projects/openpam/include/security/pam_appl.h#14 edit .. //depot/projects/openpam/lib/openpam_borrow_cred.c#11 edit .. //depot/projects/openpam/lib/openpam_restore_cred.c#10 edit .. //depot/projects/openpam/lib/pam_get_authtok.c#27 edit .. //depot/projects/openpam/lib/pam_get_data.c#13 edit .. //depot/projects/openpam/lib/pam_get_user.c#19 edit .. //depot/projects/openpam/lib/pam_vprompt.c#13 edit Differences ... ==== //depot/projects/openpam/include/security/pam_appl.h#14 (text+ko) ==== @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/include/security/pam_appl.h#13 $ + * $P4: //depot/projects/openpam/include/security/pam_appl.h#14 $ */ #ifndef _PAM_APPL_H_INCLUDED @@ -71,7 +71,7 @@ int pam_get_data(pam_handle_t *_pamh, const char *_module_data_name, - const void **_data); + void **_data); int pam_get_item(pam_handle_t *_pamh, ==== //depot/projects/openpam/lib/openpam_borrow_cred.c#11 (text+ko) ==== @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_borrow_cred.c#10 $ + * $P4: //depot/projects/openpam/lib/openpam_borrow_cred.c#11 $ */ #include @@ -57,11 +57,12 @@ const struct passwd *pwd) { struct pam_saved_cred *scred; + void *scredp; int r; ENTERI(pwd->pw_uid); - r = pam_get_data(pamh, PAM_SAVED_CRED, (const void **)&scred); - if (r == PAM_SUCCESS && scred != NULL) { + r = pam_get_data(pamh, PAM_SAVED_CRED, &scredp); + if (r == PAM_SUCCESS && scredp != NULL) { openpam_log(PAM_LOG_DEBUG, "already operating under borrowed credentials"); RETURNC(PAM_SYSTEM_ERR); ==== //depot/projects/openpam/lib/openpam_restore_cred.c#10 (text+ko) ==== @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/openpam_restore_cred.c#9 $ + * $P4: //depot/projects/openpam/lib/openpam_restore_cred.c#10 $ */ #include @@ -56,14 +56,16 @@ openpam_restore_cred(pam_handle_t *pamh) { struct pam_saved_cred *scred; + void *scredp; int r; ENTER(); - r = pam_get_data(pamh, PAM_SAVED_CRED, (const void **)&scred); + r = pam_get_data(pamh, PAM_SAVED_CRED, &scredp); if (r != PAM_SUCCESS) RETURNC(r); - if (scred == NULL) + if (scredp == NULL) RETURNC(PAM_SYSTEM_ERR); + scred = scredp; if (scred->euid != geteuid()) { if (seteuid(scred->euid) < 0 || setgroups(scred->ngroups, scred->groups) < 0 || ==== //depot/projects/openpam/lib/pam_get_authtok.c#27 (text+ko) ==== @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_get_authtok.c#26 $ + * $P4: //depot/projects/openpam/lib/pam_get_authtok.c#27 $ */ #include @@ -60,7 +60,7 @@ const char **authtok, const char *prompt) { - const void *oldauthtok; + const void *oldauthtok, *prevauthtok, *promptp; const char *default_prompt; char *resp, *resp2; int pitem, r, style, twice; @@ -90,16 +90,20 @@ } if (openpam_get_option(pamh, "try_first_pass") || openpam_get_option(pamh, "use_first_pass")) { - r = pam_get_item(pamh, item, (const void **)authtok); - if (r == PAM_SUCCESS && *authtok != NULL) + r = pam_get_item(pamh, item, &prevauthtok); + if (r == PAM_SUCCESS && prevauthtok != NULL) { + *authtok = prevauthtok; RETURNC(PAM_SUCCESS); + } else if (openpam_get_option(pamh, "use_first_pass")) RETURNC(r == PAM_SUCCESS ? PAM_AUTH_ERR : r); } if (prompt == NULL) { - r = pam_get_item(pamh, pitem, (const void **)&prompt); - if (r != PAM_SUCCESS || prompt == NULL) + r = pam_get_item(pamh, pitem, &promptp); + if (r != PAM_SUCCESS || promptp == NULL) prompt = default_prompt; + else + prompt = promptp; } style = openpam_get_option(pamh, "echo_pass") ? PAM_PROMPT_ECHO_ON : PAM_PROMPT_ECHO_OFF; ==== //depot/projects/openpam/lib/pam_get_data.c#13 (text+ko) ==== @@ -31,9 +31,10 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_get_data.c#12 $ + * $P4: //depot/projects/openpam/lib/pam_get_data.c#13 $ */ +#include #include #include @@ -50,18 +51,19 @@ int pam_get_data(pam_handle_t *pamh, const char *module_data_name, - const void **data) + void **data) { pam_data_t *dp; ENTERS(module_data_name); if (pamh == NULL) RETURNC(PAM_SYSTEM_ERR); - for (dp = pamh->module_data; dp != NULL; dp = dp->next) + for (dp = pamh->module_data; dp != NULL; dp = dp->next) { if (strcmp(dp->name, module_data_name) == 0) { - *data = dp->data; + *data = (void *)(intptr_t)dp->data; RETURNC(PAM_SUCCESS); } + } RETURNC(PAM_NO_MODULE_DATA); } ==== //depot/projects/openpam/lib/pam_get_user.c#19 (text+ko) ==== @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_get_user.c#18 $ + * $P4: //depot/projects/openpam/lib/pam_get_user.c#19 $ */ #include @@ -57,6 +57,7 @@ const char **user, const char *prompt) { + const void *promptp; char *resp; int r; @@ -67,9 +68,11 @@ if (r == PAM_SUCCESS && *user != NULL) RETURNC(PAM_SUCCESS); if (prompt == NULL) { - r = pam_get_item(pamh, PAM_USER_PROMPT, (const void **)&prompt); - if (r != PAM_SUCCESS || prompt == NULL) + r = pam_get_item(pamh, PAM_USER_PROMPT, &promptp); + if (r != PAM_SUCCESS || promptp == NULL) prompt = user_prompt; + else + prompt = promptp; } r = pam_prompt(pamh, PAM_PROMPT_ECHO_ON, &resp, "%s", prompt); if (r != PAM_SUCCESS) ==== //depot/projects/openpam/lib/pam_vprompt.c#13 (text+ko) ==== @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/openpam/lib/pam_vprompt.c#12 $ + * $P4: //depot/projects/openpam/lib/pam_vprompt.c#13 $ */ #include @@ -59,13 +59,15 @@ struct pam_message msg; const struct pam_message *msgp; struct pam_response *rsp; - struct pam_conv *conv; + const struct pam_conv *conv; + const void *convp; int r; ENTER(); - r = pam_get_item(pamh, PAM_CONV, (const void **)&conv); + r = pam_get_item(pamh, PAM_CONV, &convp); if (r != PAM_SUCCESS) RETURNC(r); + conv = convp; if (conv == NULL || conv->conv == NULL) { openpam_log(PAM_LOG_ERROR, "no conversation function"); RETURNC(PAM_SYSTEM_ERR);