Commit bb3d74c2 authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

sechost: Allow hexadecimal and string rights flags to be interleaved.

parent c74508d2
......@@ -4212,6 +4212,10 @@ static void test_ConvertStringSecurityDescriptor(void)
{ "D:(A;;KAKRKWKX;;;WD)", SDDL_REVISION_1, TRUE },
{ "D:(A;;0xFFFFFFFF;;;WD)", SDDL_REVISION_1, TRUE },
{ "S:(AU;;0xFFFFFFFF;;;WD)", SDDL_REVISION_1, TRUE },
{ "S:(AU;;0xDeAdBeEf;;;WD)", SDDL_REVISION_1, TRUE },
{ "S:(AU;;GR0xFFFFFFFF;;;WD)", SDDL_REVISION_1, TRUE },
{ "S:(AU;;0xFFFFFFFFGR;;;WD)", SDDL_REVISION_1, TRUE },
{ "S:(AU;;0xFFFFFGR;;;WD)", SDDL_REVISION_1, TRUE },
/* test ACE string access right error case */
{ "D:(A;;ROB;;;WD)", SDDL_REVISION_1, FALSE, ERROR_INVALID_ACL },
/* test behaviour with empty strings */
......
......@@ -868,14 +868,21 @@ static DWORD parse_ace_flag( const WCHAR *string )
return 0;
}
static DWORD parse_ace_right( const WCHAR *string )
static DWORD parse_ace_right( const WCHAR **string_ptr )
{
const WCHAR *string = *string_ptr;
unsigned int i;
if (string[0] == '0' && string[1] == 'x')
return wcstoul( string, (WCHAR **)string_ptr, 16 );
for (i = 0; i < ARRAY_SIZE(ace_rights); ++i)
{
if (!wcsncmp( string, ace_rights[i].str, 2 ))
{
*string_ptr += 2;
return ace_rights[i].value;
}
}
return 0;
}
......@@ -908,30 +915,11 @@ static DWORD parse_ace_rights( const WCHAR **string_ptr )
while (*string == ' ')
string++;
if (string[0] == '0' && string[1] == 'x')
{
const WCHAR *p = string;
while (*p && *p != ';')
p++;
if (p - string <= 10 /* 8 hex digits + "0x" */ )
{
rights = wcstoul( string, NULL, 16 );
string = p;
}
else
WARN("Invalid rights string format: %s\n", debugstr_wn(string, p - string));
}
else
while (*string != ';')
{
while (*string != ';')
{
DWORD right = parse_ace_right( string );
if (!right) return 0;
rights |= right;
string += 2;
}
DWORD right = parse_ace_right( &string );
if (!right) return 0;
rights |= right;
}
*string_ptr = string;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment