diff options
author | Jeremy Allison <jra@samba.org> | 2006-09-07 03:44:05 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:51:15 -0500 |
commit | 6410f02fe5d2da18d8a3e5e135fb6875c463a6fb (patch) | |
tree | 7934e1d26a71e589272ce9358ea2cde895c110d7 | |
parent | 94eb7d93d83346034ccb5d3026afb63a88a890de (diff) | |
download | samba-6410f02fe5d2da18d8a3e5e135fb6875c463a6fb.tar.gz samba-6410f02fe5d2da18d8a3e5e135fb6875c463a6fb.tar.bz2 samba-6410f02fe5d2da18d8a3e5e135fb6875c463a6fb.zip |
r18199: Allow winbindd to delete a saf_ entry if it knows
it can't talk to it.
Jeremy.
(This used to be commit 7385a076f8fd351472d37d9363304948e88f9f99)
-rw-r--r-- | source3/libsmb/namequery.c | 24 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_cm.c | 4 |
2 files changed, 28 insertions, 0 deletions
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index 5cd09fd04f..aeeeb3372c 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -77,6 +77,30 @@ BOOL saf_store( const char *domain, const char *servername ) return ret; } +BOOL saf_delete( const char *domain, const char *servername ) +{ + char *key; + BOOL ret = False; + + if ( !domain || !servername ) { + DEBUG(2,("saf_delete: Refusing to store empty domain or servername!\n")); + return False; + } + + if ( !gencache_init() ) + return False; + + key = saf_key(domain); + ret = gencache_del(key); + + if (ret) { + DEBUG(10,("saf_delete: domain = [%s], server = [%s]\n", + domain, servername)); + } + SAFE_FREE( key ); + return ret; +} + /**************************************************************************** ****************************************************************************/ diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index 3072ca2a39..1aab918f69 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -167,8 +167,12 @@ void winbind_add_failed_connection_entry(const struct winbindd_domain *domain, NTSTATUS result) { add_failed_connection_entry(domain->name, server, result); + /* If this was the saf name for the last thing we talked to, + remove it. */ + saf_delete(domain->name, server); if (*domain->alt_name) { add_failed_connection_entry(domain->alt_name, server, result); + saf_delete(domain->alt_name, server); } } |