summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/libsmb/namequery.c24
-rw-r--r--source3/nsswitch/winbindd_cm.c4
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);
}
}