| 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 "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <windows.h> | 8 #include <windows.h> |
| 9 #include <shellapi.h> | 9 #include <shellapi.h> |
| 10 #include <shlobj.h> | 10 #include <shlobj.h> |
| (...skipping 2109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2120 std::set<gid_t> ok_gids_; | 2120 std::set<gid_t> ok_gids_; |
| 2121 std::set<gid_t> bad_gids_; | 2121 std::set<gid_t> bad_gids_; |
| 2122 }; | 2122 }; |
| 2123 | 2123 |
| 2124 TEST_F(VerifyPathControlledByUserTest, BadPaths) { | 2124 TEST_F(VerifyPathControlledByUserTest, BadPaths) { |
| 2125 // File does not exist. | 2125 // File does not exist. |
| 2126 FilePath does_not_exist = base_dir_.AppendASCII("does") | 2126 FilePath does_not_exist = base_dir_.AppendASCII("does") |
| 2127 .AppendASCII("not") | 2127 .AppendASCII("not") |
| 2128 .AppendASCII("exist"); | 2128 .AppendASCII("exist"); |
| 2129 EXPECT_FALSE( | 2129 EXPECT_FALSE( |
| 2130 file_util::VerifyPathControlledByUser( | 2130 base::VerifyPathControlledByUser( |
| 2131 base_dir_, does_not_exist, uid_, ok_gids_)); | 2131 base_dir_, does_not_exist, uid_, ok_gids_)); |
| 2132 | 2132 |
| 2133 // |base| not a subpath of |path|. | 2133 // |base| not a subpath of |path|. |
| 2134 EXPECT_FALSE( | 2134 EXPECT_FALSE( |
| 2135 file_util::VerifyPathControlledByUser( | 2135 base::VerifyPathControlledByUser( |
| 2136 sub_dir_, base_dir_, uid_, ok_gids_)); | 2136 sub_dir_, base_dir_, uid_, ok_gids_)); |
| 2137 | 2137 |
| 2138 // An empty base path will fail to be a prefix for any path. | 2138 // An empty base path will fail to be a prefix for any path. |
| 2139 FilePath empty; | 2139 FilePath empty; |
| 2140 EXPECT_FALSE( | 2140 EXPECT_FALSE( |
| 2141 file_util::VerifyPathControlledByUser( | 2141 base::VerifyPathControlledByUser( |
| 2142 empty, base_dir_, uid_, ok_gids_)); | 2142 empty, base_dir_, uid_, ok_gids_)); |
| 2143 | 2143 |
| 2144 // Finding that a bad call fails proves nothing unless a good call succeeds. | 2144 // Finding that a bad call fails proves nothing unless a good call succeeds. |
| 2145 EXPECT_TRUE( | 2145 EXPECT_TRUE( |
| 2146 file_util::VerifyPathControlledByUser( | 2146 base::VerifyPathControlledByUser( |
| 2147 base_dir_, sub_dir_, uid_, ok_gids_)); | 2147 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2148 } | 2148 } |
| 2149 | 2149 |
| 2150 TEST_F(VerifyPathControlledByUserTest, Symlinks) { | 2150 TEST_F(VerifyPathControlledByUserTest, Symlinks) { |
| 2151 // Symlinks in the path should cause failure. | 2151 // Symlinks in the path should cause failure. |
| 2152 | 2152 |
| 2153 // Symlink to the file at the end of the path. | 2153 // Symlink to the file at the end of the path. |
| 2154 FilePath file_link = base_dir_.AppendASCII("file_link"); | 2154 FilePath file_link = base_dir_.AppendASCII("file_link"); |
| 2155 ASSERT_TRUE(CreateSymbolicLink(text_file_, file_link)) | 2155 ASSERT_TRUE(CreateSymbolicLink(text_file_, file_link)) |
| 2156 << "Failed to create symlink."; | 2156 << "Failed to create symlink."; |
| 2157 | 2157 |
| 2158 EXPECT_FALSE( | 2158 EXPECT_FALSE( |
| 2159 file_util::VerifyPathControlledByUser( | 2159 base::VerifyPathControlledByUser( |
| 2160 base_dir_, file_link, uid_, ok_gids_)); | 2160 base_dir_, file_link, uid_, ok_gids_)); |
| 2161 EXPECT_FALSE( | 2161 EXPECT_FALSE( |
| 2162 file_util::VerifyPathControlledByUser( | 2162 base::VerifyPathControlledByUser( |
| 2163 file_link, file_link, uid_, ok_gids_)); | 2163 file_link, file_link, uid_, ok_gids_)); |
| 2164 | 2164 |
| 2165 // Symlink from one directory to another within the path. | 2165 // Symlink from one directory to another within the path. |
| 2166 FilePath link_to_sub_dir = base_dir_.AppendASCII("link_to_sub_dir"); | 2166 FilePath link_to_sub_dir = base_dir_.AppendASCII("link_to_sub_dir"); |
| 2167 ASSERT_TRUE(CreateSymbolicLink(sub_dir_, link_to_sub_dir)) | 2167 ASSERT_TRUE(CreateSymbolicLink(sub_dir_, link_to_sub_dir)) |
| 2168 << "Failed to create symlink."; | 2168 << "Failed to create symlink."; |
| 2169 | 2169 |
| 2170 FilePath file_path_with_link = link_to_sub_dir.AppendASCII("file.txt"); | 2170 FilePath file_path_with_link = link_to_sub_dir.AppendASCII("file.txt"); |
| 2171 ASSERT_TRUE(PathExists(file_path_with_link)); | 2171 ASSERT_TRUE(PathExists(file_path_with_link)); |
| 2172 | 2172 |
| 2173 EXPECT_FALSE( | 2173 EXPECT_FALSE( |
| 2174 file_util::VerifyPathControlledByUser( | 2174 base::VerifyPathControlledByUser( |
| 2175 base_dir_, file_path_with_link, uid_, ok_gids_)); | 2175 base_dir_, file_path_with_link, uid_, ok_gids_)); |
| 2176 | 2176 |
| 2177 EXPECT_FALSE( | 2177 EXPECT_FALSE( |
| 2178 file_util::VerifyPathControlledByUser( | 2178 base::VerifyPathControlledByUser( |
| 2179 link_to_sub_dir, file_path_with_link, uid_, ok_gids_)); | 2179 link_to_sub_dir, file_path_with_link, uid_, ok_gids_)); |
| 2180 | 2180 |
| 2181 // Symlinks in parents of base path are allowed. | 2181 // Symlinks in parents of base path are allowed. |
| 2182 EXPECT_TRUE( | 2182 EXPECT_TRUE( |
| 2183 file_util::VerifyPathControlledByUser( | 2183 base::VerifyPathControlledByUser( |
| 2184 file_path_with_link, file_path_with_link, uid_, ok_gids_)); | 2184 file_path_with_link, file_path_with_link, uid_, ok_gids_)); |
| 2185 } | 2185 } |
| 2186 | 2186 |
| 2187 TEST_F(VerifyPathControlledByUserTest, OwnershipChecks) { | 2187 TEST_F(VerifyPathControlledByUserTest, OwnershipChecks) { |
| 2188 // Get a uid that is not the uid of files we create. | 2188 // Get a uid that is not the uid of files we create. |
| 2189 uid_t bad_uid = uid_ + 1; | 2189 uid_t bad_uid = uid_ + 1; |
| 2190 | 2190 |
| 2191 // Make all files and directories non-world-writable. | 2191 // Make all files and directories non-world-writable. |
| 2192 ASSERT_NO_FATAL_FAILURE( | 2192 ASSERT_NO_FATAL_FAILURE( |
| 2193 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH)); | 2193 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH)); |
| 2194 ASSERT_NO_FATAL_FAILURE( | 2194 ASSERT_NO_FATAL_FAILURE( |
| 2195 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH)); | 2195 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH)); |
| 2196 ASSERT_NO_FATAL_FAILURE( | 2196 ASSERT_NO_FATAL_FAILURE( |
| 2197 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH)); | 2197 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH)); |
| 2198 | 2198 |
| 2199 // We control these paths. | 2199 // We control these paths. |
| 2200 EXPECT_TRUE( | 2200 EXPECT_TRUE( |
| 2201 file_util::VerifyPathControlledByUser( | 2201 base::VerifyPathControlledByUser( |
| 2202 base_dir_, sub_dir_, uid_, ok_gids_)); | 2202 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2203 EXPECT_TRUE( | 2203 EXPECT_TRUE( |
| 2204 file_util::VerifyPathControlledByUser( | 2204 base::VerifyPathControlledByUser( |
| 2205 base_dir_, text_file_, uid_, ok_gids_)); | 2205 base_dir_, text_file_, uid_, ok_gids_)); |
| 2206 EXPECT_TRUE( | 2206 EXPECT_TRUE( |
| 2207 file_util::VerifyPathControlledByUser( | 2207 base::VerifyPathControlledByUser( |
| 2208 sub_dir_, text_file_, uid_, ok_gids_)); | 2208 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2209 | 2209 |
| 2210 // Another user does not control these paths. | 2210 // Another user does not control these paths. |
| 2211 EXPECT_FALSE( | 2211 EXPECT_FALSE( |
| 2212 file_util::VerifyPathControlledByUser( | 2212 base::VerifyPathControlledByUser( |
| 2213 base_dir_, sub_dir_, bad_uid, ok_gids_)); | 2213 base_dir_, sub_dir_, bad_uid, ok_gids_)); |
| 2214 EXPECT_FALSE( | 2214 EXPECT_FALSE( |
| 2215 file_util::VerifyPathControlledByUser( | 2215 base::VerifyPathControlledByUser( |
| 2216 base_dir_, text_file_, bad_uid, ok_gids_)); | 2216 base_dir_, text_file_, bad_uid, ok_gids_)); |
| 2217 EXPECT_FALSE( | 2217 EXPECT_FALSE( |
| 2218 file_util::VerifyPathControlledByUser( | 2218 base::VerifyPathControlledByUser( |
| 2219 sub_dir_, text_file_, bad_uid, ok_gids_)); | 2219 sub_dir_, text_file_, bad_uid, ok_gids_)); |
| 2220 | 2220 |
| 2221 // Another group does not control the paths. | 2221 // Another group does not control the paths. |
| 2222 EXPECT_FALSE( | 2222 EXPECT_FALSE( |
| 2223 file_util::VerifyPathControlledByUser( | 2223 base::VerifyPathControlledByUser( |
| 2224 base_dir_, sub_dir_, uid_, bad_gids_)); | 2224 base_dir_, sub_dir_, uid_, bad_gids_)); |
| 2225 EXPECT_FALSE( | 2225 EXPECT_FALSE( |
| 2226 file_util::VerifyPathControlledByUser( | 2226 base::VerifyPathControlledByUser( |
| 2227 base_dir_, text_file_, uid_, bad_gids_)); | 2227 base_dir_, text_file_, uid_, bad_gids_)); |
| 2228 EXPECT_FALSE( | 2228 EXPECT_FALSE( |
| 2229 file_util::VerifyPathControlledByUser( | 2229 base::VerifyPathControlledByUser( |
| 2230 sub_dir_, text_file_, uid_, bad_gids_)); | 2230 sub_dir_, text_file_, uid_, bad_gids_)); |
| 2231 } | 2231 } |
| 2232 | 2232 |
| 2233 TEST_F(VerifyPathControlledByUserTest, GroupWriteTest) { | 2233 TEST_F(VerifyPathControlledByUserTest, GroupWriteTest) { |
| 2234 // Make all files and directories writable only by their owner. | 2234 // Make all files and directories writable only by their owner. |
| 2235 ASSERT_NO_FATAL_FAILURE( | 2235 ASSERT_NO_FATAL_FAILURE( |
| 2236 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH|S_IWGRP)); | 2236 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH|S_IWGRP)); |
| 2237 ASSERT_NO_FATAL_FAILURE( | 2237 ASSERT_NO_FATAL_FAILURE( |
| 2238 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH|S_IWGRP)); | 2238 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH|S_IWGRP)); |
| 2239 ASSERT_NO_FATAL_FAILURE( | 2239 ASSERT_NO_FATAL_FAILURE( |
| 2240 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH|S_IWGRP)); | 2240 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH|S_IWGRP)); |
| 2241 | 2241 |
| 2242 // Any group is okay because the path is not group-writable. | 2242 // Any group is okay because the path is not group-writable. |
| 2243 EXPECT_TRUE( | 2243 EXPECT_TRUE( |
| 2244 file_util::VerifyPathControlledByUser( | 2244 base::VerifyPathControlledByUser( |
| 2245 base_dir_, sub_dir_, uid_, ok_gids_)); | 2245 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2246 EXPECT_TRUE( | 2246 EXPECT_TRUE( |
| 2247 file_util::VerifyPathControlledByUser( | 2247 base::VerifyPathControlledByUser( |
| 2248 base_dir_, text_file_, uid_, ok_gids_)); | 2248 base_dir_, text_file_, uid_, ok_gids_)); |
| 2249 EXPECT_TRUE( | 2249 EXPECT_TRUE( |
| 2250 file_util::VerifyPathControlledByUser( | 2250 base::VerifyPathControlledByUser( |
| 2251 sub_dir_, text_file_, uid_, ok_gids_)); | 2251 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2252 | 2252 |
| 2253 EXPECT_TRUE( | 2253 EXPECT_TRUE( |
| 2254 file_util::VerifyPathControlledByUser( | 2254 base::VerifyPathControlledByUser( |
| 2255 base_dir_, sub_dir_, uid_, bad_gids_)); | 2255 base_dir_, sub_dir_, uid_, bad_gids_)); |
| 2256 EXPECT_TRUE( | 2256 EXPECT_TRUE( |
| 2257 file_util::VerifyPathControlledByUser( | 2257 base::VerifyPathControlledByUser( |
| 2258 base_dir_, text_file_, uid_, bad_gids_)); | 2258 base_dir_, text_file_, uid_, bad_gids_)); |
| 2259 EXPECT_TRUE( | 2259 EXPECT_TRUE( |
| 2260 file_util::VerifyPathControlledByUser( | 2260 base::VerifyPathControlledByUser( |
| 2261 sub_dir_, text_file_, uid_, bad_gids_)); | 2261 sub_dir_, text_file_, uid_, bad_gids_)); |
| 2262 | 2262 |
| 2263 // No group is okay, because we don't check the group | 2263 // No group is okay, because we don't check the group |
| 2264 // if no group can write. | 2264 // if no group can write. |
| 2265 std::set<gid_t> no_gids; // Empty set of gids. | 2265 std::set<gid_t> no_gids; // Empty set of gids. |
| 2266 EXPECT_TRUE( | 2266 EXPECT_TRUE( |
| 2267 file_util::VerifyPathControlledByUser( | 2267 base::VerifyPathControlledByUser( |
| 2268 base_dir_, sub_dir_, uid_, no_gids)); | 2268 base_dir_, sub_dir_, uid_, no_gids)); |
| 2269 EXPECT_TRUE( | 2269 EXPECT_TRUE( |
| 2270 file_util::VerifyPathControlledByUser( | 2270 base::VerifyPathControlledByUser( |
| 2271 base_dir_, text_file_, uid_, no_gids)); | 2271 base_dir_, text_file_, uid_, no_gids)); |
| 2272 EXPECT_TRUE( | 2272 EXPECT_TRUE( |
| 2273 file_util::VerifyPathControlledByUser( | 2273 base::VerifyPathControlledByUser( |
| 2274 sub_dir_, text_file_, uid_, no_gids)); | 2274 sub_dir_, text_file_, uid_, no_gids)); |
| 2275 | 2275 |
| 2276 | 2276 |
| 2277 // Make all files and directories writable by their group. | 2277 // Make all files and directories writable by their group. |
| 2278 ASSERT_NO_FATAL_FAILURE( | 2278 ASSERT_NO_FATAL_FAILURE( |
| 2279 ChangePosixFilePermissions(base_dir_, S_IWGRP, 0u)); | 2279 ChangePosixFilePermissions(base_dir_, S_IWGRP, 0u)); |
| 2280 ASSERT_NO_FATAL_FAILURE( | 2280 ASSERT_NO_FATAL_FAILURE( |
| 2281 ChangePosixFilePermissions(sub_dir_, S_IWGRP, 0u)); | 2281 ChangePosixFilePermissions(sub_dir_, S_IWGRP, 0u)); |
| 2282 ASSERT_NO_FATAL_FAILURE( | 2282 ASSERT_NO_FATAL_FAILURE( |
| 2283 ChangePosixFilePermissions(text_file_, S_IWGRP, 0u)); | 2283 ChangePosixFilePermissions(text_file_, S_IWGRP, 0u)); |
| 2284 | 2284 |
| 2285 // Now |ok_gids_| works, but |bad_gids_| fails. | 2285 // Now |ok_gids_| works, but |bad_gids_| fails. |
| 2286 EXPECT_TRUE( | 2286 EXPECT_TRUE( |
| 2287 file_util::VerifyPathControlledByUser( | 2287 base::VerifyPathControlledByUser( |
| 2288 base_dir_, sub_dir_, uid_, ok_gids_)); | 2288 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2289 EXPECT_TRUE( | 2289 EXPECT_TRUE( |
| 2290 file_util::VerifyPathControlledByUser( | 2290 base::VerifyPathControlledByUser( |
| 2291 base_dir_, text_file_, uid_, ok_gids_)); | 2291 base_dir_, text_file_, uid_, ok_gids_)); |
| 2292 EXPECT_TRUE( | 2292 EXPECT_TRUE( |
| 2293 file_util::VerifyPathControlledByUser( | 2293 base::VerifyPathControlledByUser( |
| 2294 sub_dir_, text_file_, uid_, ok_gids_)); | 2294 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2295 | 2295 |
| 2296 EXPECT_FALSE( | 2296 EXPECT_FALSE( |
| 2297 file_util::VerifyPathControlledByUser( | 2297 base::VerifyPathControlledByUser( |
| 2298 base_dir_, sub_dir_, uid_, bad_gids_)); | 2298 base_dir_, sub_dir_, uid_, bad_gids_)); |
| 2299 EXPECT_FALSE( | 2299 EXPECT_FALSE( |
| 2300 file_util::VerifyPathControlledByUser( | 2300 base::VerifyPathControlledByUser( |
| 2301 base_dir_, text_file_, uid_, bad_gids_)); | 2301 base_dir_, text_file_, uid_, bad_gids_)); |
| 2302 EXPECT_FALSE( | 2302 EXPECT_FALSE( |
| 2303 file_util::VerifyPathControlledByUser( | 2303 base::VerifyPathControlledByUser( |
| 2304 sub_dir_, text_file_, uid_, bad_gids_)); | 2304 sub_dir_, text_file_, uid_, bad_gids_)); |
| 2305 | 2305 |
| 2306 // Because any group in the group set is allowed, | 2306 // Because any group in the group set is allowed, |
| 2307 // the union of good and bad gids passes. | 2307 // the union of good and bad gids passes. |
| 2308 | 2308 |
| 2309 std::set<gid_t> multiple_gids; | 2309 std::set<gid_t> multiple_gids; |
| 2310 std::set_union( | 2310 std::set_union( |
| 2311 ok_gids_.begin(), ok_gids_.end(), | 2311 ok_gids_.begin(), ok_gids_.end(), |
| 2312 bad_gids_.begin(), bad_gids_.end(), | 2312 bad_gids_.begin(), bad_gids_.end(), |
| 2313 std::inserter(multiple_gids, multiple_gids.begin())); | 2313 std::inserter(multiple_gids, multiple_gids.begin())); |
| 2314 | 2314 |
| 2315 EXPECT_TRUE( | 2315 EXPECT_TRUE( |
| 2316 file_util::VerifyPathControlledByUser( | 2316 base::VerifyPathControlledByUser( |
| 2317 base_dir_, sub_dir_, uid_, multiple_gids)); | 2317 base_dir_, sub_dir_, uid_, multiple_gids)); |
| 2318 EXPECT_TRUE( | 2318 EXPECT_TRUE( |
| 2319 file_util::VerifyPathControlledByUser( | 2319 base::VerifyPathControlledByUser( |
| 2320 base_dir_, text_file_, uid_, multiple_gids)); | 2320 base_dir_, text_file_, uid_, multiple_gids)); |
| 2321 EXPECT_TRUE( | 2321 EXPECT_TRUE( |
| 2322 file_util::VerifyPathControlledByUser( | 2322 base::VerifyPathControlledByUser( |
| 2323 sub_dir_, text_file_, uid_, multiple_gids)); | 2323 sub_dir_, text_file_, uid_, multiple_gids)); |
| 2324 } | 2324 } |
| 2325 | 2325 |
| 2326 TEST_F(VerifyPathControlledByUserTest, WriteBitChecks) { | 2326 TEST_F(VerifyPathControlledByUserTest, WriteBitChecks) { |
| 2327 // Make all files and directories non-world-writable. | 2327 // Make all files and directories non-world-writable. |
| 2328 ASSERT_NO_FATAL_FAILURE( | 2328 ASSERT_NO_FATAL_FAILURE( |
| 2329 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH)); | 2329 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH)); |
| 2330 ASSERT_NO_FATAL_FAILURE( | 2330 ASSERT_NO_FATAL_FAILURE( |
| 2331 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH)); | 2331 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH)); |
| 2332 ASSERT_NO_FATAL_FAILURE( | 2332 ASSERT_NO_FATAL_FAILURE( |
| 2333 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH)); | 2333 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH)); |
| 2334 | 2334 |
| 2335 // Initialy, we control all parts of the path. | 2335 // Initialy, we control all parts of the path. |
| 2336 EXPECT_TRUE( | 2336 EXPECT_TRUE( |
| 2337 file_util::VerifyPathControlledByUser( | 2337 base::VerifyPathControlledByUser( |
| 2338 base_dir_, sub_dir_, uid_, ok_gids_)); | 2338 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2339 EXPECT_TRUE( | 2339 EXPECT_TRUE( |
| 2340 file_util::VerifyPathControlledByUser( | 2340 base::VerifyPathControlledByUser( |
| 2341 base_dir_, text_file_, uid_, ok_gids_)); | 2341 base_dir_, text_file_, uid_, ok_gids_)); |
| 2342 EXPECT_TRUE( | 2342 EXPECT_TRUE( |
| 2343 file_util::VerifyPathControlledByUser( | 2343 base::VerifyPathControlledByUser( |
| 2344 sub_dir_, text_file_, uid_, ok_gids_)); | 2344 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2345 | 2345 |
| 2346 // Make base_dir_ world-writable. | 2346 // Make base_dir_ world-writable. |
| 2347 ASSERT_NO_FATAL_FAILURE( | 2347 ASSERT_NO_FATAL_FAILURE( |
| 2348 ChangePosixFilePermissions(base_dir_, S_IWOTH, 0u)); | 2348 ChangePosixFilePermissions(base_dir_, S_IWOTH, 0u)); |
| 2349 EXPECT_FALSE( | 2349 EXPECT_FALSE( |
| 2350 file_util::VerifyPathControlledByUser( | 2350 base::VerifyPathControlledByUser( |
| 2351 base_dir_, sub_dir_, uid_, ok_gids_)); | 2351 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2352 EXPECT_FALSE( | 2352 EXPECT_FALSE( |
| 2353 file_util::VerifyPathControlledByUser( | 2353 base::VerifyPathControlledByUser( |
| 2354 base_dir_, text_file_, uid_, ok_gids_)); | 2354 base_dir_, text_file_, uid_, ok_gids_)); |
| 2355 EXPECT_TRUE( | 2355 EXPECT_TRUE( |
| 2356 file_util::VerifyPathControlledByUser( | 2356 base::VerifyPathControlledByUser( |
| 2357 sub_dir_, text_file_, uid_, ok_gids_)); | 2357 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2358 | 2358 |
| 2359 // Make sub_dir_ world writable. | 2359 // Make sub_dir_ world writable. |
| 2360 ASSERT_NO_FATAL_FAILURE( | 2360 ASSERT_NO_FATAL_FAILURE( |
| 2361 ChangePosixFilePermissions(sub_dir_, S_IWOTH, 0u)); | 2361 ChangePosixFilePermissions(sub_dir_, S_IWOTH, 0u)); |
| 2362 EXPECT_FALSE( | 2362 EXPECT_FALSE( |
| 2363 file_util::VerifyPathControlledByUser( | 2363 base::VerifyPathControlledByUser( |
| 2364 base_dir_, sub_dir_, uid_, ok_gids_)); | 2364 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2365 EXPECT_FALSE( | 2365 EXPECT_FALSE( |
| 2366 file_util::VerifyPathControlledByUser( | 2366 base::VerifyPathControlledByUser( |
| 2367 base_dir_, text_file_, uid_, ok_gids_)); | 2367 base_dir_, text_file_, uid_, ok_gids_)); |
| 2368 EXPECT_FALSE( | 2368 EXPECT_FALSE( |
| 2369 file_util::VerifyPathControlledByUser( | 2369 base::VerifyPathControlledByUser( |
| 2370 sub_dir_, text_file_, uid_, ok_gids_)); | 2370 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2371 | 2371 |
| 2372 // Make text_file_ world writable. | 2372 // Make text_file_ world writable. |
| 2373 ASSERT_NO_FATAL_FAILURE( | 2373 ASSERT_NO_FATAL_FAILURE( |
| 2374 ChangePosixFilePermissions(text_file_, S_IWOTH, 0u)); | 2374 ChangePosixFilePermissions(text_file_, S_IWOTH, 0u)); |
| 2375 EXPECT_FALSE( | 2375 EXPECT_FALSE( |
| 2376 file_util::VerifyPathControlledByUser( | 2376 base::VerifyPathControlledByUser( |
| 2377 base_dir_, sub_dir_, uid_, ok_gids_)); | 2377 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2378 EXPECT_FALSE( | 2378 EXPECT_FALSE( |
| 2379 file_util::VerifyPathControlledByUser( | 2379 base::VerifyPathControlledByUser( |
| 2380 base_dir_, text_file_, uid_, ok_gids_)); | 2380 base_dir_, text_file_, uid_, ok_gids_)); |
| 2381 EXPECT_FALSE( | 2381 EXPECT_FALSE( |
| 2382 file_util::VerifyPathControlledByUser( | 2382 base::VerifyPathControlledByUser( |
| 2383 sub_dir_, text_file_, uid_, ok_gids_)); | 2383 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2384 | 2384 |
| 2385 // Make sub_dir_ non-world writable. | 2385 // Make sub_dir_ non-world writable. |
| 2386 ASSERT_NO_FATAL_FAILURE( | 2386 ASSERT_NO_FATAL_FAILURE( |
| 2387 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH)); | 2387 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH)); |
| 2388 EXPECT_FALSE( | 2388 EXPECT_FALSE( |
| 2389 file_util::VerifyPathControlledByUser( | 2389 base::VerifyPathControlledByUser( |
| 2390 base_dir_, sub_dir_, uid_, ok_gids_)); | 2390 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2391 EXPECT_FALSE( | 2391 EXPECT_FALSE( |
| 2392 file_util::VerifyPathControlledByUser( | 2392 base::VerifyPathControlledByUser( |
| 2393 base_dir_, text_file_, uid_, ok_gids_)); | 2393 base_dir_, text_file_, uid_, ok_gids_)); |
| 2394 EXPECT_FALSE( | 2394 EXPECT_FALSE( |
| 2395 file_util::VerifyPathControlledByUser( | 2395 base::VerifyPathControlledByUser( |
| 2396 sub_dir_, text_file_, uid_, ok_gids_)); | 2396 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2397 | 2397 |
| 2398 // Make base_dir_ non-world-writable. | 2398 // Make base_dir_ non-world-writable. |
| 2399 ASSERT_NO_FATAL_FAILURE( | 2399 ASSERT_NO_FATAL_FAILURE( |
| 2400 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH)); | 2400 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH)); |
| 2401 EXPECT_TRUE( | 2401 EXPECT_TRUE( |
| 2402 file_util::VerifyPathControlledByUser( | 2402 base::VerifyPathControlledByUser( |
| 2403 base_dir_, sub_dir_, uid_, ok_gids_)); | 2403 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2404 EXPECT_FALSE( | 2404 EXPECT_FALSE( |
| 2405 file_util::VerifyPathControlledByUser( | 2405 base::VerifyPathControlledByUser( |
| 2406 base_dir_, text_file_, uid_, ok_gids_)); | 2406 base_dir_, text_file_, uid_, ok_gids_)); |
| 2407 EXPECT_FALSE( | 2407 EXPECT_FALSE( |
| 2408 file_util::VerifyPathControlledByUser( | 2408 base::VerifyPathControlledByUser( |
| 2409 sub_dir_, text_file_, uid_, ok_gids_)); | 2409 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2410 | 2410 |
| 2411 // Back to the initial state: Nothing is writable, so every path | 2411 // Back to the initial state: Nothing is writable, so every path |
| 2412 // should pass. | 2412 // should pass. |
| 2413 ASSERT_NO_FATAL_FAILURE( | 2413 ASSERT_NO_FATAL_FAILURE( |
| 2414 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH)); | 2414 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH)); |
| 2415 EXPECT_TRUE( | 2415 EXPECT_TRUE( |
| 2416 file_util::VerifyPathControlledByUser( | 2416 base::VerifyPathControlledByUser( |
| 2417 base_dir_, sub_dir_, uid_, ok_gids_)); | 2417 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2418 EXPECT_TRUE( | 2418 EXPECT_TRUE( |
| 2419 file_util::VerifyPathControlledByUser( | 2419 base::VerifyPathControlledByUser( |
| 2420 base_dir_, text_file_, uid_, ok_gids_)); | 2420 base_dir_, text_file_, uid_, ok_gids_)); |
| 2421 EXPECT_TRUE( | 2421 EXPECT_TRUE( |
| 2422 file_util::VerifyPathControlledByUser( | 2422 base::VerifyPathControlledByUser( |
| 2423 sub_dir_, text_file_, uid_, ok_gids_)); | 2423 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2424 } | 2424 } |
| 2425 | 2425 |
| 2426 #if defined(OS_ANDROID) | 2426 #if defined(OS_ANDROID) |
| 2427 TEST_F(FileUtilTest, ValidContentUriTest) { | 2427 TEST_F(FileUtilTest, ValidContentUriTest) { |
| 2428 // Get the test image path. | 2428 // Get the test image path. |
| 2429 FilePath data_dir; | 2429 FilePath data_dir; |
| 2430 ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &data_dir)); | 2430 ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &data_dir)); |
| 2431 data_dir = data_dir.AppendASCII("file_util"); | 2431 data_dir = data_dir.AppendASCII("file_util"); |
| 2432 ASSERT_TRUE(PathExists(data_dir)); | 2432 ASSERT_TRUE(PathExists(data_dir)); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2503 // Trying to close it should crash. This is important for security. | 2503 // Trying to close it should crash. This is important for security. |
| 2504 EXPECT_DEATH(CloseWithScopedFD(fds[1]), ""); | 2504 EXPECT_DEATH(CloseWithScopedFD(fds[1]), ""); |
| 2505 #endif | 2505 #endif |
| 2506 } | 2506 } |
| 2507 | 2507 |
| 2508 #endif // defined(OS_POSIX) | 2508 #endif // defined(OS_POSIX) |
| 2509 | 2509 |
| 2510 } // namespace | 2510 } // namespace |
| 2511 | 2511 |
| 2512 } // namespace base | 2512 } // namespace base |
| OLD | NEW |