diff --git a/source3/acconfig.h b/source3/acconfig.h index 00c14ca97b7..eb49d436972 100644 --- a/source3/acconfig.h +++ b/source3/acconfig.h @@ -186,6 +186,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 bbfdc2e382a..98065944490 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -2665,6 +2665,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 ]) + +AC_CACHE_CHECK([whether struct passwd has pw_comment],samba_cv_passwd_pw_comment, [ + AC_TRY_COMPILE([#include ],[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 ]) + +AC_CACHE_CHECK([whether struct passwd has pw_age],samba_cv_passwd_pw_age, [ + AC_TRY_COMPILE([#include ],[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 7328d022c1a..8dc7dd6cf88 100644 --- a/source3/include/config.h.in +++ b/source3/include/config.h.in @@ -252,6 +252,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 0a49f5ec968..a396e5551bc 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; }