cvs commit: src/lib/libpam/modules/pam_echo pam_echo.c src/lib/libpam/modules/pam_group pam_group.c src/lib/libpam/modules/pam_lastlog pam_lastlog.c src/lib/libpam/modules/pam_opieaccess...

Andreas Hauser andy-freebsd at splashground.de
Thu Dec 11 06:56:56 PST 2003


des wrote @ Thu, 11 Dec 2003 05:55:16 -0800 (PST):
>   Fix strict aliasing breakage in PAM modules (except pam_krb5, which needs
>   more work than the others).  This should make most modules build with -O2.


Index: pam_krb5.c
===================================================================
RCS file: /home/ncvs/src/lib/libpam/modules/pam_krb5/pam_krb5.c,v
retrieving revision 1.18
diff -u -p -r1.18 pam_krb5.c
--- pam_krb5.c	31 May 2003 17:19:03 -0000	1.18
+++ pam_krb5.c	2 Dec 2003 23:05:25 -0000
@@ -105,7 +105,8 @@ pam_sm_authenticate(pam_handle_t *pamh, 
 	krb5_get_init_creds_opt opts;
 	struct passwd *pwd;
 	int retval;
-	const char *sourceuser, *user, *pass, *service;
+	const char *user, *pass;
+	const void *sourceuser, *service, *item;
 	char *principal, *princ_name, *ccache_name, luser[32], *srvdup;
 
 	retval = pam_get_user(pamh, &user, USER_PROMPT);
@@ -114,18 +115,18 @@ pam_sm_authenticate(pam_handle_t *pamh, 
 
 	PAM_LOG("Got user: %s", user);
 
-	retval = pam_get_item(pamh, PAM_RUSER, (const void **)&sourceuser);
+	retval = pam_get_item(pamh, PAM_RUSER, &sourceuser);
 	if (retval != PAM_SUCCESS)
 		return (retval);
 
-	PAM_LOG("Got ruser: %s", sourceuser);
+	PAM_LOG("Got ruser: %s", (const char *)sourceuser);
 
 	service = NULL;
-	pam_get_item(pamh, PAM_SERVICE, (const void **)&service);
+	pam_get_item(pamh, PAM_SERVICE, &service);
 	if (service == NULL)
 		service = "unknown";
 
-	PAM_LOG("Got service: %s", service);
+	PAM_LOG("Got service: %s", (const char *)service);
 
 	krbret = krb5_init_context(&pam_context);
 	if (krbret != 0) {
@@ -153,7 +154,7 @@ pam_sm_authenticate(pam_handle_t *pamh, 
 
 	/* Get principal name */
 	if (openpam_get_option(pamh, PAM_OPT_AUTH_AS_SELF))
-		asprintf(&principal, "%s/%s", sourceuser, user);
+		asprintf(&principal, "%s/%s", (const char *)sourceuser, user);
 	else
 		principal = strdup(user);
 
@@ -208,7 +209,7 @@ pam_sm_authenticate(pam_handle_t *pamh, 
 		if (retval != PAM_SUCCESS)
 			goto cleanup2;
 
-		retval = pam_get_item(pamh, PAM_USER, (const void **)&user);
+		retval = pam_get_item(pamh, PAM_USER, &item);
 		if (retval != PAM_SUCCESS)
 			goto cleanup2;
 
@@ -267,7 +268,7 @@ pam_sm_authenticate(pam_handle_t *pamh, 
 	PAM_LOG("Credentials stashed");
 
 	/* Verify them */
-	if ((srvdup = strdup(service)) == NULL) {
+	if ((srvdup = strdup((const char *)service)) == NULL) {
 		retval = PAM_BUF_ERR;
 		goto cleanup;
 	}
@@ -283,7 +284,7 @@ pam_sm_authenticate(pam_handle_t *pamh, 
 
 	PAM_LOG("Credentials stash verified");
 
-	retval = pam_get_data(pamh, "ccache", (const void **)&ccache_name);
+	retval = pam_get_data(pamh, "ccache", &item);
 	if (retval == PAM_SUCCESS) {
 		krb5_cc_destroy(pam_context, ccache);
 		PAM_VERBOSE_ERROR("Kerberos 5 error");
@@ -343,7 +344,8 @@ pam_sm_setcred(pam_handle_t *pamh, int f
 	krb5_cc_cursor cursor;
 	struct passwd *pwd = NULL;
 	int retval;
-	const char *cache_name, *q, *user;
+	const char *cache_name, *q;
+	const void *user, *cache_data;
 	char *cache_name_buf = NULL, *p;
 
 	uid_t euid;
@@ -364,11 +366,11 @@ pam_sm_setcred(pam_handle_t *pamh, int f
 	PAM_LOG("Establishing credentials");
 
 	/* Get username */
-	retval = pam_get_item(pamh, PAM_USER, (const void **)&user);
+	retval = pam_get_item(pamh, PAM_USER, &user);
 	if (retval != PAM_SUCCESS)
 		return (retval);
 
-	PAM_LOG("Got user: %s", user);
+	PAM_LOG("Got user: %s", (const char *)user);
 
 	krbret = krb5_init_context(&pam_context);
 	if (krbret != 0) {
@@ -384,21 +386,21 @@ pam_sm_setcred(pam_handle_t *pamh, int f
 	PAM_LOG("Got euid, egid: %d %d", euid, egid);
 
 	/* Retrieve the temporary cache */
-	retval = pam_get_data(pamh, "ccache", (const void **)&cache_name);
+	retval = pam_get_data(pamh, "ccache", &cache_data);
 	if (retval != PAM_SUCCESS) {
 		retval = PAM_CRED_UNAVAIL;
 		goto cleanup3;
 	}
-	krbret = krb5_cc_resolve(pam_context, cache_name, &ccache_temp);
+	krbret = krb5_cc_resolve(pam_context, (const char *)cache_data, &ccache_temp);
 	if (krbret != 0) {
-		PAM_LOG("Error krb5_cc_resolve(\"%s\"): %s", cache_name,
+		PAM_LOG("Error krb5_cc_resolve(\"%s\"): %s", (const char *)cache_data,
 		    krb5_get_err_text(pam_context, krbret));
 		retval = PAM_SERVICE_ERR;
 		goto cleanup3;
 	}
 
 	/* Get the uid. This should exist. */
-	pwd = getpwnam(user);
+	pwd = getpwnam((const char *)user);
 	if (pwd == NULL) {
 		retval = PAM_USER_UNKNOWN;
 		goto cleanup3;
@@ -579,15 +581,15 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int
 	krb5_ccache ccache;
 	krb5_principal princ;
 	int retval;
-	const char *user, *ccache_name;
+	const void *user, *ccache_name;
 
-	retval = pam_get_item(pamh, PAM_USER, (const void **)&user);
+	retval = pam_get_item(pamh, PAM_USER, &user);
 	if (retval != PAM_SUCCESS)
 		return (retval);
 
-	PAM_LOG("Got user: %s", user);
+	PAM_LOG("Got user: %s", (const char *)user);
 
-	retval = pam_get_data(pamh, "ccache", (const void **)&ccache_name);
+	retval = pam_get_data(pamh, "ccache", &ccache_name);
 	if (retval != PAM_SUCCESS)
 		return (PAM_SUCCESS);
 
@@ -601,15 +603,15 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int
 
 	PAM_LOG("Context initialised");
 
-	krbret = krb5_cc_resolve(pam_context, ccache_name, &ccache);
+	krbret = krb5_cc_resolve(pam_context, (const char *)ccache_name, &ccache);
 	if (krbret != 0) {
-		PAM_LOG("Error krb5_cc_resolve(\"%s\"): %s", ccache_name,
+		PAM_LOG("Error krb5_cc_resolve(\"%s\"): %s", (const char *)ccache_name,
 		    krb5_get_err_text(pam_context, krbret));
 		krb5_free_context(pam_context);
 		return (PAM_PERM_DENIED);
 	}
 
-	PAM_LOG("Got ccache %s", ccache_name);
+	PAM_LOG("Got ccache %s", (const char *)ccache_name);
 
 
 	krbret = krb5_cc_get_principal(pam_context, ccache, &princ);
@@ -622,7 +624,7 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int
 
 	PAM_LOG("Got principal");
 
-	if (krb5_kuserok(pam_context, princ, user))
+	if (krb5_kuserok(pam_context, princ, (const char *)user))
 		retval = PAM_SUCCESS;
 	else
 		retval = PAM_PERM_DENIED;
@@ -652,17 +654,18 @@ pam_sm_chauthtok(pam_handle_t *pamh, int
 	krb5_get_init_creds_opt opts;
 	krb5_data result_code_string, result_string;
 	int result_code, retval;
-	const char *user, *pass;
+	const char *pass;
+	const void *user;
 	char *princ_name, *passdup;
 
 	if (!(flags & PAM_UPDATE_AUTHTOK))
 		return (PAM_AUTHTOK_ERR);
 
-	retval = pam_get_item(pamh, PAM_USER, (const void **)&user);
+	retval = pam_get_item(pamh, PAM_USER, &user);
 	if (retval != PAM_SUCCESS)
 		return (retval);
 
-	PAM_LOG("Got user: %s", user);
+	PAM_LOG("Got user: %s", (const char *)user);
 
 	krbret = krb5_init_context(&pam_context);
 	if (krbret != 0) {
@@ -677,7 +680,7 @@ pam_sm_chauthtok(pam_handle_t *pamh, int
 	PAM_LOG("Credentials options initialised");
 
 	/* Get principal name */
-	krbret = krb5_parse_name(pam_context, user, &princ);
+	krbret = krb5_parse_name(pam_context, (const char *)user, &princ);
 	if (krbret != 0) {
 		PAM_LOG("Error krb5_parse_name(): %s",
 		    krb5_get_err_text(pam_context, krbret));


More information about the cvs-src mailing list