summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorTim Potter <tpot@samba.org>2002-05-10 03:02:22 +0000
committerTim Potter <tpot@samba.org>2002-05-10 03:02:22 +0000
commitfc26f277caa0baad3c3d101fd94e365dec565d54 (patch)
tree428ace895561fae835b2e5da11192a3086c9bfa5 /source3
parent6d893c61cd9bbbef9c4953d1def6762684cf0f00 (diff)
downloadsamba-fc26f277caa0baad3c3d101fd94e365dec565d54.tar.gz
samba-fc26f277caa0baad3c3d101fd94e365dec565d54.tar.bz2
samba-fc26f277caa0baad3c3d101fd94e365dec565d54.zip
Fix for Solaris nscd issue pointed out by Mike Gerdts
<Michael.Gerdts@alcatel.com>. The struct passwd in Solaris contains some extra fields which must be initialised otherwise nscd crashes. (This used to be commit a67323d07177ebc8e46dc14476efaf7e95944504)
Diffstat (limited to 'source3')
-rw-r--r--source3/acconfig.h2
-rw-r--r--source3/configure.in27
-rw-r--r--source3/include/config.h.in4
-rw-r--r--source3/nsswitch/winbind_nss.c11
4 files changed, 43 insertions, 1 deletions
diff --git a/source3/acconfig.h b/source3/acconfig.h
index 9f395a9947..ae8474da01 100644
--- a/source3/acconfig.h
+++ b/source3/acconfig.h
@@ -189,6 +189,8 @@
#undef STAT_ST_BLOCKSIZE
#undef HAVE_DEVICE_MAJOR_FN
#undef HAVE_DEVICE_MINOR_FN
+#undef HAVE_PASSWD_PW_COMMENT
+#undef HAVE_PASSWD_PW_AGE
/*
* Add these definitions to allow VFS modules to
* see the CPPFLAGS defines.
diff --git a/source3/configure.in b/source3/configure.in
index c224f9a7b7..7871c54f25 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -2813,6 +2813,33 @@ AC_SUBST(WINBIND_PAM_TARGETS)
AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
+# Solaris has some extra fields in struct passwd that need to be
+# initialised otherwise nscd crashes. Unfortunately autoconf < 2.50
+# doesn't have the AC_CHECK_MEMBER macro which would be handy for checking
+# this.
+
+#AC_CHECK_MEMBER(struct passwd.pw_comment,
+# AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),
+# [#include <pwd.h>])
+
+AC_CACHE_CHECK([whether struct passwd has pw_comment],samba_cv_passwd_pw_comment, [
+ AC_TRY_COMPILE([#include <pwd.h>],[struct passwd p; p.pw_comment;],
+ samba_cv_passwd_pw_comment=yes,samba_cv_passwd_pw_comment=no)])
+if test x"$samba_cv_passwd_pw_comment" = x"yes"; then
+ AC_DEFINE(HAVE_PASSWD_PW_COMMENT)
+fi
+
+#AC_CHECK_MEMBER(struct passwd.pw_age,
+# AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),
+# [#include <pwd.h>])
+
+AC_CACHE_CHECK([whether struct passwd has pw_age],samba_cv_passwd_pw_age, [
+ AC_TRY_COMPILE([#include <pwd.h>],[struct passwd p; p.pw_age;],
+ samba_cv_passwd_pw_age=yes,samba_cv_passwd_pw_age=no)])
+if test x"$samba_cv_passwd_pw_age" = x"yes"; then
+ AC_DEFINE(HAVE_PASSWD_PW_AGE)
+fi
+
#################################################
# Check to see if we should use the included popt
diff --git a/source3/include/config.h.in b/source3/include/config.h.in
index 3691e38747..a93f1a48fc 100644
--- a/source3/include/config.h.in
+++ b/source3/include/config.h.in
@@ -1,4 +1,4 @@
-/* include/config.h.in. Generated automatically from configure.in by autoheader. */
+/* include/config.h.in. Generated automatically from configure.in by autoheader 2.13. */
/* Define if on AIX 3.
System headers sometimes define this.
@@ -255,6 +255,8 @@
#undef STAT_ST_BLOCKSIZE
#undef HAVE_DEVICE_MAJOR_FN
#undef HAVE_DEVICE_MINOR_FN
+#undef HAVE_PASSWD_PW_COMMENT
+#undef HAVE_PASSWD_PW_AGE
/*
* Add these definitions to allow VFS modules to
* see the CPPFLAGS defines.
diff --git a/source3/nsswitch/winbind_nss.c b/source3/nsswitch/winbind_nss.c
index 0a49f5ec96..a396e5551b 100644
--- a/source3/nsswitch/winbind_nss.c
+++ b/source3/nsswitch/winbind_nss.c
@@ -659,6 +659,17 @@ static NSS_STATUS fill_pwent(struct passwd *result,
strcpy(result->pw_shell, pw->pw_shell);
+ /* The struct passwd for Solaris has some extra fields which must
+ be initialised or nscd crashes. */
+
+#if HAVE_PASSWD_PW_COMMENT
+ result->pw_comment = "";
+#endif
+
+#if HAVE_PASSWD_PW_AGE
+ result->pw_age = "";
+#endif
+
return NSS_STATUS_SUCCESS;
}