diff options
-rw-r--r-- | source4/configure.ac | 1 | ||||
-rw-r--r-- | source4/torture/config.mk | 12 | ||||
-rw-r--r-- | source4/torture/nsstest.c | 6 | ||||
-rw-r--r-- | source4/torture/nsstest.h | 116 | ||||
-rw-r--r-- | source4/torture/nsstest.m4 | 9 |
5 files changed, 142 insertions, 2 deletions
diff --git a/source4/configure.ac b/source4/configure.ac index 6871b81dcf..4feb6debd4 100644 --- a/source4/configure.ac +++ b/source4/configure.ac @@ -25,6 +25,7 @@ m4_include(lib/util/time.m4) m4_include(lib/popt/samba.m4) m4_include(lib/charset/config.m4) m4_include(lib/socket/config.m4) +m4_include(torture/nsstest.m4) #SMB_EXT_LIB_FROM_PKGCONFIG(LIBTALLOC, talloc >= 1.0, # [samba_cv_internal_talloc=no], diff --git a/source4/torture/config.mk b/source4/torture/config.mk index 42f1d72bb0..6a825b01a8 100644 --- a/source4/torture/config.mk +++ b/source4/torture/config.mk @@ -358,6 +358,18 @@ MANPAGE = man/locktest.1 # End BINARY locktest ################################# +################################# +# Start BINARY nsstest +[BINARY::nsstest] +INSTALLDIR = BINDIR +OBJ_FILES = \ + nsstest.o +PRIVATE_DEPENDENCIES = \ + LIBSAMBA-UTIL \ + LIBREPLACE_EXT +# End BINARY nsstest +################################# + GCOV_FLAGS = -ftest-coverage -fprofile-arcs GCOV_LIBS = -lgcov diff --git a/source4/torture/nsstest.c b/source4/torture/nsstest.c index 376edada56..0fc2baf068 100644 --- a/source4/torture/nsstest.c +++ b/source4/torture/nsstest.c @@ -20,6 +20,8 @@ #include "includes.h" +#include "torture/nsstest.h" + static const char *so_path = "/lib/libnss_winbind.so"; static const char *nss_name = "winbind"; static int nss_errno; @@ -35,13 +37,13 @@ static void *find_fn(const char *name) snprintf(s,sizeof(s), "_nss_%s_%s", nss_name, name); if (!h) { - h = sys_dlopen(so_path, RTLD_LAZY); + h = dlopen(so_path, RTLD_LAZY); } if (!h) { printf("Can't open shared library %s\n", so_path); exit(1); } - res = sys_dlsym(h, s); + res = dlsym(h, s); if (!res) { printf("Can't find function %s\n", s); return NULL; diff --git a/source4/torture/nsstest.h b/source4/torture/nsstest.h new file mode 100644 index 0000000000..4dddf473fc --- /dev/null +++ b/source4/torture/nsstest.h @@ -0,0 +1,116 @@ +/* + Unix SMB/CIFS implementation. + nss includes for the nss tester + Copyright (C) Kai Blin 2007 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef _NSSTEST_H +#define _NSSTEST_H + +#include <pwd.h> +#include <grp.h> + +#ifdef HAVE_NSS_COMMON_H + +/* + * Sun Solaris + */ + +#include <nss_common.h> +#include <nss_dbdefs.h> +#include <nsswitch.h> + +typedef nss_status_t NSS_STATUS; + +#define NSS_STATUS_SUCCESS NSS_SUCCESS +#define NSS_STATUS_NOTFOUND NSS_NOTFOUND +#define NSS_STATUS_UNAVAIL NSS_UNAVAIL +#define NSS_STATUS_TRYAGAIN NSS_TRYAGAIN + +#elif HAVE_NSS_H + +/* + * Linux (glibc) + */ + +#include <nss.h> +typedef enum nss_status NSS_STATUS; + +#elif HAVE_NS_API_H + +/* + * SGI IRIX + */ + +#ifdef DATUM +#define _DATUM_DEFINED +#endif + +#include <ns_api.h> + +typedef enum +{ + NSS_STATUS_SUCCESS=NS_SUCCESS, + NSS_STATUS_NOTFOUND=NS_NOTFOUND, + NSS_STATUS_UNAVAIL=NS_UNAVAIL, + NSS_STATUS_TRYAGAIN=NS_TRYAGAIN +} NSS_STATUS; + +#define NSD_MEM_STATIC 0 +#define NSD_MEM_VOLATILE 1 +#define NSD_MEM_DYNAMIC 2 + +#elif defined(HPUX) && defined(HAVE_NSSWITCH_H) + +/* HP-UX 11 */ + +#include <nsswitch.h> + +#define NSS_STATUS_SUCCESS NSS_SUCCESS +#define NSS_STATUS_NOTFOUND NSS_NOTFOUND +#define NSS_STATUS_UNAVAIL NSS_UNAVAIL +#define NSS_STATUS_TRYAGAIN NSS_TRYAGAIN + +#ifdef HAVE_SYNCH_H +#include <synch.h> +#endif +#ifdef HAVE_PTHREAD_H +#include <pthread.h> +#endif + +typedef enum { + NSS_SUCCESS, + NSS_NOTFOUND, + NSS_UNAVAIL, + NSS_TRYAGAIN +} nss_status_t; + +typedef nss_status_t NSS_STATUS; + +#else /* Nothing's defined. Neither solaris nor gnu nor sun nor hp */ + +typedef enum +{ + NSS_STATUS_SUCCESS=0, + NSS_STATUS_NOTFOUND=1, + NSS_STATUS_UNAVAIL=2, + NSS_STATUS_TRYAGAIN=3 +} NSS_STATUS; + +#endif + +#endif /* _NSSTEST_H */ diff --git a/source4/torture/nsstest.m4 b/source4/torture/nsstest.m4 new file mode 100644 index 0000000000..2856f9de15 --- /dev/null +++ b/source4/torture/nsstest.m4 @@ -0,0 +1,9 @@ +case "$host_os" in + *linux*) + SMB_ENABLE(nsstest,YES) + ;; + *) + SMB_ENABLE(nsstest,NO) + ;; +esac + |