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

idmap_autorid: fix ID_REQUIRE_TYPE for more than one SID for an unknown domain

When we see a trusted domain SID for the first time,
idmap_autorid returns ID_REQUIRE_TYPE only for the first sid
and leaves the others with ID_TYPE_NOT_SPECIFIED.
It means the winbindd parent only retries the first sid.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15318

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Stefan Metzmacher 2023-02-17 16:51:42 +01:00
parent ad242a2064
commit a9583b5f96

View File

@ -697,9 +697,10 @@ static NTSTATUS idmap_autorid_sids_to_unixids(struct idmap_domain *dom,
{ {
struct idmap_tdb_common_context *commoncfg; struct idmap_tdb_common_context *commoncfg;
NTSTATUS ret; NTSTATUS ret;
int i; size_t i;
int num_tomap = 0; size_t num_tomap = 0;
int num_mapped = 0; size_t num_mapped = 0;
size_t num_required = 0;
/* initialize the status to avoid surprise */ /* initialize the status to avoid surprise */
for (i = 0; ids[i]; i++) { for (i = 0; ids[i]; i++) {
@ -713,6 +714,12 @@ static NTSTATUS idmap_autorid_sids_to_unixids(struct idmap_domain *dom,
for (i = 0; ids[i]; i++) { for (i = 0; ids[i]; i++) {
ret = idmap_autorid_sid_to_id(commoncfg, dom, ids[i]); ret = idmap_autorid_sid_to_id(commoncfg, dom, ids[i]);
if (NT_STATUS_EQUAL(ret, NT_STATUS_SOME_NOT_MAPPED) &&
ids[i]->status == ID_REQUIRE_TYPE)
{
num_required++;
continue;
}
if ((!NT_STATUS_IS_OK(ret)) && if ((!NT_STATUS_IS_OK(ret)) &&
(!NT_STATUS_EQUAL(ret, NT_STATUS_NONE_MAPPED))) { (!NT_STATUS_EQUAL(ret, NT_STATUS_NONE_MAPPED))) {
struct dom_sid_buf buf; struct dom_sid_buf buf;
@ -729,6 +736,8 @@ static NTSTATUS idmap_autorid_sids_to_unixids(struct idmap_domain *dom,
if (num_tomap == num_mapped) { if (num_tomap == num_mapped) {
return NT_STATUS_OK; return NT_STATUS_OK;
} else if (num_required > 0) {
return STATUS_SOME_UNMAPPED;
} else if (num_mapped == 0) { } else if (num_mapped == 0) {
return NT_STATUS_NONE_MAPPED; return NT_STATUS_NONE_MAPPED;
} }