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; |
} |