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:
parent
a0ab8cb537
commit
4b324f7f08
@ -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)
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user