Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/file_util.h" | 5 #include "base/file_util.h" |
| 6 | 6 |
| 7 #include <dirent.h> | 7 #include <dirent.h> |
| 8 #include <errno.h> | 8 #include <errno.h> |
| 9 #include <fcntl.h> | 9 #include <fcntl.h> |
| 10 #include <fnmatch.h> | 10 #include <fnmatch.h> |
| (...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 933 | 933 |
| 934 if (HANDLE_EINTR(close(infile)) < 0) | 934 if (HANDLE_EINTR(close(infile)) < 0) |
| 935 result = false; | 935 result = false; |
| 936 if (HANDLE_EINTR(close(outfile)) < 0) | 936 if (HANDLE_EINTR(close(outfile)) < 0) |
| 937 result = false; | 937 result = false; |
| 938 | 938 |
| 939 return result; | 939 return result; |
| 940 } | 940 } |
| 941 #endif // defined(OS_MACOSX) | 941 #endif // defined(OS_MACOSX) |
| 942 | 942 |
| 943 bool IsPathControlledByUser(const FilePath& base, | |
| 944 const FilePath& path, | |
| 945 uid_t owner_uid) { | |
| 946 if (path == base) | |
|
Mark Mentovai
2011/08/25 14:15:49
This scheme seems to provide absolutely no way to
Sam Kerner (Chrome)
2011/08/26 19:59:15
Changed the test to include the base path, sop tha
| |
| 947 return true; | |
| 948 | |
| 949 if (!IsPathControlledByUser(base, path.DirName(), owner_uid)) | |
| 950 return false; | |
| 951 | |
| 952 stat_wrapper_t stat_info; | |
| 953 if (CallStat(path.value().c_str(), &stat_info) != 0) { | |
| 954 PLOG(ERROR) << "Failed to get information on path " << path.value(); | |
| 955 return false; | |
| 956 } | |
| 957 | |
| 958 if (stat_info.st_uid != owner_uid) { | |
|
TVL
2011/08/25 14:07:28
what happens if any segment is a link? does that
Sam Kerner (Chrome)
2011/08/26 19:59:15
Good point. Links are now forbidden.
| |
| 959 LOG(ERROR) << "Path " << path.value() | |
| 960 << " is owned by the wrong user."; | |
| 961 return false; | |
| 962 } | |
| 963 | |
| 964 if (stat_info.st_mode & S_IWOTH) { | |
| 965 LOG(ERROR) << "Path "<< path.value() << " is writable by any user."; | |
| 966 return false; | |
| 967 } | |
| 968 | |
| 969 return true; | |
|
TVL
2011/08/25 14:07:28
the group permissions could still be a issue, but
Sam Kerner (Chrome)
2011/08/26 19:59:15
Hardcoded check for the group named "admin".
| |
| 970 } | |
| 971 | |
| 972 bool IsPathControlledByAdmin(const FilePath& path) { | |
| 973 const unsigned kRootUid = 0; | |
| 974 const FilePath kFileSystemRoot("/"); | |
| 975 return IsPathControlledByUser(kFileSystemRoot, path, kRootUid); | |
| 976 } | |
| 977 | |
| 943 } // namespace file_util | 978 } // namespace file_util |
| OLD | NEW |