Author: gd Date: 2006-03-13 15:13:35 +0000 (Mon, 13 Mar 2006) New Revision: 14321
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14321 Log: When we have libnscd and winbindd comes (back) online, try to flush the nscd caches so that NSS-calls can deliver accurate information. Guenther Modified: branches/SAMBA_3_0/source/Makefile.in branches/SAMBA_3_0/source/configure.in branches/SAMBA_3_0/source/nsswitch/winbindd.h branches/SAMBA_3_0/source/nsswitch/winbindd_dual.c trunk/source/Makefile.in trunk/source/configure.in trunk/source/nsswitch/winbindd.h trunk/source/nsswitch/winbindd_dual.c Changeset: Modified: branches/SAMBA_3_0/source/Makefile.in =================================================================== --- branches/SAMBA_3_0/source/Makefile.in 2006-03-13 15:04:17 UTC (rev 14320) +++ branches/SAMBA_3_0/source/Makefile.in 2006-03-13 15:13:35 UTC (rev 14321) @@ -35,6 +35,7 @@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ @@ -1180,7 +1181,7 @@ bin/[EMAIL PROTECTED]@: $(WINBINDD_OBJ) @BUILD_POPT@ bin/.dummy @echo "Linking $@" @$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(WINBINDD_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \ - @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS) + @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS) $(NSCD_LIBS) # Please don't add .o files to libnss_winbind, libnss_wins, or the pam_winbind # libraries. Add to the appropriate PICOBJ variable instead. Modified: branches/SAMBA_3_0/source/configure.in =================================================================== --- branches/SAMBA_3_0/source/configure.in 2006-03-13 15:04:17 UTC (rev 14320) +++ branches/SAMBA_3_0/source/configure.in 2006-03-13 15:13:35 UTC (rev 14321) @@ -266,6 +266,7 @@ AC_SUBST(EXTRA_SBIN_PROGS) AC_SUBST(EXTRA_ALL_TARGETS) AC_SUBST(CONFIG_LIBS) +AC_SUBST(NSCD_LIBS) # Set defaults PIE_CFLAGS="" @@ -3528,6 +3529,8 @@ LIBS="$ac_save_LIBS" fi +AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache) + ################################################# # check for automount support AC_MSG_CHECKING(whether to use automount) Modified: branches/SAMBA_3_0/source/nsswitch/winbindd.h =================================================================== --- branches/SAMBA_3_0/source/nsswitch/winbindd.h 2006-03-13 15:04:17 UTC (rev 14320) +++ branches/SAMBA_3_0/source/nsswitch/winbindd.h 2006-03-13 15:13:35 UTC (rev 14321) @@ -29,6 +29,10 @@ #include "winbindd_nss.h" +#ifdef HAVE_LIBNSCD +#include "libnscd.h" +#endif + #undef DBGC_CLASS #define DBGC_CLASS DBGC_WINBIND Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_dual.c =================================================================== --- branches/SAMBA_3_0/source/nsswitch/winbindd_dual.c 2006-03-13 15:04:17 UTC (rev 14320) +++ branches/SAMBA_3_0/source/nsswitch/winbindd_dual.c 2006-03-13 15:13:35 UTC (rev 14321) @@ -559,6 +559,7 @@ static void child_msg_online(int msg_type, struct process_id src, void *buf, size_t len) { struct winbindd_domain *domain; + int ret; DEBUG(5,("child_msg_online received.\n")); @@ -570,6 +571,21 @@ /* Set our global state as online. */ set_global_winbindd_state_online(); +#ifdef HAVE_NSCD_FLUSH_CACHE + /* Flush nscd caches to get accurate new information */ + ret = nscd_flush_cache("passwd"); + if (ret) { + DEBUG(5,("failed to flush nscd cache for 'passwd' service: %s\n", + error_message(ret))); + } + + ret = nscd_flush_cache("group"); + if (ret) { + DEBUG(5,("failed to flush nscd cache for 'group' service: %s\n", + error_message(ret))); + } +#endif + /* Mark everything online - delete any negative cache entries to force an immediate reconnect. */ Modified: trunk/source/Makefile.in =================================================================== --- trunk/source/Makefile.in 2006-03-13 15:04:17 UTC (rev 14320) +++ trunk/source/Makefile.in 2006-03-13 15:13:35 UTC (rev 14321) @@ -35,6 +35,7 @@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ @@ -1209,7 +1210,7 @@ bin/[EMAIL PROTECTED]@: $(WINBINDD_OBJ) @BUILD_POPT@ bin/.dummy @echo "Linking $@" @$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(WINBINDD_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \ - @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS) + @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS) $(NSCD_LIBS) # Please don't add .o files to libnss_winbind, libnss_wins, or the pam_winbind # libraries. Add to the appropriate PICOBJ variable instead. Modified: trunk/source/configure.in =================================================================== --- trunk/source/configure.in 2006-03-13 15:04:17 UTC (rev 14320) +++ trunk/source/configure.in 2006-03-13 15:13:35 UTC (rev 14321) @@ -266,6 +266,7 @@ AC_SUBST(EXTRA_SBIN_PROGS) AC_SUBST(EXTRA_ALL_TARGETS) AC_SUBST(CONFIG_LIBS) +AC_SUBST(NSCD_LIBS) # Set defaults PIE_CFLAGS="" @@ -3528,6 +3529,8 @@ LIBS="$ac_save_LIBS" fi +AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache) + ################################################# # check for automount support AC_MSG_CHECKING(whether to use automount) Modified: trunk/source/nsswitch/winbindd.h =================================================================== --- trunk/source/nsswitch/winbindd.h 2006-03-13 15:04:17 UTC (rev 14320) +++ trunk/source/nsswitch/winbindd.h 2006-03-13 15:13:35 UTC (rev 14321) @@ -29,6 +29,10 @@ #include "winbindd_nss.h" +#ifdef HAVE_LIBNSCD +#include "libnscd.h" +#endif + #undef DBGC_CLASS #define DBGC_CLASS DBGC_WINBIND Modified: trunk/source/nsswitch/winbindd_dual.c =================================================================== --- trunk/source/nsswitch/winbindd_dual.c 2006-03-13 15:04:17 UTC (rev 14320) +++ trunk/source/nsswitch/winbindd_dual.c 2006-03-13 15:13:35 UTC (rev 14321) @@ -559,6 +559,7 @@ static void child_msg_online(int msg_type, struct process_id src, void *buf, size_t len) { struct winbindd_domain *domain; + int ret; DEBUG(5,("child_msg_online received.\n")); @@ -570,6 +571,21 @@ /* Set our global state as online. */ set_global_winbindd_state_online(); +#ifdef HAVE_NSCD_FLUSH_CACHE + /* Flush nscd caches to get accurate new information */ + ret = nscd_flush_cache("passwd"); + if (ret) { + DEBUG(5,("failed to flush nscd cache for 'passwd' service: %s\n", + error_message(ret))); + } + + ret = nscd_flush_cache("group"); + if (ret) { + DEBUG(5,("failed to flush nscd cache for 'group' service: %s\n", + error_message(ret))); + } +#endif + /* Mark everything online - delete any negative cache entries to force an immediate reconnect. */
