passdb: Cache output from pdb_[ug]id_to_sid
authorVolker Lendecke <vl@samba.org>
Mon, 5 Jan 2015 15:34:29 +0000 (16:34 +0100)
committerVolker Lendecke <vl@samba.org>
Wed, 7 Jan 2015 11:00:09 +0000 (12:00 +0100)
A customer complained that after upgrading to Samba 4.0 fileserver
its LDAP server was flooded with uid2sid and gid2sid request for id
0. With 4.0 we do a lot more user-space ACL checking which involves
uid2sid/gid2sid. This caches the corresponding results.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Volker Lendecke <vl@samba.org>
Autobuild-Date(master): Wed Jan  7 12:00:10 CET 2015 on sn-devel-104

source3/passdb/lookup_sid.c

index 494a8407c0a87e2941d08cc0ae16dfdc08efe3e1..c5b28d83fc6534d18fd60503fd7077eecdf19218 100644 (file)
@@ -1049,6 +1049,13 @@ static void legacy_uid_to_sid(struct dom_sid *psid, uid_t uid)
 
        uid_to_unix_users_sid(uid, psid);
 
+       {
+               struct unixid xid = {
+                       .id = uid, .type = ID_TYPE_UID
+               };
+               idmap_cache_set_sid2unixid(psid, &xid);
+       }
+
  done:
        DEBUG(10,("LEGACY: uid %u -> sid %s\n", (unsigned int)uid,
                  sid_string_dbg(psid)));
@@ -1083,6 +1090,13 @@ static void legacy_gid_to_sid(struct dom_sid *psid, gid_t gid)
 
        gid_to_unix_groups_sid(gid, psid);
 
+       {
+               struct unixid xid = {
+                       .id = gid, .type = ID_TYPE_GID
+               };
+               idmap_cache_set_sid2unixid(psid, &xid);
+       }
+
  done:
        DEBUG(10,("LEGACY: gid %u -> sid %s\n", (unsigned int)gid,
                  sid_string_dbg(psid)));