From 4b324f7f08829ca3df0af291301d5272ae5cede1 Mon Sep 17 00:00:00 2001 From: Alexander Werth Date: Fri, 25 Apr 2014 13:53:48 +0200 Subject: s3: Always cache idmapping results of pdb backend. And don't cache in the pdb_ldap module on the id_to_sid calls. Signed-off-by: Alexander Werth Reviewed-by: Alexander Bokovoy Reviewed-by: Michael Adam Autobuild-User(master): Michael Adam Autobuild-Date(master): Sat May 3 04:14:05 CEST 2014 on sn-devel-104 --- source3/passdb/pdb_interface.c | 36 +++++++++++++++++++++++++++++++++--- source3/passdb/pdb_ldap.c | 14 -------------- 2 files changed, 33 insertions(+), 17 deletions(-) (limited to 'source3/passdb') diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c index 7a0a824ba21..a984fcb0b34 100644 --- a/source3/passdb/pdb_interface.c +++ b/source3/passdb/pdb_interface.c @@ -35,6 +35,7 @@ #include "../lib/util/util_pw.h" #include "passdb/pdb_secrets.h" #include "lib/util_sid_passdb.h" +#include "idmap_cache.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_PASSDB @@ -1206,25 +1207,54 @@ bool pdb_get_seq_num(time_t *seq_num) bool pdb_uid_to_sid(uid_t uid, struct dom_sid *sid) { struct pdb_methods *pdb = pdb_get_methods(); - return pdb->uid_to_sid(pdb, uid, sid); + bool ret; + + ret = pdb->uid_to_sid(pdb, uid, sid); + + if (ret == true) { + struct unixid id; + id.id = uid; + id.type = ID_TYPE_UID; + idmap_cache_set_sid2unixid(sid, &id); + } + + return ret; } bool pdb_gid_to_sid(gid_t gid, struct dom_sid *sid) { struct pdb_methods *pdb = pdb_get_methods(); - return pdb->gid_to_sid(pdb, gid, sid); + bool ret; + + ret = pdb->gid_to_sid(pdb, gid, sid); + + if (ret == true) { + struct unixid id; + id.id = gid; + id.type = ID_TYPE_GID; + idmap_cache_set_sid2unixid(sid, &id); + } + + return ret; } bool pdb_sid_to_id(const struct dom_sid *sid, struct unixid *id) { struct pdb_methods *pdb = pdb_get_methods(); + bool ret; /* only ask the backend if it is responsible */ if (!sid_check_object_is_for_passdb(sid)) { return false; } - return pdb->sid_to_id(pdb, sid, id); + ret = pdb->sid_to_id(pdb, sid, id); + + if (ret == true) { + idmap_cache_set_sid2unixid(sid, id); + } + + return ret; } uint32_t pdb_capabilities(void) diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c index cea8627d7cc..7dccc037094 100644 --- a/source3/passdb/pdb_ldap.c +++ b/source3/passdb/pdb_ldap.c @@ -4970,7 +4970,6 @@ static bool ldapsam_sid_to_id(struct pdb_methods *methods, id->id = strtoul(gid_str, NULL, 10); id->type = ID_TYPE_GID; - idmap_cache_set_sid2unixid(sid, id); ret = True; goto done; } @@ -4987,7 +4986,6 @@ static bool ldapsam_sid_to_id(struct pdb_methods *methods, id->id = strtoul(value, NULL, 10); id->type = ID_TYPE_UID; - idmap_cache_set_sid2unixid(sid, id); ret = True; done: @@ -5013,7 +5011,6 @@ static bool ldapsam_uid_to_sid(struct pdb_methods *methods, uid_t uid, struct dom_sid user_sid; int rc; TALLOC_CTX *tmp_ctx = talloc_stackframe(); - struct unixid id; filter = talloc_asprintf(tmp_ctx, "(&(uidNumber=%u)" @@ -5058,11 +5055,6 @@ static bool ldapsam_uid_to_sid(struct pdb_methods *methods, uid_t uid, sid_copy(sid, &user_sid); - id.id = uid; - id.type = ID_TYPE_UID; - - idmap_cache_set_sid2unixid(sid, &id); - ret = true; done: @@ -5088,7 +5080,6 @@ static bool ldapsam_gid_to_sid(struct pdb_methods *methods, gid_t gid, struct dom_sid group_sid; int rc; TALLOC_CTX *tmp_ctx = talloc_stackframe(); - struct unixid id; filter = talloc_asprintf(tmp_ctx, "(&(gidNumber=%u)" @@ -5131,11 +5122,6 @@ static bool ldapsam_gid_to_sid(struct pdb_methods *methods, gid_t gid, sid_copy(sid, &group_sid); - id.id = gid; - id.type = ID_TYPE_GID; - - idmap_cache_set_sid2unixid(sid, &id); - ret = true; done: -- cgit