OLD | NEW |
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 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 #include "components/policy/core/common/policy_loader_win.h" | 5 #include "components/policy/core/common/policy_loader_win.h" |
6 | 6 |
7 #include <windows.h> | 7 #include <windows.h> |
8 #include <lm.h> // For limits. | |
9 #include <ntdsapi.h> // For Ds[Un]Bind | 8 #include <ntdsapi.h> // For Ds[Un]Bind |
10 #include <rpc.h> // For struct GUID | 9 #include <rpc.h> // For struct GUID |
11 #include <shlwapi.h> // For PathIsUNC() | 10 #include <shlwapi.h> // For PathIsUNC() |
12 #include <stddef.h> | 11 #include <stddef.h> |
13 #include <userenv.h> // For GPO functions | 12 #include <userenv.h> // For GPO functions |
14 | 13 |
15 #include <memory> | 14 #include <memory> |
16 #include <string> | 15 #include <string> |
17 #include <vector> | 16 #include <vector> |
18 | 17 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 GUID kRegistrySettingsCSEGUID = REGISTRY_EXTENSION_GUID; | 87 GUID kRegistrySettingsCSEGUID = REGISTRY_EXTENSION_GUID; |
89 #pragma warning(pop) | 88 #pragma warning(pop) |
90 | 89 |
91 // The list of possible errors that can occur while collecting information about | 90 // The list of possible errors that can occur while collecting information about |
92 // the current enterprise environment. | 91 // the current enterprise environment. |
93 // This enum is used to define the buckets for an enumerated UMA histogram. | 92 // This enum is used to define the buckets for an enumerated UMA histogram. |
94 // Hence, | 93 // Hence, |
95 // (a) existing enumerated constants should never be deleted or reordered, and | 94 // (a) existing enumerated constants should never be deleted or reordered, and |
96 // (b) new constants should only be appended at the end of the enumeration. | 95 // (b) new constants should only be appended at the end of the enumeration. |
97 enum DomainCheckErrors { | 96 enum DomainCheckErrors { |
98 DOMAIN_CHECK_ERROR_GET_JOIN_INFO = 0, | 97 // The check error below is no longer possible. |
| 98 DEPRECATED_DOMAIN_CHECK_ERROR_GET_JOIN_INFO = 0, |
99 DOMAIN_CHECK_ERROR_DS_BIND = 1, | 99 DOMAIN_CHECK_ERROR_DS_BIND = 1, |
100 DOMAIN_CHECK_ERROR_SIZE, // Not a DomainCheckError. Must be last. | 100 DOMAIN_CHECK_ERROR_SIZE, // Not a DomainCheckError. Must be last. |
101 }; | 101 }; |
102 | 102 |
103 // If the LBS extension is found and contains a schema in the registry then this | 103 // If the LBS extension is found and contains a schema in the registry then this |
104 // function is used to patch it, and make it compliant. The fix is to | 104 // function is used to patch it, and make it compliant. The fix is to |
105 // add an "items" attribute to lists that don't declare it. | 105 // add an "items" attribute to lists that don't declare it. |
106 std::string PatchSchema(const std::string& schema) { | 106 std::string PatchSchema(const std::string& schema) { |
107 base::JSONParserOptions options = base::JSON_PARSE_RFC; | 107 base::JSONParserOptions options = base::JSON_PARSE_RFC; |
108 std::unique_ptr<base::Value> json = base::JSONReader::Read(schema, options); | 108 std::unique_ptr<base::Value> json = base::JSONReader::Read(schema, options); |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 } | 327 } |
328 | 328 |
329 // Collects stats about the enterprise environment that can be used to decide | 329 // Collects stats about the enterprise environment that can be used to decide |
330 // how to parse the existing policy information. | 330 // how to parse the existing policy information. |
331 void CollectEnterpriseUMAs() { | 331 void CollectEnterpriseUMAs() { |
332 // Collect statistics about the windows suite. | 332 // Collect statistics about the windows suite. |
333 UMA_HISTOGRAM_ENUMERATION("EnterpriseCheck.OSType", | 333 UMA_HISTOGRAM_ENUMERATION("EnterpriseCheck.OSType", |
334 base::win::OSInfo::GetInstance()->version_type(), | 334 base::win::OSInfo::GetInstance()->version_type(), |
335 base::win::SUITE_LAST); | 335 base::win::SUITE_LAST); |
336 | 336 |
337 // Get the computer's domain status. | 337 bool in_domain = base::win::IsEnrolledToDomain(); |
338 LPWSTR domain; | |
339 NETSETUP_JOIN_STATUS join_status; | |
340 if (NERR_Success != ::NetGetJoinInformation(NULL, &domain, &join_status)) { | |
341 UMA_HISTOGRAM_ENUMERATION("EnterpriseCheck.DomainCheckFailed", | |
342 DOMAIN_CHECK_ERROR_GET_JOIN_INFO, | |
343 DOMAIN_CHECK_ERROR_SIZE); | |
344 return; | |
345 } | |
346 ::NetApiBufferFree(domain); | |
347 | |
348 bool in_domain = join_status == NetSetupDomainName; | |
349 UMA_HISTOGRAM_BOOLEAN("EnterpriseCheck.InDomain", in_domain); | 338 UMA_HISTOGRAM_BOOLEAN("EnterpriseCheck.InDomain", in_domain); |
350 if (in_domain) { | 339 if (in_domain) { |
351 // This check will tell us how often are domain computers actually | 340 // This check will tell us how often are domain computers actually |
352 // connected to the enterprise network while Chrome is running. | 341 // connected to the enterprise network while Chrome is running. |
353 HANDLE server_bind; | 342 HANDLE server_bind; |
354 if (ERROR_SUCCESS == ::DsBind(NULL, NULL, &server_bind)) { | 343 if (ERROR_SUCCESS == ::DsBind(NULL, NULL, &server_bind)) { |
355 UMA_HISTOGRAM_COUNTS("EnterpriseCheck.DomainBindSucceeded", 1); | 344 UMA_HISTOGRAM_COUNTS("EnterpriseCheck.DomainBindSucceeded", 1); |
356 ::DsUnBind(&server_bind); | 345 ::DsUnBind(&server_bind); |
357 } else { | 346 } else { |
358 UMA_HISTOGRAM_ENUMERATION("EnterpriseCheck.DomainCheckFailed", | 347 UMA_HISTOGRAM_ENUMERATION("EnterpriseCheck.DomainCheckFailed", |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 | 674 |
686 void PolicyLoaderWin::OnObjectSignaled(HANDLE object) { | 675 void PolicyLoaderWin::OnObjectSignaled(HANDLE object) { |
687 DCHECK(object == user_policy_changed_event_.handle() || | 676 DCHECK(object == user_policy_changed_event_.handle() || |
688 object == machine_policy_changed_event_.handle()) | 677 object == machine_policy_changed_event_.handle()) |
689 << "unexpected object signaled policy reload, obj = " | 678 << "unexpected object signaled policy reload, obj = " |
690 << std::showbase << std::hex << object; | 679 << std::showbase << std::hex << object; |
691 Reload(false); | 680 Reload(false); |
692 } | 681 } |
693 | 682 |
694 } // namespace policy | 683 } // namespace policy |
OLD | NEW |