From 92d53dd7dc8ca71ae28d2a8762524396cd3c6f58 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 8 Oct 2012 11:15:50 +0200 Subject: [PATCH] s3:configure: check that struct utmp.ut_line is large enough for our use case We use "smb/%u" with a 32-bit number, "smb/4294967295\0" requires 15 chars (including the '\0'). metze Signed-off-by: Michael Adam --- source3/configure.in | 18 ++++++++++++++++++ source3/wscript | 8 ++++++++ 2 files changed, 26 insertions(+) diff --git a/source3/configure.in b/source3/configure.in index 70632bc3cb4..fb00feeb8c7 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -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 +#include +#include +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 diff --git a/source3/wscript b/source3/wscript index 56ab760750a..92575c82647 100644 --- a/source3/wscript +++ b/source3/wscript @@ -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 -- 2.11.4.GIT