[SCM] Samba Shared Repository - branch v3-devel updated - release-3-2-0pre2-3842-g7c82089

Jeremy Allison jra at samba.org
Thu Aug 28 00:30:02 GMT 2008


The branch, v3-devel has been updated
       via  7c820899ed1364fdaeb7b49e8ddd839e67397ec0 (commit)
       via  bb13312d9d53b1e048b3a0bfeeca088f9db84cd3 (commit)
      from  4c3a9558906f213948c3bdc081be73f8fed148cb (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-devel


- Log -----------------------------------------------------------------
commit 7c820899ed1364fdaeb7b49e8ddd839e67397ec0
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 27 17:29:10 2008 -0700

    Fix the wcache_invalidate_samlogon calls.
    Jeremy.

commit bb13312d9d53b1e048b3a0bfeeca088f9db84cd3
Author: Ephi Dror <Ephi.Dror at datadomain.com>
Date:   Wed Aug 27 17:28:34 2008 -0700

    Correct the netsamlogon_clear_cached_user function.

-----------------------------------------------------------------------

Summary of changes:
 source/include/proto.h           |    2 +-
 source/libsmb/samlogon_cache.c   |   54 ++++++++++++-------------------------
 source/winbindd/winbindd_cache.c |   23 +++++++++++++++-
 source/winbindd/winbindd_pam.c   |    4 +-
 4 files changed, 43 insertions(+), 40 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/proto.h b/source/include/proto.h
index 2145a89..d5e942a 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -5002,7 +5002,7 @@ void pwd_get_cleartext(struct pwd_info *pwd, fstring clr);
 
 bool netsamlogon_cache_init(void);
 bool netsamlogon_cache_shutdown(void);
-void netsamlogon_clear_cached_user(TDB_CONTEXT *tdb, struct netr_SamInfo3 *info3);
+void netsamlogon_clear_cached_user(struct netr_SamInfo3 *info3);
 bool netsamlogon_cache_store(const char *username, struct netr_SamInfo3 *info3);
 struct netr_SamInfo3 *netsamlogon_cache_get(TALLOC_CTX *mem_ctx, const DOM_SID *user_sid);
 bool netsamlogon_cache_have(const DOM_SID *user_sid);
diff --git a/source/libsmb/samlogon_cache.c b/source/libsmb/samlogon_cache.c
index 2d2588f..4abe5bb 100644
--- a/source/libsmb/samlogon_cache.c
+++ b/source/libsmb/samlogon_cache.c
@@ -59,48 +59,30 @@ bool netsamlogon_cache_shutdown(void)
  Clear cache getpwnam and getgroups entries from the winbindd cache
 ***********************************************************************/
 
-void netsamlogon_clear_cached_user(TDB_CONTEXT *tdb, struct netr_SamInfo3 *info3)
+void netsamlogon_clear_cached_user(struct netr_SamInfo3 *info3)
 {
-	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. */
-
-	if (!tdb) {
-		tdb = tdb_open_log(lock_path("winbindd_cache.tdb"),
-				   WINBINDD_CACHE_TDB_DEFAULT_HASH_SIZE,
-				   TDB_DEFAULT, O_RDWR, 0600);
-		if (!tdb) {
-			DEBUG(5, ("netsamlogon_clear_cached_user: failed to open cache\n"));
-			return;
-		}
-		got_tdb = true;
-	}
-
-	sid_copy(&sid, info3->base.domain_sid);
-	sid_append_rid(&sid, info3->base.rid);
-
-	/* Clear U/SID cache entry */
-
-	fstr_sprintf(key_str, "U/%s", sid_to_fstring(sid_string, &sid));
-
-	DEBUG(10, ("netsamlogon_clear_cached_user: clearing %s\n", key_str));
-
-	tdb_delete(tdb, string_tdb_data(key_str));
+	DOM_SID	user_sid;
+	fstring keystr, tmp;
 
-	/* Clear UG/SID cache entry */
+	if (!info3) {
+		return;
+	}
 
-	fstr_sprintf(key_str, "UG/%s", sid_to_fstring(sid_string, &sid));
+	if (!netsamlogon_cache_init()) {
+		DEBUG(0,("netsamlogon_clear_cached_user: cannot open "
+			"%s for write!\n",
+			NETSAMLOGON_TDB));
+		return;
+	}
+	sid_copy(&user_sid, info3->base.domain_sid);
+	sid_append_rid(&user_sid, info3->base.rid);
 
-	DEBUG(10, ("netsamlogon_clear_cached_user: clearing %s\n", key_str));
+	/* Prepare key as DOMAIN-SID/USER-RID string */
+	slprintf(keystr, sizeof(keystr), "%s", sid_to_fstring(tmp, &user_sid));
 
-	tdb_delete(tdb, string_tdb_data(key_str));
+	DEBUG(10,("netsamlogon_clear_cached_user: SID [%s]\n", keystr));
 
-	if (got_tdb) {
-		tdb_close(tdb);
-	}
+	tdb_delete_bystring(netsamlogon_tdb, keystr);
 }
 
 /***********************************************************************
diff --git a/source/winbindd/winbindd_cache.c b/source/winbindd/winbindd_cache.c
index c9d857c..2fbb01b 100644
--- a/source/winbindd/winbindd_cache.c
+++ b/source/winbindd/winbindd_cache.c
@@ -2259,6 +2259,8 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf,
 void wcache_invalidate_samlogon(struct winbindd_domain *domain, 
 				struct netr_SamInfo3 *info3)
 {
+        DOM_SID sid;
+        fstring key_str, sid_string;
 	struct winbind_cache *cache;
 
 	/* dont clear cached U/SID and UG/SID entries when we want to logon
@@ -2272,7 +2274,26 @@ void wcache_invalidate_samlogon(struct winbindd_domain *domain,
 		return;
 
 	cache = get_cache(domain);
-	netsamlogon_clear_cached_user(cache->tdb, info3);
+
+        if (!cache->tdb) {
+                return;
+        }
+
+	sid_copy(&sid, info3->base.domain_sid);
+	sid_append_rid(&sid, info3->base.rid);
+
+	/* Clear U/SID cache entry */
+	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));
+	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(info3);
 }
 
 bool wcache_invalidate_cache(void)
diff --git a/source/winbindd/winbindd_pam.c b/source/winbindd/winbindd_pam.c
index a7911f6..d4a2e3e 100644
--- a/source/winbindd/winbindd_pam.c
+++ b/source/winbindd/winbindd_pam.c
@@ -1595,8 +1595,8 @@ process_result:
 			goto done;
 		}
 
-		netsamlogon_cache_store(name_user, info3);
 		wcache_invalidate_samlogon(find_domain_from_name(name_domain), info3);
+		netsamlogon_cache_store(name_user, info3);
 
 		/* save name_to_sid info as early as possible (only if
 		   this is our primary domain so we don't invalidate
@@ -1921,8 +1921,8 @@ enum winbindd_result winbindd_dual_pam_auth_crap(struct winbindd_domain *domain,
 
 	if (NT_STATUS_IS_OK(result)) {
 
-		netsamlogon_cache_store(name_user, info3);
 		wcache_invalidate_samlogon(find_domain_from_name(name_domain), info3);
+		netsamlogon_cache_store(name_user, info3);
 
 		/* Check if the user is in the right group */
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list