advapi32: Fixed building TRUSTEEs with objects.
Fill the TRUSTEE structure properly in BuildTrusteeWithObjectsAndName and BuildTrusteeWithObjectsAndSid, including regression tests.
This commit is contained in:
parent
870d37ff60
commit
ae8b835d85
|
@ -2067,14 +2067,33 @@ VOID WINAPI BuildTrusteeWithObjectsAndNameA( PTRUSTEEA pTrustee, POBJECTS_AND_NA
|
||||||
SE_OBJECT_TYPE ObjectType, LPSTR ObjectTypeName,
|
SE_OBJECT_TYPE ObjectType, LPSTR ObjectTypeName,
|
||||||
LPSTR InheritedObjectTypeName, LPSTR Name )
|
LPSTR InheritedObjectTypeName, LPSTR Name )
|
||||||
{
|
{
|
||||||
|
DWORD ObjectsPresent = 0;
|
||||||
|
|
||||||
TRACE("%p %p 0x%08x %p %p %s\n", pTrustee, pObjName,
|
TRACE("%p %p 0x%08x %p %p %s\n", pTrustee, pObjName,
|
||||||
ObjectType, ObjectTypeName, InheritedObjectTypeName, debugstr_a(Name));
|
ObjectType, ObjectTypeName, InheritedObjectTypeName, debugstr_a(Name));
|
||||||
|
|
||||||
|
/* Fill the OBJECTS_AND_NAME structure */
|
||||||
|
pObjName->ObjectType = ObjectType;
|
||||||
|
if (ObjectTypeName != NULL)
|
||||||
|
{
|
||||||
|
ObjectsPresent |= ACE_OBJECT_TYPE_PRESENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
pObjName->InheritedObjectTypeName = InheritedObjectTypeName;
|
||||||
|
if (InheritedObjectTypeName != NULL)
|
||||||
|
{
|
||||||
|
ObjectsPresent |= ACE_INHERITED_OBJECT_TYPE_PRESENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
pObjName->ObjectsPresent = ObjectsPresent;
|
||||||
|
pObjName->ptstrName = Name;
|
||||||
|
|
||||||
|
/* Fill the TRUSTEE structure */
|
||||||
pTrustee->pMultipleTrustee = NULL;
|
pTrustee->pMultipleTrustee = NULL;
|
||||||
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||||
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_NAME;
|
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_NAME;
|
||||||
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
|
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||||
pTrustee->ptstrName = Name;
|
pTrustee->ptstrName = pObjName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -2084,38 +2103,115 @@ VOID WINAPI BuildTrusteeWithObjectsAndNameW( PTRUSTEEW pTrustee, POBJECTS_AND_NA
|
||||||
SE_OBJECT_TYPE ObjectType, LPWSTR ObjectTypeName,
|
SE_OBJECT_TYPE ObjectType, LPWSTR ObjectTypeName,
|
||||||
LPWSTR InheritedObjectTypeName, LPWSTR Name )
|
LPWSTR InheritedObjectTypeName, LPWSTR Name )
|
||||||
{
|
{
|
||||||
|
DWORD ObjectsPresent = 0;
|
||||||
|
|
||||||
TRACE("%p %p 0x%08x %p %p %s\n", pTrustee, pObjName,
|
TRACE("%p %p 0x%08x %p %p %s\n", pTrustee, pObjName,
|
||||||
ObjectType, ObjectTypeName, InheritedObjectTypeName, debugstr_w(Name));
|
ObjectType, ObjectTypeName, InheritedObjectTypeName, debugstr_w(Name));
|
||||||
|
|
||||||
|
/* Fill the OBJECTS_AND_NAME structure */
|
||||||
|
pObjName->ObjectType = ObjectType;
|
||||||
|
if (ObjectTypeName != NULL)
|
||||||
|
{
|
||||||
|
ObjectsPresent |= ACE_OBJECT_TYPE_PRESENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
pObjName->InheritedObjectTypeName = InheritedObjectTypeName;
|
||||||
|
if (InheritedObjectTypeName != NULL)
|
||||||
|
{
|
||||||
|
ObjectsPresent |= ACE_INHERITED_OBJECT_TYPE_PRESENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
pObjName->ObjectsPresent = ObjectsPresent;
|
||||||
|
pObjName->ptstrName = Name;
|
||||||
|
|
||||||
|
/* Fill the TRUSTEE structure */
|
||||||
pTrustee->pMultipleTrustee = NULL;
|
pTrustee->pMultipleTrustee = NULL;
|
||||||
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||||
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_NAME;
|
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_NAME;
|
||||||
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
|
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||||
pTrustee->ptstrName = Name;
|
pTrustee->ptstrName = (LPWSTR)pObjName;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID WINAPI BuildTrusteeWithObjectsAndSidA( PTRUSTEEA pTrustee, POBJECTS_AND_SID pObjSid,
|
VOID WINAPI BuildTrusteeWithObjectsAndSidA( PTRUSTEEA pTrustee, POBJECTS_AND_SID pObjSid,
|
||||||
GUID* pObjectGuid, GUID* pInheritedObjectGuid, PSID pSid )
|
GUID* pObjectGuid, GUID* pInheritedObjectGuid, PSID pSid )
|
||||||
{
|
{
|
||||||
|
DWORD ObjectsPresent = 0;
|
||||||
|
|
||||||
TRACE("%p %p %p %p %p\n", pTrustee, pObjSid, pObjectGuid, pInheritedObjectGuid, pSid);
|
TRACE("%p %p %p %p %p\n", pTrustee, pObjSid, pObjectGuid, pInheritedObjectGuid, pSid);
|
||||||
|
|
||||||
|
/* Fill the OBJECTS_AND_SID structure */
|
||||||
|
if (pObjectGuid != NULL)
|
||||||
|
{
|
||||||
|
pObjSid->ObjectTypeGuid = *pObjectGuid;
|
||||||
|
ObjectsPresent |= ACE_OBJECT_TYPE_PRESENT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ZeroMemory(&pObjSid->ObjectTypeGuid,
|
||||||
|
sizeof(GUID));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pInheritedObjectGuid != NULL)
|
||||||
|
{
|
||||||
|
pObjSid->InheritedObjectTypeGuid = *pInheritedObjectGuid;
|
||||||
|
ObjectsPresent |= ACE_INHERITED_OBJECT_TYPE_PRESENT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ZeroMemory(&pObjSid->InheritedObjectTypeGuid,
|
||||||
|
sizeof(GUID));
|
||||||
|
}
|
||||||
|
|
||||||
|
pObjSid->ObjectsPresent = ObjectsPresent;
|
||||||
|
pObjSid->pSid = pSid;
|
||||||
|
|
||||||
|
/* Fill the TRUSTEE structure */
|
||||||
pTrustee->pMultipleTrustee = NULL;
|
pTrustee->pMultipleTrustee = NULL;
|
||||||
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||||
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_SID;
|
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_SID;
|
||||||
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
|
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||||
pTrustee->ptstrName = (LPSTR) pSid;
|
pTrustee->ptstrName = (LPSTR) pObjSid;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID WINAPI BuildTrusteeWithObjectsAndSidW( PTRUSTEEW pTrustee, POBJECTS_AND_SID pObjSid,
|
VOID WINAPI BuildTrusteeWithObjectsAndSidW( PTRUSTEEW pTrustee, POBJECTS_AND_SID pObjSid,
|
||||||
GUID* pObjectGuid, GUID* pInheritedObjectGuid, PSID pSid )
|
GUID* pObjectGuid, GUID* pInheritedObjectGuid, PSID pSid )
|
||||||
{
|
{
|
||||||
|
DWORD ObjectsPresent = 0;
|
||||||
|
|
||||||
TRACE("%p %p %p %p %p\n", pTrustee, pObjSid, pObjectGuid, pInheritedObjectGuid, pSid);
|
TRACE("%p %p %p %p %p\n", pTrustee, pObjSid, pObjectGuid, pInheritedObjectGuid, pSid);
|
||||||
|
|
||||||
|
/* Fill the OBJECTS_AND_SID structure */
|
||||||
|
if (pObjectGuid != NULL)
|
||||||
|
{
|
||||||
|
pObjSid->ObjectTypeGuid = *pObjectGuid;
|
||||||
|
ObjectsPresent |= ACE_OBJECT_TYPE_PRESENT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ZeroMemory(&pObjSid->ObjectTypeGuid,
|
||||||
|
sizeof(GUID));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pInheritedObjectGuid != NULL)
|
||||||
|
{
|
||||||
|
pObjSid->InheritedObjectTypeGuid = *pInheritedObjectGuid;
|
||||||
|
ObjectsPresent |= ACE_INHERITED_OBJECT_TYPE_PRESENT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ZeroMemory(&pObjSid->InheritedObjectTypeGuid,
|
||||||
|
sizeof(GUID));
|
||||||
|
}
|
||||||
|
|
||||||
|
pObjSid->ObjectsPresent = ObjectsPresent;
|
||||||
|
pObjSid->pSid = pSid;
|
||||||
|
|
||||||
|
/* Fill the TRUSTEE structure */
|
||||||
pTrustee->pMultipleTrustee = NULL;
|
pTrustee->pMultipleTrustee = NULL;
|
||||||
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
pTrustee->MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||||
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_SID;
|
pTrustee->TrusteeForm = TRUSTEE_IS_OBJECTS_AND_SID;
|
||||||
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
|
pTrustee->TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||||
pTrustee->ptstrName = (LPWSTR) pSid;
|
pTrustee->ptstrName = (LPWSTR) pObjSid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
|
|
@ -27,8 +27,20 @@
|
||||||
#include "aclapi.h"
|
#include "aclapi.h"
|
||||||
#include "winnt.h"
|
#include "winnt.h"
|
||||||
|
|
||||||
typedef BOOL (WINAPI *fnBuildTrusteeWithSidA)( TRUSTEE *trustee, PSID psid );
|
typedef VOID (WINAPI *fnBuildTrusteeWithSidA)( PTRUSTEEA pTrustee, PSID pSid );
|
||||||
typedef BOOL (WINAPI *fnBuildTrusteeWithNameA)( TRUSTEE *trustee, LPSTR str );
|
typedef VOID (WINAPI *fnBuildTrusteeWithNameA)( PTRUSTEEA pTrustee, LPSTR pName );
|
||||||
|
typedef VOID (WINAPI *fnBuildTrusteeWithObjectsAndNameA)( PTRUSTEEA pTrustee,
|
||||||
|
POBJECTS_AND_NAME_A pObjName,
|
||||||
|
SE_OBJECT_TYPE ObjectType,
|
||||||
|
LPSTR ObjectTypeName,
|
||||||
|
LPSTR InheritedObjectTypeName,
|
||||||
|
LPSTR Name );
|
||||||
|
typedef VOID (WINAPI *fnBuildTrusteeWithObjectsAndSidA)( PTRUSTEEA pTrustee,
|
||||||
|
POBJECTS_AND_SID pObjSid,
|
||||||
|
GUID* pObjectGuid,
|
||||||
|
GUID* pInheritedObjectGuid,
|
||||||
|
PSID pSid );
|
||||||
|
typedef LPSTR (WINAPI *fnGetTrusteeNameA)( PTRUSTEEA pTrustee );
|
||||||
typedef BOOL (WINAPI *fnConvertSidToStringSidA)( PSID pSid, LPSTR *str );
|
typedef BOOL (WINAPI *fnConvertSidToStringSidA)( PSID pSid, LPSTR *str );
|
||||||
typedef BOOL (WINAPI *fnConvertStringSidToSidA)( LPCSTR str, PSID pSid );
|
typedef BOOL (WINAPI *fnConvertStringSidToSidA)( LPCSTR str, PSID pSid );
|
||||||
typedef BOOL (WINAPI *fnGetFileSecurityA)(LPCSTR, SECURITY_INFORMATION,
|
typedef BOOL (WINAPI *fnGetFileSecurityA)(LPCSTR, SECURITY_INFORMATION,
|
||||||
|
@ -39,6 +51,9 @@ static HMODULE hmod;
|
||||||
|
|
||||||
fnBuildTrusteeWithSidA pBuildTrusteeWithSidA;
|
fnBuildTrusteeWithSidA pBuildTrusteeWithSidA;
|
||||||
fnBuildTrusteeWithNameA pBuildTrusteeWithNameA;
|
fnBuildTrusteeWithNameA pBuildTrusteeWithNameA;
|
||||||
|
fnBuildTrusteeWithObjectsAndNameA pBuildTrusteeWithObjectsAndNameA;
|
||||||
|
fnBuildTrusteeWithObjectsAndSidA pBuildTrusteeWithObjectsAndSidA;
|
||||||
|
fnGetTrusteeNameA pGetTrusteeNameA;
|
||||||
fnConvertSidToStringSidA pConvertSidToStringSidA;
|
fnConvertSidToStringSidA pConvertSidToStringSidA;
|
||||||
fnConvertStringSidToSidA pConvertStringSidToSidA;
|
fnConvertStringSidToSidA pConvertStringSidToSidA;
|
||||||
fnGetFileSecurityA pGetFileSecurityA;
|
fnGetFileSecurityA pGetFileSecurityA;
|
||||||
|
@ -148,9 +163,18 @@ static void test_sid(void)
|
||||||
|
|
||||||
static void test_trustee(void)
|
static void test_trustee(void)
|
||||||
{
|
{
|
||||||
|
GUID ObjectType = {0x12345678, 0x1234, 0x5678, {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}};
|
||||||
|
GUID InheritedObjectType = {0x23456789, 0x2345, 0x6786, {0x2, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}};
|
||||||
|
GUID ZeroGuid;
|
||||||
|
OBJECTS_AND_NAME_ oan;
|
||||||
|
OBJECTS_AND_SID oas;
|
||||||
TRUSTEE trustee;
|
TRUSTEE trustee;
|
||||||
PSID psid;
|
PSID psid;
|
||||||
char str[] = "2jjj";
|
char szObjectTypeName[] = "ObjectTypeName";
|
||||||
|
char szInheritedObjectTypeName[] = "InheritedObjectTypeName";
|
||||||
|
char szTrusteeName[] = "szTrusteeName";
|
||||||
|
|
||||||
|
memset( &ZeroGuid, 0x00, sizeof (ZeroGuid) );
|
||||||
|
|
||||||
SID_IDENTIFIER_AUTHORITY auth = { {0x11,0x22,0,0,0, 0} };
|
SID_IDENTIFIER_AUTHORITY auth = { {0x11,0x22,0,0,0, 0} };
|
||||||
|
|
||||||
|
@ -158,7 +182,15 @@ static void test_trustee(void)
|
||||||
GetProcAddress( hmod, "BuildTrusteeWithSidA" );
|
GetProcAddress( hmod, "BuildTrusteeWithSidA" );
|
||||||
pBuildTrusteeWithNameA = (fnBuildTrusteeWithNameA)
|
pBuildTrusteeWithNameA = (fnBuildTrusteeWithNameA)
|
||||||
GetProcAddress( hmod, "BuildTrusteeWithNameA" );
|
GetProcAddress( hmod, "BuildTrusteeWithNameA" );
|
||||||
if( !pBuildTrusteeWithSidA || !pBuildTrusteeWithNameA)
|
pBuildTrusteeWithObjectsAndNameA = (fnBuildTrusteeWithObjectsAndNameA)
|
||||||
|
GetProcAddress (hmod, "BuildTrusteeWithObjectsAndNameA" );
|
||||||
|
pBuildTrusteeWithObjectsAndSidA = (fnBuildTrusteeWithObjectsAndSidA)
|
||||||
|
GetProcAddress (hmod, "BuildTrusteeWithObjectsAndSidA" );
|
||||||
|
pGetTrusteeNameA = (fnGetTrusteeNameA)
|
||||||
|
GetProcAddress (hmod, "GetTrusteeNameA" );
|
||||||
|
if( !pBuildTrusteeWithSidA || !pBuildTrusteeWithNameA ||
|
||||||
|
!pBuildTrusteeWithObjectsAndNameA || !pBuildTrusteeWithObjectsAndSidA ||
|
||||||
|
!pGetTrusteeNameA )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( ! AllocateAndInitializeSid( &auth, 1, 42, 0,0,0,0,0,0,0,&psid ) )
|
if ( ! AllocateAndInitializeSid( &auth, 1, 42, 0,0,0,0,0,0,0,&psid ) )
|
||||||
|
@ -167,6 +199,7 @@ static void test_trustee(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* test BuildTrusteeWithSidA */
|
||||||
memset( &trustee, 0xff, sizeof trustee );
|
memset( &trustee, 0xff, sizeof trustee );
|
||||||
pBuildTrusteeWithSidA( &trustee, psid );
|
pBuildTrusteeWithSidA( &trustee, psid );
|
||||||
|
|
||||||
|
@ -176,18 +209,110 @@ static void test_trustee(void)
|
||||||
ok( trustee.TrusteeForm == TRUSTEE_IS_SID, "TrusteeForm wrong\n");
|
ok( trustee.TrusteeForm == TRUSTEE_IS_SID, "TrusteeForm wrong\n");
|
||||||
ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
||||||
ok( trustee.ptstrName == (LPSTR) psid, "ptstrName wrong\n" );
|
ok( trustee.ptstrName == (LPSTR) psid, "ptstrName wrong\n" );
|
||||||
|
|
||||||
|
/* test BuildTrusteeWithObjectsAndSidA (test 1) */
|
||||||
|
memset( &trustee, 0xff, sizeof trustee );
|
||||||
|
memset( &oas, 0xff, sizeof(oas) );
|
||||||
|
pBuildTrusteeWithObjectsAndSidA(&trustee, &oas, &ObjectType,
|
||||||
|
&InheritedObjectType, psid);
|
||||||
|
|
||||||
|
ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
|
||||||
|
ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
|
||||||
|
ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_SID, "TrusteeForm wrong\n");
|
||||||
|
ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
||||||
|
ok(trustee.ptstrName == (LPSTR)&oas, "ptstrName wrong\n");
|
||||||
|
|
||||||
|
ok(oas.ObjectsPresent == (ACE_OBJECT_TYPE_PRESENT | ACE_INHERITED_OBJECT_TYPE_PRESENT), "ObjectsPresent wrong\n");
|
||||||
|
ok(!memcmp(&oas.ObjectTypeGuid, &ObjectType, sizeof(GUID)), "ObjectTypeGuid wrong\n");
|
||||||
|
ok(!memcmp(&oas.InheritedObjectTypeGuid, &InheritedObjectType, sizeof(GUID)), "InheritedObjectTypeGuid wrong\n");
|
||||||
|
ok(oas.pSid == psid, "pSid wrong\n");
|
||||||
|
|
||||||
|
/* test GetTrusteeNameA */
|
||||||
|
ok(pGetTrusteeNameA(&trustee) == (LPSTR)&oas, "GetTrusteeName returned wrong value\n");
|
||||||
|
|
||||||
|
/* test BuildTrusteeWithObjectsAndSidA (test 2) */
|
||||||
|
memset( &trustee, 0xff, sizeof trustee );
|
||||||
|
memset( &oas, 0xff, sizeof(oas) );
|
||||||
|
pBuildTrusteeWithObjectsAndSidA(&trustee, &oas, NULL,
|
||||||
|
&InheritedObjectType, psid);
|
||||||
|
|
||||||
|
ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
|
||||||
|
ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
|
||||||
|
ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_SID, "TrusteeForm wrong\n");
|
||||||
|
ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
||||||
|
ok(trustee.ptstrName == (LPSTR)&oas, "ptstrName wrong\n");
|
||||||
|
|
||||||
|
ok(oas.ObjectsPresent == ACE_INHERITED_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n");
|
||||||
|
ok(!memcmp(&oas.ObjectTypeGuid, &ZeroGuid, sizeof(GUID)), "ObjectTypeGuid wrong\n");
|
||||||
|
ok(!memcmp(&oas.InheritedObjectTypeGuid, &InheritedObjectType, sizeof(GUID)), "InheritedObjectTypeGuid wrong\n");
|
||||||
|
ok(oas.pSid == psid, "pSid wrong\n");
|
||||||
|
|
||||||
FreeSid( psid );
|
FreeSid( psid );
|
||||||
|
|
||||||
/* test BuildTrusteeWithNameA */
|
/* test BuildTrusteeWithNameA */
|
||||||
memset( &trustee, 0xff, sizeof trustee );
|
memset( &trustee, 0xff, sizeof trustee );
|
||||||
pBuildTrusteeWithNameA( &trustee, str );
|
pBuildTrusteeWithNameA( &trustee, szTrusteeName );
|
||||||
|
|
||||||
ok( trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
|
ok( trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
|
||||||
ok( trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE,
|
ok( trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE,
|
||||||
"MultipleTrusteeOperation wrong\n");
|
"MultipleTrusteeOperation wrong\n");
|
||||||
ok( trustee.TrusteeForm == TRUSTEE_IS_NAME, "TrusteeForm wrong\n");
|
ok( trustee.TrusteeForm == TRUSTEE_IS_NAME, "TrusteeForm wrong\n");
|
||||||
ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
ok( trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
||||||
ok( trustee.ptstrName == str, "ptstrName wrong\n" );
|
ok( trustee.ptstrName == szTrusteeName, "ptstrName wrong\n" );
|
||||||
|
|
||||||
|
/* test BuildTrusteeWithObjectsAndNameA (test 1) */
|
||||||
|
memset( &trustee, 0xff, sizeof trustee );
|
||||||
|
memset( &oan, 0xff, sizeof(oan) );
|
||||||
|
pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, szObjectTypeName,
|
||||||
|
szInheritedObjectTypeName, szTrusteeName);
|
||||||
|
|
||||||
|
ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
|
||||||
|
ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
|
||||||
|
ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n");
|
||||||
|
ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
||||||
|
ok(trustee.ptstrName == (LPTSTR)&oan, "ptstrName wrong\n");
|
||||||
|
|
||||||
|
ok(oan.ObjectsPresent == (ACE_OBJECT_TYPE_PRESENT | ACE_INHERITED_OBJECT_TYPE_PRESENT), "ObjectsPresent wrong\n");
|
||||||
|
ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n");
|
||||||
|
ok(oan.InheritedObjectTypeName == szInheritedObjectTypeName, "InheritedObjectTypeName wrong\n");
|
||||||
|
ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n");
|
||||||
|
|
||||||
|
/* test GetTrusteeNameA */
|
||||||
|
ok(pGetTrusteeNameA(&trustee) == (LPSTR)&oan, "GetTrusteeName returned wrong value\n");
|
||||||
|
|
||||||
|
/* test BuildTrusteeWithObjectsAndNameA (test 2) */
|
||||||
|
memset( &trustee, 0xff, sizeof trustee );
|
||||||
|
memset( &oan, 0xff, sizeof(oan) );
|
||||||
|
pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, NULL,
|
||||||
|
szInheritedObjectTypeName, szTrusteeName);
|
||||||
|
|
||||||
|
ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
|
||||||
|
ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
|
||||||
|
ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n");
|
||||||
|
ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
||||||
|
ok(trustee.ptstrName == (LPSTR)&oan, "ptstrName wrong\n");
|
||||||
|
|
||||||
|
ok(oan.ObjectsPresent == ACE_INHERITED_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n");
|
||||||
|
ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n");
|
||||||
|
ok(oan.InheritedObjectTypeName == szInheritedObjectTypeName, "InheritedObjectTypeName wrong\n");
|
||||||
|
ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n");
|
||||||
|
|
||||||
|
/* test BuildTrusteeWithObjectsAndNameA (test 3) */
|
||||||
|
memset( &trustee, 0xff, sizeof trustee );
|
||||||
|
memset( &oan, 0xff, sizeof(oan) );
|
||||||
|
pBuildTrusteeWithObjectsAndNameA(&trustee, &oan, SE_KERNEL_OBJECT, szObjectTypeName,
|
||||||
|
NULL, szTrusteeName);
|
||||||
|
|
||||||
|
ok(trustee.pMultipleTrustee == NULL, "pMultipleTrustee wrong\n");
|
||||||
|
ok(trustee.MultipleTrusteeOperation == NO_MULTIPLE_TRUSTEE, "MultipleTrusteeOperation wrong\n");
|
||||||
|
ok(trustee.TrusteeForm == TRUSTEE_IS_OBJECTS_AND_NAME, "TrusteeForm wrong\n");
|
||||||
|
ok(trustee.TrusteeType == TRUSTEE_IS_UNKNOWN, "TrusteeType wrong\n");
|
||||||
|
ok(trustee.ptstrName == (LPTSTR)&oan, "ptstrName wrong\n");
|
||||||
|
|
||||||
|
ok(oan.ObjectsPresent == ACE_OBJECT_TYPE_PRESENT, "ObjectsPresent wrong\n");
|
||||||
|
ok(oan.ObjectType == SE_KERNEL_OBJECT, "ObjectType wrong\n");
|
||||||
|
ok(oan.InheritedObjectTypeName == NULL, "InheritedObjectTypeName wrong\n");
|
||||||
|
ok(oan.ptstrName == szTrusteeName, "szTrusteeName wrong\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the first isn't defined, assume none is */
|
/* If the first isn't defined, assume none is */
|
||||||
|
|
|
@ -3626,6 +3626,9 @@ typedef enum tagSID_NAME_USE {
|
||||||
SidTypeUnknown
|
SidTypeUnknown
|
||||||
} SID_NAME_USE,*PSID_NAME_USE;
|
} SID_NAME_USE,*PSID_NAME_USE;
|
||||||
|
|
||||||
|
#define ACE_OBJECT_TYPE_PRESENT 0x1
|
||||||
|
#define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
|
||||||
|
|
||||||
/* Access rights */
|
/* Access rights */
|
||||||
|
|
||||||
/* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
|
/* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
|
||||||
|
|
Loading…
Reference in New Issue