The branch, v3-2-test has been updated
       via  0a0795fd0310cc44dac0df312325df6d08e38cdb (commit)
       via  85dd9c64ca2ffa31d02ee10a3745fd596e80786e (commit)
      from  9f1bb27bf566069dab48eea125c22a5e20849774 (commit)

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


- Log -----------------------------------------------------------------
commit 0a0795fd0310cc44dac0df312325df6d08e38cdb
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Wed Aug 27 17:26:59 2008 -0700

    Fix the wcache_invalidate_samlogon calls.
    Jeremy.

commit 85dd9c64ca2ffa31d02ee10a3745fd596e80786e
Author: Ephi Dror <[EMAIL PROTECTED]>
Date:   Wed Aug 27 17:26:36 2008 -0700

    Correct the netsamlogon_clear_cached_user function.

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

Summary of changes:
 source/libsmb/samlogon_cache.c   |   54 ++++++++++++-------------------------
 source/winbindd/winbindd_cache.c |   23 +++++++++++++++-
 source/winbindd/winbindd_pam.c   |    4 +-
 3 files changed, 42 insertions(+), 39 deletions(-)


Changeset truncated at 500 lines:

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 3b2b9aa..d3e47d0 100644
--- a/source/winbindd/winbindd_cache.c
+++ b/source/winbindd/winbindd_cache.c
@@ -2265,6 +2265,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
@@ -2278,7 +2280,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 ce6a256..90849b5 100644
--- a/source/winbindd/winbindd_pam.c
+++ b/source/winbindd/winbindd_pam.c
@@ -1599,8 +1599,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
@@ -1941,8 +1941,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

Reply via email to