DstSid = MIDL_user_allocate(DstSidSize);
if (DstSid == NULL)
- return FALSE;
+ return NULL;
RtlInitializeSid(DstSid,
RtlIdentifierAuthoritySid(SrcSid),
}
+static PSID
+CreateDomainSidFromAccountSid(PSID AccountSid)
+{
+ UCHAR RidCount;
+ PSID DomainSid;
+ ULONG i;
+ ULONG DstSidSize;
+ PULONG p, q;
+
+ RidCount = *RtlSubAuthorityCountSid(AccountSid);
+ if (RidCount > 0)
+ RidCount--;
+
+ DstSidSize = RtlLengthRequiredSid(RidCount);
+
+ DomainSid = MIDL_user_allocate(DstSidSize);
+ if (DomainSid == NULL)
+ return NULL;
+
+ RtlInitializeSid(DomainSid,
+ RtlIdentifierAuthoritySid(AccountSid),
+ RidCount);
+
+ for (i = 0; i < (ULONG)RidCount; i++)
+ {
+ p = RtlSubAuthoritySid(AccountSid, i);
+ q = RtlSubAuthoritySid(DomainSid, i);
+ *q = *p;
+ }
+
+ return DomainSid;
+}
+
+
static
NTSTATUS
LsapLookupIsolatedNames(DWORD Count,
PLSAPR_TRANSLATED_SID_EX2 SidsBuffer,
PULONG Mapped)
{
+ UNICODE_STRING EmptyDomainName = RTL_CONSTANT_STRING(L"");
PWELL_KNOWN_SID ptr, ptr2;
+ PSID DomainSid;
ULONG DomainIndex;
ULONG i;
NTSTATUS Status = STATUS_SUCCESS;
if (DomainNames[i].Length != 0)
continue;
+ TRACE("Mapping name: %wZ\n", &AccountNames[i]);
+
/* Look-up all well-known names */
ptr = LsapLookupWellKnownName((PUNICODE_STRING)&AccountNames[i]);
if (ptr != NULL)
SidsBuffer[i].DomainIndex = DomainIndex;
}
+ else
+ {
+ DomainSid = CreateDomainSidFromAccountSid(ptr->Sid);
+ if (DomainSid == NULL)
+ {
+ Status = STATUS_INSUFFICIENT_RESOURCES;
+ goto done;
+ }
+
+ Status = LsapAddDomainToDomainsList(DomainsBuffer,
+ &EmptyDomainName,
+ DomainSid,
+ &DomainIndex);
+
+ if (DomainSid != NULL)
+ {
+ MIDL_user_free(DomainSid);
+ DomainSid = NULL;
+ }
+
+ if (!NT_SUCCESS(Status))
+ goto done;
+
+ SidsBuffer[i].DomainIndex = DomainIndex;
+ }
}
(*Mapped)++;
}
done:
+
return Status;
}
}
-
NTSTATUS
LsapLookupNames(DWORD Count,
PRPC_UNICODE_STRING Names,
if (!NT_SUCCESS(Status) &&
Status != STATUS_NONE_MAPPED &&
Status != STATUS_SOME_NOT_MAPPED)
+ {
+ TRACE("LsapLookupIsolatedNames failed! (Status %lx)\n", Status);
goto done;
+ }
if (Mapped == Count)
goto done;
if (!NT_SUCCESS(Status) &&
Status != STATUS_NONE_MAPPED &&
Status != STATUS_SOME_NOT_MAPPED)
+ {
+ TRACE("LsapLookupIsolatedBuiltinNames failed! (Status %lx)\n", Status);
goto done;
+ }
if (Mapped == Count)
goto done;
if (!NT_SUCCESS(Status) &&
Status != STATUS_NONE_MAPPED &&
Status != STATUS_SOME_NOT_MAPPED)
+ {
+ TRACE("LsapLookupIsolatedAccountNames failed! (Status %lx)\n", Status);
goto done;
+ }
if (Mapped == Count)
goto done;
if (!NT_SUCCESS(Status) &&
Status != STATUS_NONE_MAPPED &&
Status != STATUS_SOME_NOT_MAPPED)
+ {
+ TRACE("LsapLookupBuiltinNames failed! (Status %lx)\n", Status);
goto done;
+ }
if (Mapped == Count)
goto done;
if (!NT_SUCCESS(Status) &&
Status != STATUS_NONE_MAPPED &&
Status != STATUS_SOME_NOT_MAPPED)
+ {
+ TRACE("LsapLookupAccountNames failed! (Status %lx)\n", Status);
goto done;
+ }
if (Mapped == Count)
goto done;