| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef INIT_FILE_ATTRS_CLEANER_H_ |
| #define INIT_FILE_ATTRS_CLEANER_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include <base/files/file_path.h> |
| |
| namespace file_attrs_cleaner { |
| |
| extern const char xdg_origin_url[]; |
| extern const char xdg_referrer_url[]; |
| |
| enum class AttributeCheckStatus { |
| ERROR = 0, |
| NO_ATTR, |
| CLEAR_FAILED, |
| CLEARED, |
| }; |
| |
| // Whether we allow |path| to be marked with immutable file attribute. |
| // If |path| is supposed to be a directory, set |isdir| to true. |
| bool ImmutableAllowed(const base::FilePath& path, bool isdir); |
| |
| // Check the file attributes of the specified path. |path| is used for logging |
| // and policy checking, so |fd| needs to be an open handle to it. This helps |
| // with TOCTTOU issues. If |path| is supposed to be a directory, set |isdir| |
| // to true. |
| AttributeCheckStatus CheckFileAttributes(const base::FilePath& path, |
| bool isdir, |
| int fd); |
| |
| // Remove download-related URL extended attributes. See crbug.com/919486. |
| // This cannot use a file descriptor because the files we want to clear xattrs |
| // from are encrypted and therefore cannot be opened. |
| // Report whether the file actually had the relevant extended attributes for |
| // metrics purposes. |
| AttributeCheckStatus RemoveURLExtendedAttributes(const base::FilePath& path); |
| |
| // Recursively scan the file attributes of paths under |dir|. |
| // Don't recurse into any subdirectories that exactly match any string in |
| // |skip_recurse|. |
| // Populate |url_xattrs_count| if files with those attributes were found. |
| bool ScanDir(const base::FilePath& dir, |
| const std::vector<std::string>& skip_recurse, |
| int* url_xattrs_count); |
| |
| // Convenience function. |
| static inline bool ScanDir(const std::string& dir, |
| const std::vector<std::string>& skip_recurse, |
| int* url_xattrs_count) { |
| return ScanDir(base::FilePath(dir), skip_recurse, url_xattrs_count); |
| } |
| |
| } // namespace file_attrs_cleaner |
| |
| #endif // INIT_FILE_ATTRS_CLEANER_H_ |