| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/files/file_util.h" | 5 #include "base/files/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 <libgen.h> | 10 #include <libgen.h> |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 ThreadRestrictions::AssertIOAllowed(); | 80 ThreadRestrictions::AssertIOAllowed(); |
| 81 return stat64(path, sb); | 81 return stat64(path, sb); |
| 82 } | 82 } |
| 83 static int CallLstat(const char *path, stat_wrapper_t *sb) { | 83 static int CallLstat(const char *path, stat_wrapper_t *sb) { |
| 84 ThreadRestrictions::AssertIOAllowed(); | 84 ThreadRestrictions::AssertIOAllowed(); |
| 85 return lstat64(path, sb); | 85 return lstat64(path, sb); |
| 86 } | 86 } |
| 87 #endif // !(defined(OS_BSD) || defined(OS_MACOSX) || defined(OS_NACL)) | 87 #endif // !(defined(OS_BSD) || defined(OS_MACOSX) || defined(OS_NACL)) |
| 88 | 88 |
| 89 #if !defined(OS_NACL_NONSFI) | 89 #if !defined(OS_NACL_NONSFI) |
| 90 // Helper for NormalizeFilePath(), defined below. | |
| 91 bool RealPath(const FilePath& path, FilePath* real_path) { | |
| 92 ThreadRestrictions::AssertIOAllowed(); // For realpath(). | |
| 93 FilePath::CharType buf[PATH_MAX]; | |
| 94 if (!realpath(path.value().c_str(), buf)) | |
| 95 return false; | |
| 96 | |
| 97 *real_path = FilePath(buf); | |
| 98 return true; | |
| 99 } | |
| 100 | |
| 101 // Helper for VerifyPathControlledByUser. | 90 // Helper for VerifyPathControlledByUser. |
| 102 bool VerifySpecificPathControlledByUser(const FilePath& path, | 91 bool VerifySpecificPathControlledByUser(const FilePath& path, |
| 103 uid_t owner_uid, | 92 uid_t owner_uid, |
| 104 const std::set<gid_t>& group_gids) { | 93 const std::set<gid_t>& group_gids) { |
| 105 stat_wrapper_t stat_info; | 94 stat_wrapper_t stat_info; |
| 106 if (CallLstat(path.value().c_str(), &stat_info) != 0) { | 95 if (CallLstat(path.value().c_str(), &stat_info) != 0) { |
| 107 DPLOG(ERROR) << "Failed to get information on path " | 96 DPLOG(ERROR) << "Failed to get information on path " |
| 108 << path.value(); | 97 << path.value(); |
| 109 return false; | 98 return false; |
| 110 } | 99 } |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 if (!DirectoryExists(*i)) { | 659 if (!DirectoryExists(*i)) { |
| 671 if (error) | 660 if (error) |
| 672 *error = File::OSErrorToFileError(saved_errno); | 661 *error = File::OSErrorToFileError(saved_errno); |
| 673 return false; | 662 return false; |
| 674 } | 663 } |
| 675 } | 664 } |
| 676 return true; | 665 return true; |
| 677 } | 666 } |
| 678 | 667 |
| 679 bool NormalizeFilePath(const FilePath& path, FilePath* normalized_path) { | 668 bool NormalizeFilePath(const FilePath& path, FilePath* normalized_path) { |
| 680 FilePath real_path_result; | 669 FilePath real_path_result = MakeAbsoluteFilePath(path); |
| 681 if (!RealPath(path, &real_path_result)) | 670 if (real_path_result.empty()) |
| 682 return false; | 671 return false; |
| 683 | 672 |
| 684 // To be consistant with windows, fail if |real_path_result| is a | 673 // To be consistant with windows, fail if |real_path_result| is a |
| 685 // directory. | 674 // directory. |
| 686 stat_wrapper_t file_info; | 675 stat_wrapper_t file_info; |
| 687 if (CallStat(real_path_result.value().c_str(), &file_info) != 0 || | 676 if (CallStat(real_path_result.value().c_str(), &file_info) != 0 || |
| 688 S_ISDIR(file_info.st_mode)) | 677 S_ISDIR(file_info.st_mode)) |
| 689 return false; | 678 return false; |
| 690 | 679 |
| 691 *normalized_path = real_path_result; | 680 *normalized_path = real_path_result; |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1019 return false; | 1008 return false; |
| 1020 | 1009 |
| 1021 DeleteFile(from_path, true); | 1010 DeleteFile(from_path, true); |
| 1022 return true; | 1011 return true; |
| 1023 } | 1012 } |
| 1024 | 1013 |
| 1025 } // namespace internal | 1014 } // namespace internal |
| 1026 | 1015 |
| 1027 #endif // !defined(OS_NACL_NONSFI) | 1016 #endif // !defined(OS_NACL_NONSFI) |
| 1028 } // namespace base | 1017 } // namespace base |
| OLD | NEW |