-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