s3:configure: check that struct utmp.ut_line is large enough for our use case
authorStefan Metzmacher <metze@samba.org>
Mon, 8 Oct 2012 09:15:50 +0000 (11:15 +0200)
committerMichael Adam <obnox@samba.org>
Fri, 19 Oct 2012 10:14:59 +0000 (12:14 +0200)
We use "smb/%u" with a 32-bit number, "smb/4294967295\0" requires
15 chars (including the '\0').

metze

Signed-off-by: Michael Adam <obnox@samba.org>
source3/configure.in
source3/wscript

index 70632bc3cb44f3fa539525ddd04f09ade1401b86..fb00feeb8c72127a25e1b73ac86235901b3073af 100644 (file)
@@ -2238,6 +2238,19 @@ if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
 fi
 
+AC_CACHE_CHECK([whether sizeof ut_line in utmp is ok],samba_cv_HAVE_UX_UT_LINE,[
+AC_TRY_RUN([#include <stdio.h>
+#include <sys/types.h>
+#include <utmp.h>
+int main(void) {
+ if (sizeof(((struct utmp *)NULL)->ut_line) < 15) {
+     return 1;
+ }
+ return 0;
+}
+],
+samba_cv_HAVE_UX_UT_LINE=yes,samba_cv_HAVE_UX_UT_LINE=no,samba_cv_HAVE_UX_UT_LINE=cross)])
+
 fi
 # end utmp details
 
@@ -4703,6 +4716,11 @@ if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
        WITH_UTMP=no
 fi
 
+if test x"$WITH_UTMP" = x"yes" -a x"$samba_cv_HAVE_UX_UT_LINE" != x"yes"; then
+       utmp_no_reason=", sizeof ut_line not ok"
+       WITH_UTMP=no
+fi
+
 # Display test results
 
 if test x"$WITH_UTMP" = x"yes"; then
index 56ab760750acbed3684c5c319f0203e642f3919c..92575c82647c058fb6d285a6ae39998200a5b2d4 100644 (file)
@@ -660,8 +660,16 @@ msg.msg_acctrightslen = sizeof(fd);
         conf.CHECK_CODE('struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);',
                         'PUTUTLINE_RETURNS_UTMP', headers='utmp.h',
                         msg="Checking whether pututline returns pointer")
+        conf.CHECK_SIZEOF(['((struct utmp *)NULL)->ut_line'], headers='utmp.h',
+                          define='SIZEOF_UTMP_UT_LINE')
+        if not conf.CONFIG_SET('SIZEOF_UTMP_UT_LINE'):
+            conf.env.with_utmp = False
+        elif int(conf.env.SIZEOF_UTMP_UT_LINE) < 15:
+            conf.env.with_utmp = False
         if conf.env.with_utmp:
             conf.DEFINE('WITH_UTMP', 1)
+        else:
+            Logs.warn("--with-utmp but utmp support not sufficient")
 
     if Options.options.with_avahi:
         conf.env.with_avahi = True