The fileserver crashes on amd64_linux2[46] (and probably also ia64_linux2[46]) when tracing is turned on (TSTP signal).

The reason: inet_ntoa() is not declared anywhere and therefore assumed returning an int, but the format string in ViceLog expects a char * (which on some architectures are not the same thing). Judging from what gets included in the various .c files calling inet_ntoa() I suspect the vlserver could choke on that as well.

The attached patch #includes <arpa/inet.h> in afsutil.h which covers all cases where that file is not included directly and looks like a reasonable place given that it defines ViceLog et al. This is also what happens in other places where inet_ntoa() is called.

Given that there is an afs_inet_ntoa, one might alternatively
#define inet_ntoa(x) afs_inet_ntoa((proper typecast) x)
at that point. It has to be done *after* including arpa/inet.h so that the #define does not interfere with a later declaration.

I actually wonder why hardly anybody uses the '%I' format instead which util/snprintf.c understands - perhaps because a move to IPv6 (if ever) would be more complicated?

(Bcc'ed to openafs-bugs)
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Rainer Toebbicke
European Laboratory for Particle Physics(CERN) - Geneva, Switzerland
Phone: +41 22 767 8985       Fax: +41 22 767 7155
--- openafs/src/util/afsutil.h.o141     2005-07-11 21:08:49.000000000 +0200
+++ openafs/src/util/afsutil.h  2006-03-08 11:25:47.000000000 +0100
@@ -30,6 +30,7 @@
 extern int serverLogSyslog;
 extern int serverLogSyslogFacility;
 extern char *serverLogSyslogTag;
+#include <arpa/inet.h>         /* for inet_ntoa() */
 #endif
 extern void vFSLog(const char *format, va_list args);
 extern void SetLogThreadNumProgram(int (*func) () );

Reply via email to