diff options
-rw-r--r-- | source3/winbindd/winbindd_cache.c | 11 | ||||
-rw-r--r-- | source3/winbindd/winbindd_pam.c | 14 | ||||
-rw-r--r-- | source3/winbindd/winbindd_proto.h | 2 |
3 files changed, 15 insertions, 12 deletions
diff --git a/source3/winbindd/winbindd_cache.c b/source3/winbindd/winbindd_cache.c index 7663063aeb..37291a70ab 100644 --- a/source3/winbindd/winbindd_cache.c +++ b/source3/winbindd/winbindd_cache.c @@ -2999,9 +2999,8 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, /* Invalidate the getpwnam and getgroups entries for a winbindd domain */ void wcache_invalidate_samlogon(struct winbindd_domain *domain, - struct netr_SamInfo3 *info3) + const struct dom_sid *sid) { - struct dom_sid sid; fstring key_str, sid_string; struct winbind_cache *cache; @@ -3021,20 +3020,18 @@ void wcache_invalidate_samlogon(struct winbindd_domain *domain, return; } - sid_compose(&sid, info3->base.domain_sid, info3->base.rid); - /* Clear U/SID cache entry */ - fstr_sprintf(key_str, "U/%s", sid_to_fstring(sid_string, &sid)); + fstr_sprintf(key_str, "U/%s", sid_to_fstring(sid_string, sid)); DEBUG(10, ("wcache_invalidate_samlogon: clearing %s\n", key_str)); tdb_delete(cache->tdb, string_tdb_data(key_str)); /* Clear UG/SID cache entry */ - fstr_sprintf(key_str, "UG/%s", sid_to_fstring(sid_string, &sid)); + fstr_sprintf(key_str, "UG/%s", sid_to_fstring(sid_string, sid)); DEBUG(10, ("wcache_invalidate_samlogon: clearing %s\n", key_str)); tdb_delete(cache->tdb, string_tdb_data(key_str)); /* Samba/winbindd never needs this. */ - netsamlogon_clear_cached_user(&sid); + netsamlogon_clear_cached_user(sid); } bool wcache_invalidate_cache(void) diff --git a/source3/winbindd/winbindd_pam.c b/source3/winbindd/winbindd_pam.c index 7ec0bff9a7..5347c1cd45 100644 --- a/source3/winbindd/winbindd_pam.c +++ b/source3/winbindd/winbindd_pam.c @@ -1527,7 +1527,11 @@ process_result: goto done; } - wcache_invalidate_samlogon(find_domain_from_name(name_domain), info3); + sid_compose(&user_sid, info3->base.domain_sid, + info3->base.rid); + + wcache_invalidate_samlogon(find_domain_from_name(name_domain), + &user_sid); netsamlogon_cache_store(name_user, info3); /* save name_to_sid info as early as possible (only if @@ -1535,8 +1539,6 @@ process_result: the cache entry by storing the seq_num for the wrong domain). */ if ( domain->primary ) { - sid_compose(&user_sid, info3->base.domain_sid, - info3->base.rid); cache_name2sid(domain, name_domain, name_user, SID_NAME_USER, &user_sid); } @@ -1744,8 +1746,12 @@ enum winbindd_result winbindd_dual_pam_auth_crap(struct winbindd_domain *domain, process_result: if (NT_STATUS_IS_OK(result)) { + struct dom_sid user_sid; - wcache_invalidate_samlogon(find_domain_from_name(name_domain), info3); + sid_compose(&user_sid, info3->base.domain_sid, + info3->base.rid); + wcache_invalidate_samlogon(find_domain_from_name(name_domain), + &user_sid); netsamlogon_cache_store(name_user, info3); /* Check if the user is in the right group */ diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h index 9ddfe87480..dc563c9dac 100644 --- a/source3/winbindd/winbindd_proto.h +++ b/source3/winbindd/winbindd_proto.h @@ -68,7 +68,7 @@ NTSTATUS wcache_save_creds(struct winbindd_domain *domain, const struct dom_sid *sid, const uint8 nt_pass[NT_HASH_LEN]); void wcache_invalidate_samlogon(struct winbindd_domain *domain, - struct netr_SamInfo3 *info3); + const struct dom_sid *user_sid); bool wcache_invalidate_cache(void); bool wcache_invalidate_cache_noinit(void); bool init_wcache(void); |