123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef ANDROID_VOLD_UTILS_H
- #define ANDROID_VOLD_UTILS_H
- #include "KeyBuffer.h"
- #include <android-base/macros.h>
- #include <cutils/multiuser.h>
- #include <selinux/selinux.h>
- #include <utils/Errors.h>
- #include <chrono>
- #include <string>
- #include <vector>
- struct DIR;
- namespace android {
- namespace vold {
- /* SELinux contexts used depending on the block device type */
- extern security_context_t sBlkidContext;
- extern security_context_t sBlkidUntrustedContext;
- extern security_context_t sFsckContext;
- extern security_context_t sFsckUntrustedContext;
- // TODO remove this with better solution, b/64143519
- extern bool sSleepOnUnmount;
- status_t CreateDeviceNode(const std::string& path, dev_t dev);
- status_t DestroyDeviceNode(const std::string& path);
- /* fs_prepare_dir wrapper that creates with SELinux context */
- status_t PrepareDir(const std::string& path, mode_t mode, uid_t uid, gid_t gid);
- /* Really unmounts the path, killing active processes along the way */
- status_t ForceUnmount(const std::string& path);
- /* Kills any processes using given path */
- status_t KillProcessesUsingPath(const std::string& path);
- /* Creates bind mount from source to target */
- status_t BindMount(const std::string& source, const std::string& target);
- /** Creates a symbolic link to target */
- status_t Symlink(const std::string& target, const std::string& linkpath);
- /** Calls unlink(2) at linkpath */
- status_t Unlink(const std::string& linkpath);
- /** Creates the given directory if it is not already available */
- status_t CreateDir(const std::string& dir, mode_t mode);
- bool FindValue(const std::string& raw, const std::string& key, std::string* value);
- /* Reads filesystem metadata from device at path */
- status_t ReadMetadata(const std::string& path, std::string* fsType, std::string* fsUuid,
- std::string* fsLabel);
- /* Reads filesystem metadata from untrusted device at path */
- status_t ReadMetadataUntrusted(const std::string& path, std::string* fsType, std::string* fsUuid,
- std::string* fsLabel);
- /* Returns either WEXITSTATUS() status, or a negative errno */
- status_t ForkExecvp(const std::vector<std::string>& args, std::vector<std::string>* output = nullptr,
- security_context_t context = nullptr);
- pid_t ForkExecvpAsync(const std::vector<std::string>& args);
- /* Gets block device size in bytes */
- status_t GetBlockDevSize(int fd, uint64_t* size);
- status_t GetBlockDevSize(const std::string& path, uint64_t* size);
- /* Gets block device size in 512 byte sectors */
- status_t GetBlockDev512Sectors(const std::string& path, uint64_t* nr_sec);
- status_t ReadRandomBytes(size_t bytes, std::string& out);
- status_t ReadRandomBytes(size_t bytes, char* buffer);
- status_t GenerateRandomUuid(std::string& out);
- /* Converts hex string to raw bytes, ignoring [ :-] */
- status_t HexToStr(const std::string& hex, std::string& str);
- /* Converts raw bytes to hex string */
- status_t StrToHex(const std::string& str, std::string& hex);
- /* Converts raw key bytes to hex string */
- status_t StrToHex(const KeyBuffer& str, KeyBuffer& hex);
- /* Normalize given hex string into consistent format */
- status_t NormalizeHex(const std::string& in, std::string& out);
- uint64_t GetFreeBytes(const std::string& path);
- uint64_t GetTreeBytes(const std::string& path);
- bool IsFilesystemSupported(const std::string& fsType);
- /* Wipes contents of block device at given path */
- status_t WipeBlockDevice(const std::string& path);
- std::string BuildKeyPath(const std::string& partGuid);
- std::string BuildDataSystemLegacyPath(userid_t userid);
- std::string BuildDataSystemCePath(userid_t userid);
- std::string BuildDataSystemDePath(userid_t userid);
- std::string BuildDataMiscLegacyPath(userid_t userid);
- std::string BuildDataMiscCePath(userid_t userid);
- std::string BuildDataMiscDePath(userid_t userid);
- std::string BuildDataProfilesDePath(userid_t userid);
- std::string BuildDataVendorCePath(userid_t userid);
- std::string BuildDataVendorDePath(userid_t userid);
- std::string BuildDataPath(const std::string& volumeUuid);
- std::string BuildDataMediaCePath(const std::string& volumeUuid, userid_t userid);
- std::string BuildDataUserCePath(const std::string& volumeUuid, userid_t userid);
- std::string BuildDataUserDePath(const std::string& volumeUuid, userid_t userid);
- dev_t GetDevice(const std::string& path);
- status_t RestoreconRecursive(const std::string& path);
- // TODO: promote to android::base
- bool Readlinkat(int dirfd, const std::string& path, std::string* result);
- /* Checks if Android is running in QEMU */
- bool IsRunningInEmulator();
- status_t UnmountTreeWithPrefix(const std::string& prefix);
- status_t UnmountTree(const std::string& mountPoint);
- status_t DeleteDirContentsAndDir(const std::string& pathname);
- status_t DeleteDirContents(const std::string& pathname);
- status_t WaitForFile(const char* filename, std::chrono::nanoseconds timeout);
- bool FsyncDirectory(const std::string& dirname);
- bool writeStringToFile(const std::string& payload, const std::string& filename);
- } // namespace vold
- } // namespace android
- #endif
|