r21998: Fix tdb keynames in netsamlogon_clear_cached_user().
authorGünther Deschner <gd@samba.org>
Wed, 28 Mar 2007 10:00:42 +0000 (10:00 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:18:58 +0000 (12:18 -0500)
No point in deleting U/DOMAIN/RID and UG/DOMAIN/RID keys if we only store U/SID
and UG/SID keys :-)

Next we need to verify the need of calling netsamlogon_clear_cached_user() at all.

Guenther
(This used to be commit 78d13f14672b65c2d4798ce94322e945334eea62)

source3/libsmb/samlogon_cache.c

index 270ad27deb8ff72f5e74a14342211b3462d0897d..e82ee8dbb8c74b689afa3f8dbdb8d209a6892c8e 100644 (file)
@@ -59,9 +59,10 @@ BOOL netsamlogon_cache_shutdown(void)
 ***********************************************************************/
 void netsamlogon_clear_cached_user(TDB_CONTEXT *tdb, NET_USER_INFO_3 *user)
 {
-       fstring domain;
        TDB_DATA key;
        BOOL got_tdb = False;
+       DOM_SID sid;
+       fstring key_str, sid_string;
 
        /* We may need to call this function from smbd which will not have
            winbindd_cache.tdb open.  Open the tdb if a NULL is passed. */
@@ -77,29 +78,24 @@ void netsamlogon_clear_cached_user(TDB_CONTEXT *tdb, NET_USER_INFO_3 *user)
                got_tdb = True;
        }
 
-       unistr2_to_ascii(domain, &user->uni_logon_dom, sizeof(domain) - 1);
+       sid_copy(&sid, &user->dom_sid.sid);
+       sid_append_rid(&sid, user->user_rid);
 
-       /* Clear U/DOMAIN/RID cache entry */
+       /* Clear U/SID cache entry */
 
-       asprintf(&key.dptr, "U/%s/%d", domain, user->user_rid);
-       key.dsize = strlen(key.dptr) - 1; /* keys are not NULL terminated */
+       fstr_sprintf(key_str, "U/%s", sid_to_string(sid_string, &sid));
 
-       DEBUG(10, ("netsamlogon_clear_cached_user: clearing %s\n", key.dptr));
-
-       tdb_delete(tdb, key);
+       DEBUG(10, ("netsamlogon_clear_cached_user: clearing %s\n", key_str));
 
-       SAFE_FREE(key.dptr);
+       tdb_delete(tdb, string_tdb_data(key_str));
 
-       /* Clear UG/DOMAIN/RID cache entry */
+       /* Clear UG/SID cache entry */
 
-       asprintf(&key.dptr, "UG/%s/%d", domain, user->user_rid);
-       key.dsize = strlen(key.dptr) - 1; /* keys are not NULL terminated */
+       fstr_sprintf(key_str, "UG/%s", sid_to_string(sid_string, &sid));
 
        DEBUG(10, ("netsamlogon_clear_cached_user: clearing %s\n", key.dptr));
 
-       tdb_delete(tdb, key);
-
-       SAFE_FREE(key.dptr);
+       tdb_delete(tdb, string_tdb_data(key_str));
 
        if (got_tdb)
                tdb_close(tdb);