summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/winbindd/winbindd_cache.c11
-rw-r--r--source3/winbindd/winbindd_pam.c14
-rw-r--r--source3/winbindd/winbindd_proto.h2
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);