| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file contains unit tests for the RestrictedToken. | 5 // This file contains unit tests for the RestrictedToken. |
| 6 | 6 |
| 7 #define _ATL_NO_EXCEPTIONS | 7 #define _ATL_NO_EXCEPTIONS |
| 8 #include <atlbase.h> | 8 #include <atlbase.h> |
| 9 #include <atlsecurity.h> | 9 #include <atlsecurity.h> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | |
| 12 #include "base/win/scoped_handle.h" | |
| 13 #include "sandbox/win/src/restricted_token.h" | 11 #include "sandbox/win/src/restricted_token.h" |
| 14 #include "sandbox/win/src/sid.h" | 12 #include "sandbox/win/src/sid.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 14 |
| 17 namespace sandbox { | 15 namespace sandbox { |
| 18 | 16 |
| 19 // Tests the initializatioin with an invalid token handle. | 17 // Tests the initializatioin with an invalid token handle. |
| 20 TEST(RestrictedTokenTest, InvalidHandle) { | 18 TEST(RestrictedTokenTest, InvalidHandle) { |
| 21 RestrictedToken token; | 19 RestrictedToken token; |
| 22 ASSERT_EQ(ERROR_INVALID_HANDLE, token.Init(reinterpret_cast<HANDLE>(0x5555))); | 20 ASSERT_EQ(ERROR_INVALID_HANDLE, token.Init(reinterpret_cast<HANDLE>(0x5555))); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 33 | 31 |
| 34 ATL::CAccessToken access_token; | 32 ATL::CAccessToken access_token; |
| 35 access_token.Attach(token_handle); | 33 access_token.Attach(token_handle); |
| 36 | 34 |
| 37 // Create the token using the current token. | 35 // Create the token using the current token. |
| 38 RestrictedToken token_default; | 36 RestrictedToken token_default; |
| 39 ASSERT_EQ(ERROR_SUCCESS, token_default.Init(NULL)); | 37 ASSERT_EQ(ERROR_SUCCESS, token_default.Init(NULL)); |
| 40 | 38 |
| 41 // Get the handle to the restricted token. | 39 // Get the handle to the restricted token. |
| 42 | 40 |
| 43 base::win::ScopedHandle restricted_token_handle; | 41 HANDLE restricted_token_handle = NULL; |
| 44 ASSERT_EQ(ERROR_SUCCESS, | 42 ASSERT_EQ(ERROR_SUCCESS, |
| 45 token_default.GetRestrictedToken(&restricted_token_handle)); | 43 token_default.GetRestrictedTokenHandle(&restricted_token_handle)); |
| 46 | 44 |
| 47 ATL::CAccessToken restricted_token; | 45 ATL::CAccessToken restricted_token; |
| 48 restricted_token.Attach(restricted_token_handle.Take()); | 46 restricted_token.Attach(restricted_token_handle); |
| 49 | 47 |
| 50 ATL::CSid sid_user_restricted; | 48 ATL::CSid sid_user_restricted; |
| 51 ATL::CSid sid_user_default; | 49 ATL::CSid sid_user_default; |
| 52 ATL::CSid sid_owner_restricted; | 50 ATL::CSid sid_owner_restricted; |
| 53 ATL::CSid sid_owner_default; | 51 ATL::CSid sid_owner_default; |
| 54 ASSERT_TRUE(restricted_token.GetUser(&sid_user_restricted)); | 52 ASSERT_TRUE(restricted_token.GetUser(&sid_user_restricted)); |
| 55 ASSERT_TRUE(access_token.GetUser(&sid_user_default)); | 53 ASSERT_TRUE(access_token.GetUser(&sid_user_default)); |
| 56 ASSERT_TRUE(restricted_token.GetOwner(&sid_owner_restricted)); | 54 ASSERT_TRUE(restricted_token.GetOwner(&sid_owner_restricted)); |
| 57 ASSERT_TRUE(access_token.GetOwner(&sid_owner_default)); | 55 ASSERT_TRUE(access_token.GetOwner(&sid_owner_default)); |
| 58 | 56 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 75 | 73 |
| 76 // Change the primary group. | 74 // Change the primary group. |
| 77 access_token.SetPrimaryGroup(ATL::Sids::World()); | 75 access_token.SetPrimaryGroup(ATL::Sids::World()); |
| 78 | 76 |
| 79 // Create the token using the current token. | 77 // Create the token using the current token. |
| 80 RestrictedToken token; | 78 RestrictedToken token; |
| 81 ASSERT_EQ(ERROR_SUCCESS, token.Init(access_token.GetHandle())); | 79 ASSERT_EQ(ERROR_SUCCESS, token.Init(access_token.GetHandle())); |
| 82 | 80 |
| 83 // Get the handle to the restricted token. | 81 // Get the handle to the restricted token. |
| 84 | 82 |
| 85 base::win::ScopedHandle restricted_token_handle; | 83 HANDLE restricted_token_handle = NULL; |
| 86 ASSERT_EQ(ERROR_SUCCESS, | 84 ASSERT_EQ(ERROR_SUCCESS, |
| 87 token.GetRestrictedToken(&restricted_token_handle)); | 85 token.GetRestrictedTokenHandle(&restricted_token_handle)); |
| 88 | 86 |
| 89 ATL::CAccessToken restricted_token; | 87 ATL::CAccessToken restricted_token; |
| 90 restricted_token.Attach(restricted_token_handle.Take()); | 88 restricted_token.Attach(restricted_token_handle); |
| 91 | 89 |
| 92 ATL::CSid sid_restricted; | 90 ATL::CSid sid_restricted; |
| 93 ATL::CSid sid_default; | 91 ATL::CSid sid_default; |
| 94 ASSERT_TRUE(restricted_token.GetPrimaryGroup(&sid_restricted)); | 92 ASSERT_TRUE(restricted_token.GetPrimaryGroup(&sid_restricted)); |
| 95 ASSERT_TRUE(access_token.GetPrimaryGroup(&sid_default)); | 93 ASSERT_TRUE(access_token.GetPrimaryGroup(&sid_default)); |
| 96 | 94 |
| 97 // Check if both token have the same owner. | 95 // Check if both token have the same owner. |
| 98 ASSERT_EQ(sid_restricted, sid_default); | 96 ASSERT_EQ(sid_restricted, sid_default); |
| 99 } | 97 } |
| 100 | 98 |
| 101 // Verifies that the token created by the object are valid. | 99 // Verifies that the token created by the object are valid. |
| 102 TEST(RestrictedTokenTest, ResultToken) { | 100 TEST(RestrictedTokenTest, ResultToken) { |
| 103 RestrictedToken token; | 101 RestrictedToken token; |
| 104 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 102 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 105 | 103 |
| 106 ASSERT_EQ(ERROR_SUCCESS, | 104 ASSERT_EQ(ERROR_SUCCESS, |
| 107 token.AddRestrictingSid(ATL::Sids::World().GetPSID())); | 105 token.AddRestrictingSid(ATL::Sids::World().GetPSID())); |
| 108 | 106 |
| 109 base::win::ScopedHandle restricted_token; | 107 HANDLE restricted_token; |
| 110 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&restricted_token)); | 108 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&restricted_token)); |
| 111 | 109 |
| 112 ASSERT_TRUE(::IsTokenRestricted(restricted_token.Get())); | 110 ASSERT_TRUE(::IsTokenRestricted(restricted_token)); |
| 113 | 111 |
| 114 DWORD length = 0; | 112 DWORD length = 0; |
| 115 TOKEN_TYPE type; | 113 TOKEN_TYPE type; |
| 116 ASSERT_TRUE(::GetTokenInformation(restricted_token.Get(), | 114 ASSERT_TRUE(::GetTokenInformation(restricted_token, |
| 117 ::TokenType, | 115 ::TokenType, |
| 118 &type, | 116 &type, |
| 119 sizeof(type), | 117 sizeof(type), |
| 120 &length)); | 118 &length)); |
| 121 | 119 |
| 122 ASSERT_EQ(type, TokenPrimary); | 120 ASSERT_EQ(type, TokenPrimary); |
| 123 | 121 |
| 124 base::win::ScopedHandle impersonation_token; | 122 HANDLE impersonation_token; |
| 125 ASSERT_EQ(ERROR_SUCCESS, | 123 ASSERT_EQ(ERROR_SUCCESS, |
| 126 token.GetRestrictedTokenForImpersonation(&impersonation_token)); | 124 token.GetRestrictedTokenHandleForImpersonation(&impersonation_token)); |
| 127 | 125 |
| 128 ASSERT_TRUE(::IsTokenRestricted(impersonation_token.Get())); | 126 ASSERT_TRUE(::IsTokenRestricted(impersonation_token)); |
| 129 | 127 |
| 130 ASSERT_TRUE(::GetTokenInformation(impersonation_token.Get(), | 128 ASSERT_TRUE(::GetTokenInformation(impersonation_token, |
| 131 ::TokenType, | 129 ::TokenType, |
| 132 &type, | 130 &type, |
| 133 sizeof(type), | 131 sizeof(type), |
| 134 &length)); | 132 &length)); |
| 135 | 133 |
| 136 ASSERT_EQ(type, TokenImpersonation); | 134 ASSERT_EQ(type, TokenImpersonation); |
| 135 |
| 136 ::CloseHandle(impersonation_token); |
| 137 ::CloseHandle(restricted_token); |
| 137 } | 138 } |
| 138 | 139 |
| 139 // Verifies that the token created has "Restricted" in its default dacl. | 140 // Verifies that the token created has "Restricted" in its default dacl. |
| 140 TEST(RestrictedTokenTest, DefaultDacl) { | 141 TEST(RestrictedTokenTest, DefaultDacl) { |
| 141 RestrictedToken token; | 142 RestrictedToken token; |
| 142 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 143 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 143 | 144 |
| 144 ASSERT_EQ(ERROR_SUCCESS, | 145 ASSERT_EQ(ERROR_SUCCESS, |
| 145 token.AddRestrictingSid(ATL::Sids::World().GetPSID())); | 146 token.AddRestrictingSid(ATL::Sids::World().GetPSID())); |
| 146 | 147 |
| 147 base::win::ScopedHandle handle; | 148 HANDLE handle; |
| 148 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&handle)); | 149 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&handle)); |
| 149 | 150 |
| 150 ATL::CAccessToken restricted_token; | 151 ATL::CAccessToken restricted_token; |
| 151 restricted_token.Attach(handle.Take()); | 152 restricted_token.Attach(handle); |
| 152 | 153 |
| 153 ATL::CDacl dacl; | 154 ATL::CDacl dacl; |
| 154 ASSERT_TRUE(restricted_token.GetDefaultDacl(&dacl)); | 155 ASSERT_TRUE(restricted_token.GetDefaultDacl(&dacl)); |
| 155 | 156 |
| 156 bool restricted_found = false; | 157 bool restricted_found = false; |
| 157 | 158 |
| 158 unsigned int ace_count = dacl.GetAceCount(); | 159 unsigned int ace_count = dacl.GetAceCount(); |
| 159 for (unsigned int i = 0; i < ace_count ; ++i) { | 160 for (unsigned int i = 0; i < ace_count ; ++i) { |
| 160 ATL::CSid sid; | 161 ATL::CSid sid; |
| 161 ACCESS_MASK mask = 0; | 162 ACCESS_MASK mask = 0; |
| 162 dacl.GetAclEntry(i, &sid, &mask); | 163 dacl.GetAclEntry(i, &sid, &mask); |
| 163 if (sid == ATL::Sids::RestrictedCode() && mask == GENERIC_ALL) { | 164 if (sid == ATL::Sids::RestrictedCode() && mask == GENERIC_ALL) { |
| 164 restricted_found = true; | 165 restricted_found = true; |
| 165 break; | 166 break; |
| 166 } | 167 } |
| 167 } | 168 } |
| 168 | 169 |
| 169 ASSERT_TRUE(restricted_found); | 170 ASSERT_TRUE(restricted_found); |
| 170 } | 171 } |
| 171 | 172 |
| 172 // Tests the method "AddSidForDenyOnly". | 173 // Tests the method "AddSidForDenyOnly". |
| 173 TEST(RestrictedTokenTest, DenySid) { | 174 TEST(RestrictedTokenTest, DenySid) { |
| 174 RestrictedToken token; | 175 RestrictedToken token; |
| 175 base::win::ScopedHandle token_handle; | 176 HANDLE token_handle = NULL; |
| 176 | 177 |
| 177 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 178 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 178 ASSERT_EQ(ERROR_SUCCESS, token.AddSidForDenyOnly(Sid(WinWorldSid))); | 179 ASSERT_EQ(ERROR_SUCCESS, token.AddSidForDenyOnly(Sid(WinWorldSid))); |
| 179 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 180 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 180 | 181 |
| 181 ATL::CAccessToken restricted_token; | 182 ATL::CAccessToken restricted_token; |
| 182 restricted_token.Attach(token_handle.Take()); | 183 restricted_token.Attach(token_handle); |
| 183 | 184 |
| 184 ATL::CTokenGroups groups; | 185 ATL::CTokenGroups groups; |
| 185 ASSERT_TRUE(restricted_token.GetGroups(&groups)); | 186 ASSERT_TRUE(restricted_token.GetGroups(&groups)); |
| 186 | 187 |
| 187 ATL::CSid::CSidArray sids; | 188 ATL::CSid::CSidArray sids; |
| 188 ATL::CAtlArray<DWORD> attributes; | 189 ATL::CAtlArray<DWORD> attributes; |
| 189 groups.GetSidsAndAttributes(&sids, &attributes); | 190 groups.GetSidsAndAttributes(&sids, &attributes); |
| 190 | 191 |
| 191 for (unsigned int i = 0; i < sids.GetCount(); i++) { | 192 for (unsigned int i = 0; i < sids.GetCount(); i++) { |
| 192 if (ATL::Sids::World() == sids[i]) { | 193 if (ATL::Sids::World() == sids[i]) { |
| 193 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, | 194 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, |
| 194 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); | 195 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); |
| 195 } | 196 } |
| 196 } | 197 } |
| 197 } | 198 } |
| 198 | 199 |
| 199 // Tests the method "AddAllSidsForDenyOnly". | 200 // Tests the method "AddAllSidsForDenyOnly". |
| 200 TEST(RestrictedTokenTest, DenySids) { | 201 TEST(RestrictedTokenTest, DenySids) { |
| 201 RestrictedToken token; | 202 RestrictedToken token; |
| 202 base::win::ScopedHandle token_handle; | 203 HANDLE token_handle = NULL; |
| 203 | 204 |
| 204 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 205 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 205 ASSERT_EQ(ERROR_SUCCESS, token.AddAllSidsForDenyOnly(NULL)); | 206 ASSERT_EQ(ERROR_SUCCESS, token.AddAllSidsForDenyOnly(NULL)); |
| 206 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 207 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 207 | 208 |
| 208 ATL::CAccessToken restricted_token; | 209 ATL::CAccessToken restricted_token; |
| 209 restricted_token.Attach(token_handle.Take()); | 210 restricted_token.Attach(token_handle); |
| 210 | 211 |
| 211 ATL::CTokenGroups groups; | 212 ATL::CTokenGroups groups; |
| 212 ASSERT_TRUE(restricted_token.GetGroups(&groups)); | 213 ASSERT_TRUE(restricted_token.GetGroups(&groups)); |
| 213 | 214 |
| 214 ATL::CSid::CSidArray sids; | 215 ATL::CSid::CSidArray sids; |
| 215 ATL::CAtlArray<DWORD> attributes; | 216 ATL::CAtlArray<DWORD> attributes; |
| 216 groups.GetSidsAndAttributes(&sids, &attributes); | 217 groups.GetSidsAndAttributes(&sids, &attributes); |
| 217 | 218 |
| 218 // Verify that all sids are really gone. | 219 // Verify that all sids are really gone. |
| 219 for (unsigned int i = 0; i < sids.GetCount(); i++) { | 220 for (unsigned int i = 0; i < sids.GetCount(); i++) { |
| 220 if ((attributes[i] & SE_GROUP_LOGON_ID) == 0 && | 221 if ((attributes[i] & SE_GROUP_LOGON_ID) == 0 && |
| 221 (attributes[i] & SE_GROUP_INTEGRITY) == 0) { | 222 (attributes[i] & SE_GROUP_INTEGRITY) == 0) { |
| 222 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, | 223 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, |
| 223 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); | 224 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); |
| 224 } | 225 } |
| 225 } | 226 } |
| 226 } | 227 } |
| 227 | 228 |
| 228 // Tests the method "AddAllSidsForDenyOnly" using an exception list. | 229 // Tests the method "AddAllSidsForDenyOnly" using an exception list. |
| 229 TEST(RestrictedTokenTest, DenySidsException) { | 230 TEST(RestrictedTokenTest, DenySidsException) { |
| 230 RestrictedToken token; | 231 RestrictedToken token; |
| 231 base::win::ScopedHandle token_handle; | 232 HANDLE token_handle = NULL; |
| 232 | 233 |
| 233 std::vector<Sid> sids_exception; | 234 std::vector<Sid> sids_exception; |
| 234 sids_exception.push_back(Sid(WinWorldSid)); | 235 sids_exception.push_back(Sid(WinWorldSid)); |
| 235 | 236 |
| 236 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 237 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 237 ASSERT_EQ(ERROR_SUCCESS, token.AddAllSidsForDenyOnly(&sids_exception)); | 238 ASSERT_EQ(ERROR_SUCCESS, token.AddAllSidsForDenyOnly(&sids_exception)); |
| 238 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 239 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 239 | 240 |
| 240 ATL::CAccessToken restricted_token; | 241 ATL::CAccessToken restricted_token; |
| 241 restricted_token.Attach(token_handle.Take()); | 242 restricted_token.Attach(token_handle); |
| 242 | 243 |
| 243 ATL::CTokenGroups groups; | 244 ATL::CTokenGroups groups; |
| 244 ASSERT_TRUE(restricted_token.GetGroups(&groups)); | 245 ASSERT_TRUE(restricted_token.GetGroups(&groups)); |
| 245 | 246 |
| 246 ATL::CSid::CSidArray sids; | 247 ATL::CSid::CSidArray sids; |
| 247 ATL::CAtlArray<DWORD> attributes; | 248 ATL::CAtlArray<DWORD> attributes; |
| 248 groups.GetSidsAndAttributes(&sids, &attributes); | 249 groups.GetSidsAndAttributes(&sids, &attributes); |
| 249 | 250 |
| 250 // Verify that all sids are really gone. | 251 // Verify that all sids are really gone. |
| 251 for (unsigned int i = 0; i < sids.GetCount(); i++) { | 252 for (unsigned int i = 0; i < sids.GetCount(); i++) { |
| 252 if ((attributes[i] & SE_GROUP_LOGON_ID) == 0 && | 253 if ((attributes[i] & SE_GROUP_LOGON_ID) == 0 && |
| 253 (attributes[i] & SE_GROUP_INTEGRITY) == 0) { | 254 (attributes[i] & SE_GROUP_INTEGRITY) == 0) { |
| 254 if (ATL::Sids::World() == sids[i]) { | 255 if (ATL::Sids::World() == sids[i]) { |
| 255 ASSERT_EQ(NULL, attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); | 256 ASSERT_EQ(NULL, attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); |
| 256 } else { | 257 } else { |
| 257 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, | 258 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, |
| 258 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); | 259 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); |
| 259 } | 260 } |
| 260 } | 261 } |
| 261 } | 262 } |
| 262 } | 263 } |
| 263 | 264 |
| 264 // Tests test method AddOwnerSidForDenyOnly. | 265 // Tests test method AddOwnerSidForDenyOnly. |
| 265 TEST(RestrictedTokenTest, DenyOwnerSid) { | 266 TEST(RestrictedTokenTest, DenyOwnerSid) { |
| 266 RestrictedToken token; | 267 RestrictedToken token; |
| 267 base::win::ScopedHandle token_handle; | 268 HANDLE token_handle = NULL; |
| 268 | 269 |
| 269 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 270 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 270 ASSERT_EQ(ERROR_SUCCESS, token.AddUserSidForDenyOnly()); | 271 ASSERT_EQ(ERROR_SUCCESS, token.AddUserSidForDenyOnly()); |
| 271 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 272 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 272 | 273 |
| 273 ATL::CAccessToken restricted_token; | 274 ATL::CAccessToken restricted_token; |
| 274 restricted_token.Attach(token_handle.Take()); | 275 restricted_token.Attach(token_handle); |
| 275 | 276 |
| 276 ATL::CTokenGroups groups; | 277 ATL::CTokenGroups groups; |
| 277 ASSERT_TRUE(restricted_token.GetGroups(&groups)); | 278 ASSERT_TRUE(restricted_token.GetGroups(&groups)); |
| 278 | 279 |
| 279 ATL::CSid::CSidArray sids; | 280 ATL::CSid::CSidArray sids; |
| 280 ATL::CAtlArray<DWORD> attributes; | 281 ATL::CAtlArray<DWORD> attributes; |
| 281 groups.GetSidsAndAttributes(&sids, &attributes); | 282 groups.GetSidsAndAttributes(&sids, &attributes); |
| 282 | 283 |
| 283 ATL::CSid user_sid; | 284 ATL::CSid user_sid; |
| 284 ASSERT_TRUE(restricted_token.GetUser(&user_sid)); | 285 ASSERT_TRUE(restricted_token.GetUser(&user_sid)); |
| 285 | 286 |
| 286 for (unsigned int i = 0; i < sids.GetCount(); ++i) { | 287 for (unsigned int i = 0; i < sids.GetCount(); ++i) { |
| 287 if (user_sid == sids[i]) { | 288 if (user_sid == sids[i]) { |
| 288 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, | 289 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, |
| 289 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); | 290 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); |
| 290 } | 291 } |
| 291 } | 292 } |
| 292 } | 293 } |
| 293 | 294 |
| 294 // Tests test method AddOwnerSidForDenyOnly with a custom effective token. | 295 // Tests test method AddOwnerSidForDenyOnly with a custom effective token. |
| 295 TEST(RestrictedTokenTest, DenyOwnerSidCustom) { | 296 TEST(RestrictedTokenTest, DenyOwnerSidCustom) { |
| 296 // Get the current process token. | 297 // Get the current process token. |
| 297 HANDLE access_handle = INVALID_HANDLE_VALUE; | 298 HANDLE token_handle = INVALID_HANDLE_VALUE; |
| 298 ASSERT_TRUE(::OpenProcessToken(::GetCurrentProcess(), TOKEN_ALL_ACCESS, | 299 ASSERT_TRUE(::OpenProcessToken(::GetCurrentProcess(), TOKEN_ALL_ACCESS, |
| 299 &access_handle)); | 300 &token_handle)); |
| 300 | 301 |
| 301 ASSERT_NE(INVALID_HANDLE_VALUE, access_handle); | 302 ASSERT_NE(INVALID_HANDLE_VALUE, token_handle); |
| 302 | 303 |
| 303 ATL::CAccessToken access_token; | 304 ATL::CAccessToken access_token; |
| 304 access_token.Attach(access_handle); | 305 access_token.Attach(token_handle); |
| 305 | 306 |
| 306 RestrictedToken token; | 307 RestrictedToken token; |
| 307 base::win::ScopedHandle token_handle; | |
| 308 ASSERT_EQ(ERROR_SUCCESS, token.Init(access_token.GetHandle())); | 308 ASSERT_EQ(ERROR_SUCCESS, token.Init(access_token.GetHandle())); |
| 309 ASSERT_EQ(ERROR_SUCCESS, token.AddUserSidForDenyOnly()); | 309 ASSERT_EQ(ERROR_SUCCESS, token.AddUserSidForDenyOnly()); |
| 310 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 310 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 311 | 311 |
| 312 ATL::CAccessToken restricted_token; | 312 ATL::CAccessToken restricted_token; |
| 313 restricted_token.Attach(token_handle.Take()); | 313 restricted_token.Attach(token_handle); |
| 314 | 314 |
| 315 ATL::CTokenGroups groups; | 315 ATL::CTokenGroups groups; |
| 316 ASSERT_TRUE(restricted_token.GetGroups(&groups)); | 316 ASSERT_TRUE(restricted_token.GetGroups(&groups)); |
| 317 | 317 |
| 318 ATL::CSid::CSidArray sids; | 318 ATL::CSid::CSidArray sids; |
| 319 ATL::CAtlArray<DWORD> attributes; | 319 ATL::CAtlArray<DWORD> attributes; |
| 320 groups.GetSidsAndAttributes(&sids, &attributes); | 320 groups.GetSidsAndAttributes(&sids, &attributes); |
| 321 | 321 |
| 322 ATL::CSid user_sid; | 322 ATL::CSid user_sid; |
| 323 ASSERT_TRUE(restricted_token.GetUser(&user_sid)); | 323 ASSERT_TRUE(restricted_token.GetUser(&user_sid)); |
| 324 | 324 |
| 325 for (unsigned int i = 0; i < sids.GetCount(); ++i) { | 325 for (unsigned int i = 0; i < sids.GetCount(); ++i) { |
| 326 if (user_sid == sids[i]) { | 326 if (user_sid == sids[i]) { |
| 327 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, | 327 ASSERT_EQ(SE_GROUP_USE_FOR_DENY_ONLY, |
| 328 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); | 328 attributes[i] & SE_GROUP_USE_FOR_DENY_ONLY); |
| 329 } | 329 } |
| 330 } | 330 } |
| 331 } | 331 } |
| 332 | 332 |
| 333 // Tests the method DeleteAllPrivileges. | 333 // Tests the method DeleteAllPrivileges. |
| 334 TEST(RestrictedTokenTest, DeleteAllPrivileges) { | 334 TEST(RestrictedTokenTest, DeleteAllPrivileges) { |
| 335 RestrictedToken token; | 335 RestrictedToken token; |
| 336 base::win::ScopedHandle token_handle; | 336 HANDLE token_handle = NULL; |
| 337 | 337 |
| 338 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 338 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 339 ASSERT_EQ(ERROR_SUCCESS, token.DeleteAllPrivileges(NULL)); | 339 ASSERT_EQ(ERROR_SUCCESS, token.DeleteAllPrivileges(NULL)); |
| 340 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 340 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 341 | 341 |
| 342 ATL::CAccessToken restricted_token; | 342 ATL::CAccessToken restricted_token; |
| 343 restricted_token.Attach(token_handle.Take()); | 343 restricted_token.Attach(token_handle); |
| 344 | 344 |
| 345 ATL::CTokenPrivileges privileges; | 345 ATL::CTokenPrivileges privileges; |
| 346 ASSERT_TRUE(restricted_token.GetPrivileges(&privileges)); | 346 ASSERT_TRUE(restricted_token.GetPrivileges(&privileges)); |
| 347 | 347 |
| 348 ASSERT_EQ(0, privileges.GetCount()); | 348 ASSERT_EQ(0, privileges.GetCount()); |
| 349 } | 349 } |
| 350 | 350 |
| 351 // Tests the method DeleteAllPrivileges with an exception list. | 351 // Tests the method DeleteAllPrivileges with an exception list. |
| 352 TEST(RestrictedTokenTest, DeleteAllPrivilegesException) { | 352 TEST(RestrictedTokenTest, DeleteAllPrivilegesException) { |
| 353 RestrictedToken token; | 353 RestrictedToken token; |
| 354 base::win::ScopedHandle token_handle; | 354 HANDLE token_handle = NULL; |
| 355 | 355 |
| 356 std::vector<base::string16> exceptions; | 356 std::vector<base::string16> exceptions; |
| 357 exceptions.push_back(SE_CHANGE_NOTIFY_NAME); | 357 exceptions.push_back(SE_CHANGE_NOTIFY_NAME); |
| 358 | 358 |
| 359 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 359 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 360 ASSERT_EQ(ERROR_SUCCESS, token.DeleteAllPrivileges(&exceptions)); | 360 ASSERT_EQ(ERROR_SUCCESS, token.DeleteAllPrivileges(&exceptions)); |
| 361 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 361 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 362 | 362 |
| 363 ATL::CAccessToken restricted_token; | 363 ATL::CAccessToken restricted_token; |
| 364 restricted_token.Attach(token_handle.Take()); | 364 restricted_token.Attach(token_handle); |
| 365 | 365 |
| 366 ATL::CTokenPrivileges privileges; | 366 ATL::CTokenPrivileges privileges; |
| 367 ASSERT_TRUE(restricted_token.GetPrivileges(&privileges)); | 367 ASSERT_TRUE(restricted_token.GetPrivileges(&privileges)); |
| 368 | 368 |
| 369 ATL::CTokenPrivileges::CNames privilege_names; | 369 ATL::CTokenPrivileges::CNames privilege_names; |
| 370 ATL::CTokenPrivileges::CAttributes privilege_name_attributes; | 370 ATL::CTokenPrivileges::CAttributes privilege_name_attributes; |
| 371 privileges.GetNamesAndAttributes(&privilege_names, | 371 privileges.GetNamesAndAttributes(&privilege_names, |
| 372 &privilege_name_attributes); | 372 &privilege_name_attributes); |
| 373 | 373 |
| 374 ASSERT_EQ(1, privileges.GetCount()); | 374 ASSERT_EQ(1, privileges.GetCount()); |
| 375 | 375 |
| 376 for (unsigned int i = 0; i < privileges.GetCount(); ++i) { | 376 for (unsigned int i = 0; i < privileges.GetCount(); ++i) { |
| 377 ASSERT_EQ(privilege_names[i], SE_CHANGE_NOTIFY_NAME); | 377 ASSERT_EQ(privilege_names[i], SE_CHANGE_NOTIFY_NAME); |
| 378 } | 378 } |
| 379 } | 379 } |
| 380 | 380 |
| 381 // Tests the method DeletePrivilege. | 381 // Tests the method DeletePrivilege. |
| 382 TEST(RestrictedTokenTest, DeletePrivilege) { | 382 TEST(RestrictedTokenTest, DeletePrivilege) { |
| 383 RestrictedToken token; | 383 RestrictedToken token; |
| 384 base::win::ScopedHandle token_handle; | 384 HANDLE token_handle = NULL; |
| 385 | 385 |
| 386 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 386 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 387 ASSERT_EQ(ERROR_SUCCESS, token.DeletePrivilege(SE_CHANGE_NOTIFY_NAME)); | 387 ASSERT_EQ(ERROR_SUCCESS, token.DeletePrivilege(SE_CHANGE_NOTIFY_NAME)); |
| 388 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 388 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 389 | 389 |
| 390 ATL::CAccessToken restricted_token; | 390 ATL::CAccessToken restricted_token; |
| 391 restricted_token.Attach(token_handle.Take()); | 391 restricted_token.Attach(token_handle); |
| 392 | 392 |
| 393 ATL::CTokenPrivileges privileges; | 393 ATL::CTokenPrivileges privileges; |
| 394 ASSERT_TRUE(restricted_token.GetPrivileges(&privileges)); | 394 ASSERT_TRUE(restricted_token.GetPrivileges(&privileges)); |
| 395 | 395 |
| 396 ATL::CTokenPrivileges::CNames privilege_names; | 396 ATL::CTokenPrivileges::CNames privilege_names; |
| 397 ATL::CTokenPrivileges::CAttributes privilege_name_attributes; | 397 ATL::CTokenPrivileges::CAttributes privilege_name_attributes; |
| 398 privileges.GetNamesAndAttributes(&privilege_names, | 398 privileges.GetNamesAndAttributes(&privilege_names, |
| 399 &privilege_name_attributes); | 399 &privilege_name_attributes); |
| 400 | 400 |
| 401 for (unsigned int i = 0; i < privileges.GetCount(); ++i) { | 401 for (unsigned int i = 0; i < privileges.GetCount(); ++i) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 break; | 434 break; |
| 435 } | 435 } |
| 436 } | 436 } |
| 437 | 437 |
| 438 ASSERT_TRUE(present); | 438 ASSERT_TRUE(present); |
| 439 } | 439 } |
| 440 | 440 |
| 441 // Tests the method AddRestrictingSid. | 441 // Tests the method AddRestrictingSid. |
| 442 TEST(RestrictedTokenTest, AddRestrictingSid) { | 442 TEST(RestrictedTokenTest, AddRestrictingSid) { |
| 443 RestrictedToken token; | 443 RestrictedToken token; |
| 444 base::win::ScopedHandle token_handle; | 444 HANDLE token_handle = NULL; |
| 445 | 445 |
| 446 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 446 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 447 ASSERT_EQ(ERROR_SUCCESS, | 447 ASSERT_EQ(ERROR_SUCCESS, |
| 448 token.AddRestrictingSid(ATL::Sids::World().GetPSID())); | 448 token.AddRestrictingSid(ATL::Sids::World().GetPSID())); |
| 449 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 449 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 450 | 450 |
| 451 ATL::CAccessToken restricted_token; | 451 ATL::CAccessToken restricted_token; |
| 452 restricted_token.Attach(token_handle.Take()); | 452 restricted_token.Attach(token_handle); |
| 453 | 453 |
| 454 CheckRestrictingSid(restricted_token, ATL::Sids::World(), 1); | 454 CheckRestrictingSid(restricted_token, ATL::Sids::World(), 1); |
| 455 } | 455 } |
| 456 | 456 |
| 457 // Tests the method AddRestrictingSidCurrentUser. | 457 // Tests the method AddRestrictingSidCurrentUser. |
| 458 TEST(RestrictedTokenTest, AddRestrictingSidCurrentUser) { | 458 TEST(RestrictedTokenTest, AddRestrictingSidCurrentUser) { |
| 459 RestrictedToken token; | 459 RestrictedToken token; |
| 460 base::win::ScopedHandle token_handle; | 460 HANDLE token_handle = NULL; |
| 461 | 461 |
| 462 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 462 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 463 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidCurrentUser()); | 463 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidCurrentUser()); |
| 464 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 464 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 465 | 465 |
| 466 ATL::CAccessToken restricted_token; | 466 ATL::CAccessToken restricted_token; |
| 467 restricted_token.Attach(token_handle.Take()); | 467 restricted_token.Attach(token_handle); |
| 468 ATL::CSid user; | 468 ATL::CSid user; |
| 469 restricted_token.GetUser(&user); | 469 restricted_token.GetUser(&user); |
| 470 | 470 |
| 471 CheckRestrictingSid(restricted_token, user, 1); | 471 CheckRestrictingSid(restricted_token, user, 1); |
| 472 } | 472 } |
| 473 | 473 |
| 474 // Tests the method AddRestrictingSidCurrentUser with a custom effective token. | 474 // Tests the method AddRestrictingSidCurrentUser with a custom effective token. |
| 475 TEST(RestrictedTokenTest, AddRestrictingSidCurrentUserCustom) { | 475 TEST(RestrictedTokenTest, AddRestrictingSidCurrentUserCustom) { |
| 476 // Get the current process token. | 476 // Get the current process token. |
| 477 HANDLE access_handle = INVALID_HANDLE_VALUE; | 477 HANDLE token_handle = INVALID_HANDLE_VALUE; |
| 478 ASSERT_TRUE(::OpenProcessToken(::GetCurrentProcess(), TOKEN_ALL_ACCESS, | 478 ASSERT_TRUE(::OpenProcessToken(::GetCurrentProcess(), TOKEN_ALL_ACCESS, |
| 479 &access_handle)); | 479 &token_handle)); |
| 480 | 480 |
| 481 ASSERT_NE(INVALID_HANDLE_VALUE, access_handle); | 481 ASSERT_NE(INVALID_HANDLE_VALUE, token_handle); |
| 482 | 482 |
| 483 ATL::CAccessToken access_token; | 483 ATL::CAccessToken access_token; |
| 484 access_token.Attach(access_handle); | 484 access_token.Attach(token_handle); |
| 485 | 485 |
| 486 RestrictedToken token; | 486 RestrictedToken token; |
| 487 base::win::ScopedHandle token_handle; | |
| 488 ASSERT_EQ(ERROR_SUCCESS, token.Init(access_token.GetHandle())); | 487 ASSERT_EQ(ERROR_SUCCESS, token.Init(access_token.GetHandle())); |
| 489 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidCurrentUser()); | 488 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidCurrentUser()); |
| 490 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 489 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 491 | 490 |
| 492 ATL::CAccessToken restricted_token; | 491 ATL::CAccessToken restricted_token; |
| 493 restricted_token.Attach(token_handle.Take()); | 492 restricted_token.Attach(token_handle); |
| 494 ATL::CSid user; | 493 ATL::CSid user; |
| 495 restricted_token.GetUser(&user); | 494 restricted_token.GetUser(&user); |
| 496 | 495 |
| 497 CheckRestrictingSid(restricted_token, user, 1); | 496 CheckRestrictingSid(restricted_token, user, 1); |
| 498 } | 497 } |
| 499 | 498 |
| 500 // Tests the method AddRestrictingSidLogonSession. | 499 // Tests the method AddRestrictingSidLogonSession. |
| 501 TEST(RestrictedTokenTest, AddRestrictingSidLogonSession) { | 500 TEST(RestrictedTokenTest, AddRestrictingSidLogonSession) { |
| 502 RestrictedToken token; | 501 RestrictedToken token; |
| 503 base::win::ScopedHandle token_handle; | 502 HANDLE token_handle = NULL; |
| 504 | 503 |
| 505 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 504 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 506 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidLogonSession()); | 505 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidLogonSession()); |
| 507 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 506 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 508 | 507 |
| 509 ATL::CAccessToken restricted_token; | 508 ATL::CAccessToken restricted_token; |
| 510 restricted_token.Attach(token_handle.Take()); | 509 restricted_token.Attach(token_handle); |
| 511 ATL::CSid session; | 510 ATL::CSid session; |
| 512 restricted_token.GetLogonSid(&session); | 511 restricted_token.GetLogonSid(&session); |
| 513 | 512 |
| 514 CheckRestrictingSid(restricted_token, session, 1); | 513 CheckRestrictingSid(restricted_token, session, 1); |
| 515 } | 514 } |
| 516 | 515 |
| 517 // Tests adding a lot of restricting sids. | 516 // Tests adding a lot of restricting sids. |
| 518 TEST(RestrictedTokenTest, AddMultipleRestrictingSids) { | 517 TEST(RestrictedTokenTest, AddMultipleRestrictingSids) { |
| 519 RestrictedToken token; | 518 RestrictedToken token; |
| 520 base::win::ScopedHandle token_handle; | 519 HANDLE token_handle = NULL; |
| 521 | 520 |
| 522 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 521 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 523 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidCurrentUser()); | 522 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidCurrentUser()); |
| 524 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidLogonSession()); | 523 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidLogonSession()); |
| 525 ASSERT_EQ(ERROR_SUCCESS, | 524 ASSERT_EQ(ERROR_SUCCESS, |
| 526 token.AddRestrictingSid(ATL::Sids::World().GetPSID())); | 525 token.AddRestrictingSid(ATL::Sids::World().GetPSID())); |
| 527 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 526 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 528 | 527 |
| 529 ATL::CAccessToken restricted_token; | 528 ATL::CAccessToken restricted_token; |
| 530 restricted_token.Attach(token_handle.Take()); | 529 restricted_token.Attach(token_handle); |
| 531 ATL::CSid session; | 530 ATL::CSid session; |
| 532 restricted_token.GetLogonSid(&session); | 531 restricted_token.GetLogonSid(&session); |
| 533 | 532 |
| 534 DWORD length = 8192; | 533 DWORD length = 8192; |
| 535 BYTE *memory = new BYTE[length]; | 534 BYTE *memory = new BYTE[length]; |
| 536 TOKEN_GROUPS *groups = reinterpret_cast<TOKEN_GROUPS*>(memory); | 535 TOKEN_GROUPS *groups = reinterpret_cast<TOKEN_GROUPS*>(memory); |
| 537 ASSERT_TRUE(::GetTokenInformation(restricted_token.GetHandle(), | 536 ASSERT_TRUE(::GetTokenInformation(restricted_token.GetHandle(), |
| 538 TokenRestrictedSids, | 537 TokenRestrictedSids, |
| 539 groups, | 538 groups, |
| 540 length, | 539 length, |
| 541 &length)); | 540 &length)); |
| 542 | 541 |
| 543 ATL::CTokenGroups atl_groups(*groups); | 542 ATL::CTokenGroups atl_groups(*groups); |
| 544 delete[] memory; | 543 delete[] memory; |
| 545 | 544 |
| 546 ASSERT_EQ(3, atl_groups.GetCount()); | 545 ASSERT_EQ(3, atl_groups.GetCount()); |
| 547 } | 546 } |
| 548 | 547 |
| 549 // Tests the method "AddRestrictingSidAllSids". | 548 // Tests the method "AddRestrictingSidAllSids". |
| 550 TEST(RestrictedTokenTest, AddAllSidToRestrictingSids) { | 549 TEST(RestrictedTokenTest, AddAllSidToRestrictingSids) { |
| 551 RestrictedToken token; | 550 RestrictedToken token; |
| 552 base::win::ScopedHandle token_handle; | 551 HANDLE token_handle = NULL; |
| 553 | 552 |
| 554 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 553 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 555 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidAllSids()); | 554 ASSERT_EQ(ERROR_SUCCESS, token.AddRestrictingSidAllSids()); |
| 556 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedToken(&token_handle)); | 555 ASSERT_EQ(ERROR_SUCCESS, token.GetRestrictedTokenHandle(&token_handle)); |
| 557 | 556 |
| 558 ATL::CAccessToken restricted_token; | 557 ATL::CAccessToken restricted_token; |
| 559 restricted_token.Attach(token_handle.Take()); | 558 restricted_token.Attach(token_handle); |
| 560 | 559 |
| 561 ATL::CTokenGroups groups; | 560 ATL::CTokenGroups groups; |
| 562 ASSERT_TRUE(restricted_token.GetGroups(&groups)); | 561 ASSERT_TRUE(restricted_token.GetGroups(&groups)); |
| 563 | 562 |
| 564 ATL::CSid::CSidArray sids; | 563 ATL::CSid::CSidArray sids; |
| 565 ATL::CAtlArray<DWORD> attributes; | 564 ATL::CAtlArray<DWORD> attributes; |
| 566 groups.GetSidsAndAttributes(&sids, &attributes); | 565 groups.GetSidsAndAttributes(&sids, &attributes); |
| 567 | 566 |
| 568 // Verify that all group sids are in the restricting sid list. | 567 // Verify that all group sids are in the restricting sid list. |
| 569 for (unsigned int i = 0; i < sids.GetCount(); i++) { | 568 for (unsigned int i = 0; i < sids.GetCount(); i++) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 580 | 579 |
| 581 // Checks the error code when the object is initialized twice. | 580 // Checks the error code when the object is initialized twice. |
| 582 TEST(RestrictedTokenTest, DoubleInit) { | 581 TEST(RestrictedTokenTest, DoubleInit) { |
| 583 RestrictedToken token; | 582 RestrictedToken token; |
| 584 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); | 583 ASSERT_EQ(ERROR_SUCCESS, token.Init(NULL)); |
| 585 | 584 |
| 586 ASSERT_EQ(ERROR_ALREADY_INITIALIZED, token.Init(NULL)); | 585 ASSERT_EQ(ERROR_ALREADY_INITIALIZED, token.Init(NULL)); |
| 587 } | 586 } |
| 588 | 587 |
| 589 } // namespace sandbox | 588 } // namespace sandbox |
| OLD | NEW |