summaryrefslogtreecommitdiffstats
path: root/source3/passdb
diff options
context:
space:
mode:
authorAlexander Werth <alexander.werth@de.ibm.com>2014-04-25 13:53:48 +0200
committerMichael Adam <obnox@samba.org>2014-05-03 04:14:05 +0200
commit4b324f7f08829ca3df0af291301d5272ae5cede1 (patch)
treeb7f6ec8e1e5a83871d076ea33f23d99cdf29496d /source3/passdb
parenta0ab8cb53712cf77cae1d46f49d8eb56e6d5703b (diff)
downloadsamba-4b324f7f08829ca3df0af291301d5272ae5cede1.tar.gz
samba-4b324f7f08829ca3df0af291301d5272ae5cede1.tar.xz
samba-4b324f7f08829ca3df0af291301d5272ae5cede1.zip
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 <alexander.werth@de.ibm.com> Reviewed-by: Alexander Bokovoy <ab@samba.org> Reviewed-by: Michael Adam <obnox@samba.org> Autobuild-User(master): Michael Adam <obnox@samba.org> Autobuild-Date(master): Sat May 3 04:14:05 CEST 2014 on sn-devel-104
Diffstat (limited to 'source3/passdb')
-rw-r--r--source3/passdb/pdb_interface.c36
-rw-r--r--source3/passdb/pdb_ldap.c14
2 files changed, 33 insertions, 17 deletions
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: