-current buildworld failure in libpam

Craig Rodrigues rodrigc at crodrigues.org
Sat Jul 12 07:01:30 PDT 2003


On Sat, Jul 12, 2003 at 10:59:44AM +0200, Michael Reifenberger wrote:
> ===> lib/libpam/modules/pam_echo
> cc -O2 -pipe
> -I/usr/src/lib/libpam/modules/pam_echo/../../../../contrib/openpam/include
> -I/usr/src/lib/libpam/modules/pam_echo/../../libpam  -Wsystem-headers -Werror
> -Wall -Wno-format-y2k -W -Wstrict-prototypes -Wmissing-prototypes
> -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow
> -Wcast-align -Wno-uninitialized  -c
> /usr/src/lib/libpam/modules/pam_echo/pam_echo.c
> /usr/src/lib/libpam/modules/pam_echo/pam_echo.c: In function `_pam_echo':
> /usr/src/lib/libpam/modules/pam_echo/pam_echo.c:92: warning: dereferencing
> type-punned pointer will break strict-aliasing rules
> *** Error code 1

What do you have in your /etc/make.conf?  If you change optimization
from -O2 to -O, then this problem goes away.

I looked into this problem, and created a patch based on a workaround
for a similar problem that I saw here:

http://sources.redhat.com/ml/libc-hacker/2002-11/msg00048.html

Can you try this patch?

-- 
Craig Rodrigues        
http://crodrigues.org
rodrigc at crodrigues.org
-------------- next part --------------
Index: pam_echo.c
===================================================================
RCS file: /home/ncvs/src/lib/libpam/modules/pam_echo/pam_echo.c,v
retrieving revision 1.3
diff -u -u -r1.3 pam_echo.c
--- pam_echo.c	6 Feb 2003 14:19:50 -0000	1.3
+++ pam_echo.c	12 Jul 2003 13:57:29 -0000
@@ -48,7 +48,11 @@
     int argc, const char *argv[])
 {
 	char msg[PAM_MAX_MSG_SIZE];
-	const char *str, *p, *q;
+	const char *p, *q;
+	union {
+	  const char *s;
+	  const void *ptr;
+	} str;
 	int err, i, item;
 	size_t len;
 
@@ -89,12 +93,12 @@
 			}
 			if (item == -1)
 				continue;
-			err = pam_get_item(pamh, item, (const void **)&str);
+			err = pam_get_item(pamh, item, &str.ptr);
 			if (err != PAM_SUCCESS)
 				return (err);
-			if (str == NULL)
-				str = "(null)";
-			for (q = str; *q != '\0' && len < sizeof(msg) - 1; ++q)
+			if (str.s == NULL)
+				str.s = "(null)";
+			for (q = str.s; *q != '\0' && len < sizeof(msg) - 1; ++q)
 				msg[len++] = *q;
 		}
 	}


More information about the freebsd-current mailing list