Index: sandbox/win/src/app_container.cc |
diff --git a/sandbox/win/src/app_container.cc b/sandbox/win/src/app_container.cc |
deleted file mode 100644 |
index a51f09208239e87f45ce98d8e0c5fc2d2a480118..0000000000000000000000000000000000000000 |
--- a/sandbox/win/src/app_container.cc |
+++ /dev/null |
@@ -1,184 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "sandbox/win/src/app_container.h" |
- |
-#include <Sddl.h> |
-#include <stddef.h> |
-#include <vector> |
- |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/win/startup_information.h" |
-#include "sandbox/win/src/internal_types.h" |
- |
-namespace { |
- |
-// Converts the passed in sid string to a PSID that must be relased with |
-// LocalFree. |
-PSID ConvertSid(const base::string16& sid) { |
- PSID local_sid; |
- if (!ConvertStringSidToSid(sid.c_str(), &local_sid)) |
- return NULL; |
- return local_sid; |
-} |
- |
-template <typename T> |
-T BindFunction(const char* name) { |
- HMODULE module = GetModuleHandle(sandbox::kKerneldllName); |
- void* function = GetProcAddress(module, name); |
- if (!function) { |
- module = GetModuleHandle(sandbox::kKernelBasedllName); |
- function = GetProcAddress(module, name); |
- } |
- return reinterpret_cast<T>(function); |
-} |
- |
-} // namespace |
- |
-namespace sandbox { |
- |
-AppContainerAttributes::AppContainerAttributes() { |
- memset(&capabilities_, 0, sizeof(capabilities_)); |
-} |
- |
-AppContainerAttributes::~AppContainerAttributes() { |
- for (size_t i = 0; i < attributes_.size(); i++) |
- LocalFree(attributes_[i].Sid); |
- LocalFree(capabilities_.AppContainerSid); |
-} |
- |
-ResultCode AppContainerAttributes::SetAppContainer( |
- const base::string16& app_container_sid, |
- const std::vector<base::string16>& capabilities) { |
- DCHECK(!capabilities_.AppContainerSid); |
- DCHECK(attributes_.empty()); |
- capabilities_.AppContainerSid = ConvertSid(app_container_sid); |
- if (!capabilities_.AppContainerSid) |
- return SBOX_ERROR_INVALID_APP_CONTAINER; |
- |
- for (size_t i = 0; i < capabilities.size(); i++) { |
- SID_AND_ATTRIBUTES sid_and_attributes; |
- sid_and_attributes.Sid = ConvertSid(capabilities[i]); |
- if (!sid_and_attributes.Sid) |
- return SBOX_ERROR_INVALID_CAPABILITY; |
- |
- sid_and_attributes.Attributes = SE_GROUP_ENABLED; |
- attributes_.push_back(sid_and_attributes); |
- } |
- |
- if (capabilities.size()) { |
- capabilities_.CapabilityCount = static_cast<DWORD>(capabilities.size()); |
- capabilities_.Capabilities = &attributes_[0]; |
- } |
- return SBOX_ALL_OK; |
-} |
- |
-ResultCode AppContainerAttributes::ShareForStartup( |
- base::win::StartupInformation* startup_information) const { |
- // The only thing we support so far is an AppContainer. |
- if (!capabilities_.AppContainerSid) |
- return SBOX_ERROR_INVALID_APP_CONTAINER; |
- |
- if (!startup_information->UpdateProcThreadAttribute( |
- PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES, |
- const_cast<SECURITY_CAPABILITIES*>(&capabilities_), |
- sizeof(capabilities_))) { |
- DPLOG(ERROR) << "Failed UpdateProcThreadAttribute"; |
- return SBOX_ERROR_CANNOT_INIT_APPCONTAINER; |
- } |
- return SBOX_ALL_OK; |
-} |
- |
-bool AppContainerAttributes::HasAppContainer() const { |
- return (capabilities_.AppContainerSid != NULL); |
-} |
- |
-ResultCode CreateAppContainer(const base::string16& sid, |
- const base::string16& name) { |
- PSID local_sid; |
- if (!ConvertStringSidToSid(sid.c_str(), &local_sid)) |
- return SBOX_ERROR_INVALID_APP_CONTAINER; |
- |
- typedef HRESULT (WINAPI* AppContainerRegisterSidPtr)(PSID sid, |
- LPCWSTR moniker, |
- LPCWSTR display_name); |
- static AppContainerRegisterSidPtr AppContainerRegisterSid = NULL; |
- |
- if (!AppContainerRegisterSid) { |
- AppContainerRegisterSid = |
- BindFunction<AppContainerRegisterSidPtr>("AppContainerRegisterSid"); |
- } |
- |
- ResultCode operation_result = SBOX_ERROR_GENERIC; |
- if (AppContainerRegisterSid) { |
- HRESULT rv = AppContainerRegisterSid(local_sid, name.c_str(), name.c_str()); |
- if (SUCCEEDED(rv)) |
- operation_result = SBOX_ALL_OK; |
- else |
- DLOG(ERROR) << "AppContainerRegisterSid error:" << std::hex << rv; |
- } |
- LocalFree(local_sid); |
- return operation_result; |
-} |
- |
-ResultCode DeleteAppContainer(const base::string16& sid) { |
- PSID local_sid; |
- if (!ConvertStringSidToSid(sid.c_str(), &local_sid)) |
- return SBOX_ERROR_INVALID_APP_CONTAINER; |
- |
- typedef HRESULT (WINAPI* AppContainerUnregisterSidPtr)(PSID sid); |
- static AppContainerUnregisterSidPtr AppContainerUnregisterSid = NULL; |
- |
- if (!AppContainerUnregisterSid) { |
- AppContainerUnregisterSid = |
- BindFunction<AppContainerUnregisterSidPtr>("AppContainerUnregisterSid"); |
- } |
- |
- ResultCode operation_result = SBOX_ERROR_GENERIC; |
- if (AppContainerUnregisterSid) { |
- HRESULT rv = AppContainerUnregisterSid(local_sid); |
- if (SUCCEEDED(rv)) |
- operation_result = SBOX_ALL_OK; |
- else |
- DLOG(ERROR) << "AppContainerUnregisterSid error:" << std::hex << rv; |
- } |
- LocalFree(local_sid); |
- return operation_result; |
-} |
- |
-base::string16 LookupAppContainer(const base::string16& sid) { |
- PSID local_sid; |
- if (!ConvertStringSidToSid(sid.c_str(), &local_sid)) |
- return base::string16(); |
- |
- typedef HRESULT (WINAPI* AppContainerLookupMonikerPtr)(PSID sid, |
- LPWSTR* moniker); |
- typedef BOOLEAN (WINAPI* AppContainerFreeMemoryPtr)(void* ptr); |
- |
- static AppContainerLookupMonikerPtr AppContainerLookupMoniker = NULL; |
- static AppContainerFreeMemoryPtr AppContainerFreeMemory = NULL; |
- |
- if (!AppContainerLookupMoniker || !AppContainerFreeMemory) { |
- AppContainerLookupMoniker = |
- BindFunction<AppContainerLookupMonikerPtr>("AppContainerLookupMoniker"); |
- AppContainerFreeMemory = |
- BindFunction<AppContainerFreeMemoryPtr>("AppContainerFreeMemory"); |
- } |
- |
- if (!AppContainerLookupMoniker || !AppContainerFreeMemory) |
- return base::string16(); |
- |
- wchar_t* buffer = NULL; |
- HRESULT rv = AppContainerLookupMoniker(local_sid, &buffer); |
- if (FAILED(rv)) |
- return base::string16(); |
- |
- base::string16 name(buffer); |
- if (!AppContainerFreeMemory(buffer)) |
- NOTREACHED(); |
- return name; |
-} |
- |
-} // namespace sandbox |