summaryrefslogtreecommitdiffstats
path: root/source/nsswitch
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2006-03-13 15:13:35 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:15:24 -0500
commita32a423a0e9e0d4dd21282fd528bcd3247fddbd1 (patch)
tree74e75e7e89ff1117a0c3169ff5979d2f49324d4a /source/nsswitch
parent9883957b74ddefb5293e4aef0cc2f53ee4d417ac (diff)
downloadsamba-a32a423a0e9e0d4dd21282fd528bcd3247fddbd1.tar.gz
samba-a32a423a0e9e0d4dd21282fd528bcd3247fddbd1.tar.xz
samba-a32a423a0e9e0d4dd21282fd528bcd3247fddbd1.zip
r14321: When we have libnscd and winbindd comes (back) online, try to flush the
nscd caches so that NSS-calls can deliver accurate information. Guenther
Diffstat (limited to 'source/nsswitch')
-rw-r--r--source/nsswitch/winbindd.h4
-rw-r--r--source/nsswitch/winbindd_dual.c16
2 files changed, 20 insertions, 0 deletions
diff --git a/source/nsswitch/winbindd.h b/source/nsswitch/winbindd.h
index e81102571c9..6a220438a9b 100644
--- a/source/nsswitch/winbindd.h
+++ b/source/nsswitch/winbindd.h
@@ -29,6 +29,10 @@
#include "winbindd_nss.h"
+#ifdef HAVE_LIBNSCD
+#include "libnscd.h"
+#endif
+
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_WINBIND
diff --git a/source/nsswitch/winbindd_dual.c b/source/nsswitch/winbindd_dual.c
index 7864254c465..b77f4997992 100644
--- a/source/nsswitch/winbindd_dual.c
+++ b/source/nsswitch/winbindd_dual.c
@@ -559,6 +559,7 @@ static void child_msg_offline(int msg_type, struct process_id src, void *buf, si
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 @@ static void child_msg_online(int msg_type, struct process_id src, void *buf, siz
/* 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. */