[2/2] ntdll: Implement NtQueryInformationToken(TokenDefaultDacl).
Hans Leidekker
hans at codeweavers.com
Fri Apr 17 05:53:04 CDT 2009
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index f775d10..0274721 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -1180,6 +1180,7 @@ static void test_token_attr(void)
TOKEN_PRIVILEGES *Privileges;
TOKEN_GROUPS *Groups;
TOKEN_USER *User;
+ TOKEN_DEFAULT_DACL *Dacl;
BOOL ret;
DWORD i, GLE;
LPSTR SidString;
@@ -1283,6 +1284,15 @@ static void test_token_attr(void)
ok(ImpersonationLevel == SecurityAnonymous, "ImpersonationLevel should have been SecurityAnonymous instead of %d\n", ImpersonationLevel);
CloseHandle(ImpersonationToken);
+
+ /* default dacl */
+ ret = GetTokenInformation(Token, TokenDefaultDacl, NULL, 0, &Size);
+ ok(!ret && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+ "GetTokenInformation(TokenDefaultDacl) failed with error %d\n", GetLastError());
+ Dacl = HeapAlloc(GetProcessHeap(), 0, Size);
+ ret = GetTokenInformation(Token, TokenDefaultDacl, Dacl, Size, &Size);
+ ok(ret, "GetTokenInformation(TokenDefaultDacl) failed with error %u\n", GetLastError());
+
CloseHandle(Token);
}
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index d2e133c..a0dd4ca 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -242,9 +242,6 @@ NTSTATUS WINAPI NtQueryInformationToken(
case TokenPrimaryGroup:
len = sizeof(TOKEN_PRIMARY_GROUP);
break;
- case TokenDefaultDacl:
- len = sizeof(TOKEN_DEFAULT_DACL);
- break;
case TokenSource:
len = sizeof(TOKEN_SOURCE);
break;
@@ -441,6 +438,25 @@ NTSTATUS WINAPI NtQueryInformationToken(
}
SERVER_END_REQ;
break;
+ case TokenDefaultDacl:
+ SERVER_START_REQ( get_token_default_dacl )
+ {
+ TOKEN_DEFAULT_DACL *default_dacl = tokeninfo;
+ ACL *acl = (ACL *)(default_dacl + 1);
+ DWORD acl_len;
+
+ if (tokeninfolength < sizeof(TOKEN_DEFAULT_DACL)) acl_len = 0;
+ else acl_len = tokeninfolength - sizeof(TOKEN_DEFAULT_DACL);
+
+ req->handle = wine_server_obj_handle( token );
+ wine_server_set_reply( req, acl, acl_len );
+ status = wine_server_call( req );
+ if (retlen) *retlen = reply->acl_len + sizeof(TOKEN_DEFAULT_DACL);
+ if (status == STATUS_SUCCESS)
+ default_dacl->DefaultDacl = acl;
+ }
+ SERVER_END_REQ;
+ break;
default:
{
ERR("Unhandled Token Information class %d!\n", tokeninfoclass);
More information about the wine-patches
mailing list