From 3fe2c54a5b122acc1d96c0e01d802b4f4a4c84b4 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 2 Jul 2012 14:08:41 -0700 Subject: Fix the waf/autoconf builds to detect correctly the 32-bit or 64-bit syscall ABI on Linux. Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Tue Jul 3 05:32:21 CEST 2012 on sn-devel-104 --- source3/configure.in | 91 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 71 insertions(+), 20 deletions(-) (limited to 'source3/configure.in') diff --git a/source3/configure.in b/source3/configure.in index 4def9cd80a..4379ce7eb1 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2766,26 +2766,77 @@ AC_CHECK_FUNCS(getpagesize) # look for a method of setting the effective uid seteuid=no; -# -# Disable for now until Linux-64 and Linux-32 specific versions -# are separated out. -# -#case "$host_os" in -#*linux*) -#if test $seteuid = no; then -#AC_CACHE_CHECK([for Linux thread-specific credentials],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[ -#AC_TRY_RUN([ -##define AUTOCONF_TEST 1 -##define USE_LINUX_THREAD_CREDENTIALS 1 -##include "${srcdir-.}/../lib/util/setid.c" -##include "${srcdir-.}/lib/util_sec.c"], -# samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)]) -#if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then -# seteuid=yes;AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials]) -#fi -#fi -#;; -#esac +################################################ +# Start by checking for 32-bit system call definitions on Linux. + +case "$host_os" in +*linux*) +AC_CACHE_CHECK([for Linux 32-bit system calls],samba_cv_USE_LINUX_32BIT_SYSCALLS,[ +AC_TRY_COMPILE([ +#if defined(HAVE_UNISTD_H) +#include +#endif +#include +#include +#include +#include + +#ifdef HAVE_SYS_PRIV_H +#include +#endif +#ifdef HAVE_SYS_ID_H +#include +#endif + +#if defined(HAVE_SYSCALL_H) +#include +#endif + +#if defined(HAVE_SYS_SYSCALL_H) +#include +#endif +], +[ +syscall(SYS_setresuid32, -1, -1, -1); +syscall(SYS_setresgid32, -1, -1, -1); +syscall(SYS_setreuid32, -1, -1); +syscall(SYS_setregid32, -1, -1); +syscall(SYS_setuid32, -1); +syscall(SYS_setgid32, -1); +syscall(SYS_setgroups32, 0, NULL); +], samba_cv_USE_LINUX_32BIT_SYSCALLS=yes,samba_cv_USE_LINUX_32BIT_SYSCALLS=no,samba_cv_USE_LINUX_32BIT_SYSCALLS=cross)]) + +if test x"$samba_cv_USE_LINUX_32BIT_SYSCALLS" = x"yes"; then + AC_DEFINE(USE_LINUX_32BIT_SYSCALLS,1,[Use Linux 32-bit system calls]) + AC_CACHE_CHECK([for Linux thread-specific credentials with 32-bit system calls],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[ + AC_TRY_RUN([ +#define AUTOCONF_TEST 1 +#define USE_LINUX_THREAD_CREDENTIALS 1 +#define USE_LINUX_32BIT_SYSCALLS 1 +#include "${srcdir-.}/../lib/util/setid.c" +#include "${srcdir-.}/lib/util_sec.c"], + samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)]) +if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then + seteuid=yes; + AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials with 32-bit system calls]) +fi +fi + +if test $seteuid = no; then +AC_CACHE_CHECK([for Linux thread-specific credentials],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[ +AC_TRY_RUN([ +#define AUTOCONF_TEST 1 +#define USE_LINUX_THREAD_CREDENTIALS 1 +#include "${srcdir-.}/../lib/util/setid.c" +#include "${srcdir-.}/lib/util_sec.c"], + samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)]) +if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then + seteuid=yes;AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials]) +fi +fi + +;; +esac if test $seteuid = no; then AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[ -- cgit