s3: wcache_invalidate_samlogon only needs the SID
authorVolker Lendecke <vl@samba.org>
Sat, 11 Dec 2010 13:27:54 +0000 (14:27 +0100)
committerVolker Lendecke <vlendec@samba.org>
Sun, 19 Dec 2010 22:25:06 +0000 (23:25 +0100)
source3/winbindd/winbindd_cache.c
source3/winbindd/winbindd_pam.c
source3/winbindd/winbindd_proto.h

index 7663063aeb4f58a119bb861fbb07ca603b4fcc6c..37291a70ab23502c6c9c975ddbbc3faffc30af76 100644 (file)
@@ -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)
index 7ec0bff9a77f8362937573c00023d96400f1addc..5347c1cd453df34cb7d3ffbb08bddfc847669b23 100644 (file)
@@ -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 */
index 9ddfe874803ccb60bce0c6c955e293e62be718ec..dc563c9dac728949da7d76351bdd7fe612a4e50d 100644 (file)
@@ -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);