| Index: sandbox/linux/services/credentials.cc
|
| diff --git a/sandbox/linux/services/credentials.cc b/sandbox/linux/services/credentials.cc
|
| index be03e15ac78382b9280a3610df41b5eed0cac02c..ce5eeda78ed177002b4bb4083d452e4fa6edcf2d 100644
|
| --- a/sandbox/linux/services/credentials.cc
|
| +++ b/sandbox/linux/services/credentials.cc
|
| @@ -22,6 +22,7 @@
|
| #include "base/process/launch.h"
|
| #include "base/template_util.h"
|
| #include "base/third_party/valgrind/valgrind.h"
|
| +#include "sandbox/linux/services/namespace_utils.h"
|
| #include "sandbox/linux/services/syscall_wrappers.h"
|
|
|
| namespace sandbox {
|
| @@ -50,39 +51,6 @@ struct CapTextFreeDeleter {
|
| // Wrapper to manage the result from libcap2's cap_from_text().
|
| typedef scoped_ptr<char, CapTextFreeDeleter> ScopedCapText;
|
|
|
| -struct FILECloser {
|
| - inline void operator()(FILE* f) const {
|
| - DCHECK(f);
|
| - PCHECK(0 == fclose(f));
|
| - }
|
| -};
|
| -
|
| -// Don't use ScopedFILE in base since it doesn't check fclose().
|
| -// TODO(jln): fix base/.
|
| -typedef scoped_ptr<FILE, FILECloser> ScopedFILE;
|
| -
|
| -static_assert((base::is_same<uid_t, gid_t>::value),
|
| - "uid_t and gid_t should be the same type");
|
| -// generic_id_t can be used for either uid_t or gid_t.
|
| -typedef uid_t generic_id_t;
|
| -
|
| -// Write a uid or gid mapping from |id| to |id| in |map_file|.
|
| -bool WriteToIdMapFile(const char* map_file, generic_id_t id) {
|
| - ScopedFILE f(fopen(map_file, "w"));
|
| - PCHECK(f);
|
| - const uid_t inside_id = id;
|
| - const uid_t outside_id = id;
|
| - int num = fprintf(f.get(), "%d %d 1\n", inside_id, outside_id);
|
| - if (num < 0) return false;
|
| - // Manually call fflush() to catch permission failures.
|
| - int ret = fflush(f.get());
|
| - if (ret) {
|
| - VLOG(1) << "Could not write to id map file";
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| // Checks that the set of RES-uids and the set of RES-gids have
|
| // one element each and return that element in |resuid| and |resgid|
|
| // respectively. It's ok to pass NULL as one or both of the ids.
|
| @@ -187,7 +155,7 @@ scoped_ptr<std::string> Credentials::GetCurrentCapString() {
|
| }
|
|
|
| // static
|
| -bool Credentials::SupportsNewUserNS() {
|
| +bool Credentials::CanCreateProcessInNewUserNS() {
|
| // Valgrind will let clone(2) pass-through, but doesn't support unshare(),
|
| // so always consider UserNS unsupported there.
|
| if (IsRunningOnValgrind()) {
|
| @@ -240,8 +208,8 @@ bool Credentials::MoveToNewUserNS() {
|
| DCHECK(GetRESIds(NULL, NULL));
|
| const char kGidMapFile[] = "/proc/self/gid_map";
|
| const char kUidMapFile[] = "/proc/self/uid_map";
|
| - CHECK(WriteToIdMapFile(kGidMapFile, gid));
|
| - CHECK(WriteToIdMapFile(kUidMapFile, uid));
|
| + CHECK(NamespaceUtils::WriteToIdMapFile(kGidMapFile, gid));
|
| + CHECK(NamespaceUtils::WriteToIdMapFile(kUidMapFile, uid));
|
| DCHECK(GetRESIds(NULL, NULL));
|
| return true;
|
| }
|
|
|