1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-03 13:47:25 +03:00

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
This commit is contained in:
Alexander Werth 2014-04-25 13:53:48 +02:00 committed by Michael Adam
parent a0ab8cb537
commit 4b324f7f08
2 changed files with 33 additions and 17 deletions

View File

@ -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)

View File

@ -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: