diff options
-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); } } |