[SCM] Samba Shared Repository - branch v4-5-test updated
Karolin Seeger
kseeger at samba.org
Mon Jan 2 13:35:13 UTC 2017
The branch, v4-5-test has been updated
via adbab18 winbindd: Use idmap cache in xids2sids
via 40a5e17 idmap: Prime gencache after xids2sids calls
via 71a9bf9 idmap: Pass up the xid2sids unix-ids from the idmap child
from fbd6779 ctdb-tools: Don't trust non-hosting nodes in "ctdb ip all"
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-5-test
- Log -----------------------------------------------------------------
commit adbab18c6cf7516a6cbc3724dbe0c93d6eba50bf
Author: Volker Lendecke <vl at samba.org>
Date: Tue Dec 27 10:19:17 2016 +0000
winbindd: Use idmap cache in xids2sids
Typically smbd should have looked into the idmap cache itself before
contacting winbind. But winbind has internal users of this API (getpwuid
and getgrgid for example), and those need to use the cache too.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12484
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Uri Simchoni <uri at samba.org>
Autobuild-User(master): Uri Simchoni <uri at samba.org>
Autobuild-Date(master): Wed Dec 28 00:06:41 CET 2016 on sn-devel-144
(cherry picked from commit 91d027554e414f371b3237110d1c92033d929992)
Autobuild-User(v4-5-test): Karolin Seeger <kseeger at samba.org>
Autobuild-Date(v4-5-test): Mon Jan 2 14:34:42 CET 2017 on sn-devel-144
commit 40a5e177aead025cb9323b3d3f69fc60dff35048
Author: Volker Lendecke <vl at samba.org>
Date: Tue Dec 20 16:22:48 2016 +0100
idmap: Prime gencache after xids2sids calls
This fixes a performance regression for "hide unreadable". With an empty
gencache, we only do xid2sid calls when reading a large number of acls. We
lost caching the xid2sid calls while implmenting the multiple-id calls,
probably because at that time the bug with ID_TYPE_BOTH backends was still
pending. This patch restores the xid2sid caching hopefully correctly.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12484
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Uri Simchoni <uri at samba.org>
(cherry picked from commit f7f49a2354c99d95a302f070fe3aa97a949063c8)
commit 71a9bf9d8c012241a1cd328632974c9852f97460
Author: Volker Lendecke <vl at samba.org>
Date: Wed Dec 21 11:29:08 2016 +0100
idmap: Pass up the xid2sids unix-ids from the idmap child
When asking for gid2sid with an idmap backend that does ID_TYPE_BOTH
and the sid in question is actually a user, the parent winbind needs
to know about it. The next commit will prime the gencache also after
xid2sid calls, and if we filled it with a ID_TYPE_GID entry, a later
sid2uid call would fail.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12484
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Uri Simchoni <uri at samba.org>
(cherry picked from commit 9079dc4f4501c4e868f46de41b82927b69dc78d5)
-----------------------------------------------------------------------
Summary of changes:
librpc/idl/winbind.idl | 2 +-
source3/winbindd/wb_xids2sids.c | 41 +++++++++++++++++++++++++++++++++++-
source3/winbindd/winbindd_dual_srv.c | 1 +
3 files changed, 42 insertions(+), 2 deletions(-)
Changeset truncated at 500 lines:
diff --git a/librpc/idl/winbind.idl b/librpc/idl/winbind.idl
index 60c875b..ec472c5 100644
--- a/librpc/idl/winbind.idl
+++ b/librpc/idl/winbind.idl
@@ -59,7 +59,7 @@ interface winbind
NTSTATUS wbint_UnixIDs2Sids(
[in,string,charset(UTF8)] char *domain_name,
[in] uint32 num_ids,
- [in] unixid xids[num_ids],
+ [in,out] unixid xids[num_ids],
[out] dom_sid sids[num_ids]
);
diff --git a/source3/winbindd/wb_xids2sids.c b/source3/winbindd/wb_xids2sids.c
index 7fc8a72..7ac1998 100644
--- a/source3/winbindd/wb_xids2sids.c
+++ b/source3/winbindd/wb_xids2sids.c
@@ -262,7 +262,20 @@ static void wb_xids2sids_dom_done(struct tevent_req *subreq)
continue;
}
- sid_copy(&state->all_sids[i], &state->dom_sids[dom_sid_idx++]);
+ sid_copy(&state->all_sids[i], &state->dom_sids[dom_sid_idx]);
+
+ /*
+ * Prime the cache after an xid2sid call. It's
+ * important that we use state->dom_xids for the xid
+ * value, not state->all_xids: state->all_xids carries
+ * what we asked for, e.g. a
+ * ID_TYPE_UID. state->dom_xids holds something the
+ * idmap child possibly changed to ID_TYPE_BOTH.
+ */
+ idmap_cache_set_sid2unixid(
+ &state->all_sids[i], &state->dom_xids[dom_sid_idx]);
+
+ dom_sid_idx += 1;
}
tevent_req_done(req);
@@ -340,6 +353,32 @@ struct tevent_req *wb_xids2sids_send(TALLOC_CTX *mem_ctx,
return tevent_req_post(req, ev);
}
+ if (winbindd_use_idmap_cache()) {
+ uint32_t i;
+
+ for (i=0; i<num_xids; i++) {
+ struct dom_sid sid;
+ bool ok, expired;
+
+ switch (xids[i].type) {
+ case ID_TYPE_UID:
+ ok = idmap_cache_find_uid2sid(
+ xids[i].id, &sid, &expired);
+ break;
+ case ID_TYPE_GID:
+ ok = idmap_cache_find_gid2sid(
+ xids[i].id, &sid, &expired);
+ break;
+ default:
+ ok = false;
+ }
+
+ if (ok && !expired) {
+ sid_copy(&state->sids[i], &sid);
+ }
+ }
+ }
+
wb_xids2sids_init_dom_maps();
num_domains = talloc_array_length(dom_maps);
diff --git a/source3/winbindd/winbindd_dual_srv.c b/source3/winbindd/winbindd_dual_srv.c
index 0484e19..b386d75 100644
--- a/source3/winbindd/winbindd_dual_srv.c
+++ b/source3/winbindd/winbindd_dual_srv.c
@@ -233,6 +233,7 @@ NTSTATUS _wbint_UnixIDs2Sids(struct pipes_struct *p,
}
for (i=0; i<r->in.num_ids; i++) {
+ r->out.xids[i] = maps[i]->xid;
sid_copy(&r->out.sids[i], maps[i]->sid);
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list