diff options
author | Günther Deschner <gd@samba.org> | 2006-03-13 15:13:35 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:15:24 -0500 |
commit | a32a423a0e9e0d4dd21282fd528bcd3247fddbd1 (patch) | |
tree | 74e75e7e89ff1117a0c3169ff5979d2f49324d4a /source/nsswitch | |
parent | 9883957b74ddefb5293e4aef0cc2f53ee4d417ac (diff) | |
download | samba-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.h | 4 | ||||
-rw-r--r-- | source/nsswitch/winbindd_dual.c | 16 |
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. */ |