mirror of
https://github.com/chromium/crashpad.git
synced 2025-01-06 11:22:42 +08:00
5b83e58771
ConvertStringSecurityDescriptorToSecurityDescriptor() is used when creating the initial connection pipe. Because this is done from inside DllMain(), we cannot use advapi32 (where this function is). Instead, save the binary representation of the self-relative SECURITY_DESCRIPTOR. It is conceivable that this could change, but unlikely as this is the same blob that would be stored on a file in NTFS. Another potential approach would be to not make the pipe available to all integrity levels here, and instead modify the Chromium sandbox code to allow a specific pipe name prefix that would have to correspond with the pipe name that Crashpad creates. Similarly, UuidCreate() (used when initializing the database) is in a DLL that can't be loaded early, so use the Linux/Android implementation on Windows too. R=mark@chromium.org BUG=chromium:655788,chromium:656800 Change-Id: I434f8e96fc275fc30d0a31208b025bfc08595ff9 Reviewed-on: https://chromium-review.googlesource.com/417223 Reviewed-by: Mark Mentovai <mark@chromium.org>
54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
// Copyright 2016 The Crashpad Authors. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "util/win/registration_protocol_win.h"
|
|
|
|
#include <windows.h>
|
|
#include <sddl.h>
|
|
#include <string.h>
|
|
|
|
#include "gtest/gtest.h"
|
|
#include "test/errors.h"
|
|
#include "util/win/scoped_local_alloc.h"
|
|
|
|
namespace crashpad {
|
|
namespace test {
|
|
namespace {
|
|
|
|
TEST(SecurityDescriptor, MatchesAdvapi32) {
|
|
// This security descriptor is built manually in the connection code to avoid
|
|
// calling the advapi32 functions. Verify that it returns the same thing as
|
|
// ConvertStringSecurityDescriptorToSecurityDescriptor() would.
|
|
|
|
// Mandatory Label, no ACE flags, no ObjectType, integrity level
|
|
// untrusted.
|
|
const wchar_t kSddl[] = L"S:(ML;;;;;S-1-16-0)";
|
|
PSECURITY_DESCRIPTOR sec_desc;
|
|
ULONG sec_desc_len;
|
|
ASSERT_TRUE(ConvertStringSecurityDescriptorToSecurityDescriptor(
|
|
kSddl, SDDL_REVISION_1, &sec_desc, &sec_desc_len))
|
|
<< ErrorMessage("ConvertStringSecurityDescriptorToSecurityDescriptor");
|
|
ScopedLocalAlloc sec_desc_owner(sec_desc);
|
|
|
|
size_t created_len;
|
|
const void* const created =
|
|
GetSecurityDescriptorForNamedPipeInstance(&created_len);
|
|
ASSERT_EQ(sec_desc_len, created_len);
|
|
EXPECT_EQ(0, memcmp(sec_desc, created, sec_desc_len));
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace test
|
|
} // namespace crashpad
|