diff options
author | Tim Potter <tpot@samba.org> | 2002-05-10 03:02:22 +0000 |
---|---|---|
committer | Tim Potter <tpot@samba.org> | 2002-05-10 03:02:22 +0000 |
commit | fc26f277caa0baad3c3d101fd94e365dec565d54 (patch) | |
tree | 428ace895561fae835b2e5da11192a3086c9bfa5 /source3 | |
parent | 6d893c61cd9bbbef9c4953d1def6762684cf0f00 (diff) | |
download | samba-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.h | 2 | ||||
-rw-r--r-- | source3/configure.in | 27 | ||||
-rw-r--r-- | source3/include/config.h.in | 4 | ||||
-rw-r--r-- | source3/nsswitch/winbind_nss.c | 11 |
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; } |