The Samba-Bugzilla – Attachment 3984 Details for
Bug 6176
Windbind -n does not disable idmap cache
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
look (text/plain), 7.94 KB, created by
Volker Lendecke
on 2009-03-09 16:10:13 UTC
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Volker Lendecke
Created:
2009-03-09 16:10:13 UTC
Size:
7.94 KB
patch
obsolete
>diff --git a/source/winbindd/idmap_util.c b/source/winbindd/idmap_util.c >index 9abf425..ad4a7dd 100644 >--- a/source/winbindd/idmap_util.c >+++ b/source/winbindd/idmap_util.c >@@ -18,6 +18,8 @@ > along with this program. If not, see <http://www.gnu.org/licenses/>.*/ > > #include "includes.h" >+#include "winbindd.h" >+#include "winbindd_proto.h" > > #undef DBGC_CLASS > #define DBGC_CLASS DBGC_IDMAP >@@ -36,7 +38,8 @@ NTSTATUS idmap_uid_to_sid(const char *domname, DOM_SID *sid, uid_t uid) > DEBUG(10,("idmap_uid_to_sid: uid = [%lu], domain = '%s'\n", > (unsigned long)uid, domname?domname:"NULL")); > >- if (idmap_cache_find_uid2sid(uid, sid, &expired)) { >+ if (winbindd_use_idmap_cache() >+ && idmap_cache_find_uid2sid(uid, sid, &expired)) { > DEBUG(10, ("idmap_cache_find_uid2sid found %d%s\n", uid, > expired ? " (expired)": "")); > if (expired && idmap_is_online()) { >@@ -63,14 +66,18 @@ backend: > } > > if (map.status != ID_MAPPED) { >- struct dom_sid null_sid; >- ZERO_STRUCT(null_sid); >- idmap_cache_set_sid2uid(&null_sid, uid); >+ if (winbindd_use_idmap_cache()) { >+ struct dom_sid null_sid; >+ ZERO_STRUCT(null_sid); >+ idmap_cache_set_sid2uid(&null_sid, uid); >+ } > DEBUG(10, ("uid [%lu] not mapped\n", (unsigned long)uid)); > return NT_STATUS_NONE_MAPPED; > } > >- idmap_cache_set_sid2uid(sid, uid); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2uid(sid, uid); >+ } > > return NT_STATUS_OK; > } >@@ -89,7 +96,8 @@ NTSTATUS idmap_gid_to_sid(const char *domname, DOM_SID *sid, gid_t gid) > DEBUG(10,("idmap_gid_to_si: gid = [%lu], domain = '%s'\n", > (unsigned long)gid, domname?domname:"NULL")); > >- if (idmap_cache_find_gid2sid(gid, sid, &expired)) { >+ if (winbindd_use_idmap_cache() >+ && idmap_cache_find_gid2sid(gid, sid, &expired)) { > DEBUG(10, ("idmap_cache_find_gid2sid found %d%s\n", gid, > expired ? " (expired)": "")); > if (expired && idmap_is_online()) { >@@ -116,14 +124,18 @@ backend: > } > > if (map.status != ID_MAPPED) { >- struct dom_sid null_sid; >- ZERO_STRUCT(null_sid); >- idmap_cache_set_sid2uid(&null_sid, gid); >+ if (winbindd_use_idmap_cache()) { >+ struct dom_sid null_sid; >+ ZERO_STRUCT(null_sid); >+ idmap_cache_set_sid2uid(&null_sid, gid); >+ } > DEBUG(10, ("gid [%lu] not mapped\n", (unsigned long)gid)); > return NT_STATUS_NONE_MAPPED; > } > >- idmap_cache_set_sid2gid(sid, gid); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2gid(sid, gid); >+ } > > return NT_STATUS_OK; > } >@@ -142,7 +154,8 @@ NTSTATUS idmap_sid_to_uid(const char *dom_name, DOM_SID *sid, uid_t *uid) > DEBUG(10,("idmap_sid_to_uid: sid = [%s], domain = '%s'\n", > sid_string_dbg(sid), dom_name)); > >- if (idmap_cache_find_sid2uid(sid, uid, &expired)) { >+ if (winbindd_use_idmap_cache() >+ && idmap_cache_find_sid2uid(sid, uid, &expired)) { > DEBUG(10, ("idmap_cache_find_sid2uid found %d%s\n", > (int)(*uid), expired ? " (expired)": "")); > if (expired && idmap_is_online()) { >@@ -171,7 +184,9 @@ backend: > map.status, > map.xid.type, > map.xid.id)); >- idmap_cache_set_sid2uid(sid, -1); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2uid(sid, -1); >+ } > return NT_STATUS_NONE_MAPPED; > } > goto done; >@@ -182,7 +197,9 @@ backend: > * We had the task to go to a specific domain which > * could not answer our request. Fail. > */ >- idmap_cache_set_sid2uid(sid, -1); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2uid(sid, -1); >+ } > return NT_STATUS_NONE_MAPPED; > } > >@@ -191,13 +208,17 @@ backend: > if (!NT_STATUS_IS_OK(ret)) { > DEBUG(10, ("idmap_new_mapping failed: %s\n", > nt_errstr(ret))); >- idmap_cache_set_sid2uid(sid, -1); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2uid(sid, -1); >+ } > return ret; > } > > done: > *uid = (uid_t)map.xid.id; >- idmap_cache_set_sid2uid(sid, *uid); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2uid(sid, *uid); >+ } > return NT_STATUS_OK; > } > >@@ -215,7 +236,8 @@ NTSTATUS idmap_sid_to_gid(const char *domname, DOM_SID *sid, gid_t *gid) > DEBUG(10,("idmap_sid_to_gid: sid = [%s], domain = '%s'\n", > sid_string_dbg(sid), domname)); > >- if (idmap_cache_find_sid2gid(sid, gid, &expired)) { >+ if (winbindd_use_idmap_cache() >+ && idmap_cache_find_sid2gid(sid, gid, &expired)) { > DEBUG(10, ("idmap_cache_find_sid2gid found %d%s\n", > (int)(*gid), expired ? " (expired)": "")); > if (expired && idmap_is_online()) { >@@ -243,7 +265,9 @@ backend: > map.status, > map.xid.type, > map.xid.id)); >- idmap_cache_set_sid2gid(sid, -1); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2gid(sid, -1); >+ } > return NT_STATUS_NONE_MAPPED; > } > goto done; >@@ -254,7 +278,9 @@ backend: > * We had the task to go to a specific domain which > * could not answer our request. Fail. > */ >- idmap_cache_set_sid2uid(sid, -1); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2uid(sid, -1); >+ } > return NT_STATUS_NONE_MAPPED; > } > >@@ -263,12 +289,16 @@ backend: > if (!NT_STATUS_IS_OK(ret)) { > DEBUG(10, ("idmap_new_mapping failed: %s\n", > nt_errstr(ret))); >- idmap_cache_set_sid2gid(sid, -1); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2gid(sid, -1); >+ } > return ret; > } > > done: > *gid = map.xid.id; >- idmap_cache_set_sid2gid(sid, *gid); >+ if (winbindd_use_idmap_cache()) { >+ idmap_cache_set_sid2gid(sid, *gid); >+ } > return NT_STATUS_OK; > } >diff --git a/source/winbindd/winbindd.c b/source/winbindd/winbindd.c >index a914c5c..f333e37 100644 >--- a/source/winbindd/winbindd.c >+++ b/source/winbindd/winbindd.c >@@ -28,7 +28,7 @@ > #undef DBGC_CLASS > #define DBGC_CLASS DBGC_WINBIND > >-bool opt_nocache = False; >+static bool opt_nocache = False; > static bool interactive = False; > > extern bool override_logfile; >@@ -996,6 +996,16 @@ static void process_loop(void) > } > } > >+bool winbindd_use_idmap_cache(void) >+{ >+ return !opt_nocache; >+} >+ >+bool winbindd_use_cache(void) >+{ >+ return !opt_nocache; >+} >+ > /* Main function */ > > int main(int argc, char **argv, char **envp) >diff --git a/source/winbindd/winbindd_cache.c b/source/winbindd/winbindd_cache.c >index 7688ff4..5d2b1f5 100644 >--- a/source/winbindd/winbindd_cache.c >+++ b/source/winbindd/winbindd_cache.c >@@ -33,7 +33,6 @@ > #define WINBINDD_CACHE_VERSION_KEYSTR "WINBINDD_CACHE_VERSION" > > extern struct winbindd_methods reconnect_methods; >-extern bool opt_nocache; > #ifdef HAVE_ADS > extern struct winbindd_methods ads_methods; > #endif >@@ -631,7 +630,7 @@ static struct cache_entry *wcache_fetch(struct winbind_cache *cache, > char *kstr; > struct cache_entry *centry; > >- if (opt_nocache) { >+ if (!winbindd_use_cache()) { > return NULL; > } > >@@ -833,7 +832,7 @@ static void centry_end(struct cache_entry *centry, const char *format, ...) > char *kstr; > TDB_DATA key, data; > >- if (opt_nocache) { >+ if (!winbindd_use_cache()) { > return; > } > >@@ -2860,8 +2859,9 @@ void wcache_flush_cache(void) > tdb_close(wcache->tdb); > wcache->tdb = NULL; > } >- if (opt_nocache) >+ if (!winbindd_use_cache()) { > return; >+ } > > /* when working offline we must not clear the cache on restart */ > wcache->tdb = tdb_open_log(lock_path("winbindd_cache.tdb"), >diff --git a/source/winbindd/winbindd_group.c b/source/winbindd/winbindd_group.c >index 9d9b264..a4b118c 100644 >--- a/source/winbindd/winbindd_group.c >+++ b/source/winbindd/winbindd_group.c >@@ -25,8 +25,6 @@ > #include "includes.h" > #include "winbindd.h" > >-extern bool opt_nocache; >- > #undef DBGC_CLASS > #define DBGC_CLASS DBGC_WINBIND > >diff --git a/source/winbindd/winbindd_proto.h b/source/winbindd/winbindd_proto.h >index 6d59648..3909d16 100644 >--- a/source/winbindd/winbindd_proto.h >+++ b/source/winbindd/winbindd_proto.h >@@ -67,6 +67,8 @@ void request_error(struct winbindd_cli_state *state); > void request_ok(struct winbindd_cli_state *state); > void winbind_check_sighup(const char *lfile); > void winbind_check_sigterm(bool in_parent); >+bool winbindd_use_idmap_cache(void); >+bool winbindd_use_cache(void); > int main(int argc, char **argv, char **envp); > > /* The following definitions come from winbindd/winbindd_ads.c */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 6176
: 3984