1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_VOLD_UTILS_H 18 #define ANDROID_VOLD_UTILS_H 19 20 #include <utils/Errors.h> 21 #include <selinux/selinux.h> 22 23 #include <vector> 24 #include <string> 25 26 // DISALLOW_COPY_AND_ASSIGN disallows the copy and operator= functions. It goes in the private: 27 // declarations in a class. 28 #if !defined(DISALLOW_COPY_AND_ASSIGN) 29 #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ 30 TypeName(const TypeName&) = delete; \ 31 void operator=(const TypeName&) = delete 32 #endif 33 34 namespace android { 35 namespace vold { 36 37 /* SELinux contexts used depending on the block device type */ 38 extern security_context_t sBlkidContext; 39 extern security_context_t sBlkidUntrustedContext; 40 extern security_context_t sFsckContext; 41 extern security_context_t sFsckUntrustedContext; 42 43 status_t CreateDeviceNode(const std::string& path, dev_t dev); 44 status_t DestroyDeviceNode(const std::string& path); 45 46 /* fs_prepare_dir wrapper that creates with SELinux context */ 47 status_t PrepareDir(const std::string& path, mode_t mode, uid_t uid, gid_t gid); 48 49 /* Really unmounts the path, killing active processes along the way */ 50 status_t ForceUnmount(const std::string& path); 51 52 /* Creates bind mount from source to target */ 53 status_t BindMount(const std::string& source, const std::string& target); 54 55 /* Reads filesystem metadata from device at path */ 56 status_t ReadMetadata(const std::string& path, std::string& fsType, 57 std::string& fsUuid, std::string& fsLabel); 58 59 /* Reads filesystem metadata from untrusted device at path */ 60 status_t ReadMetadataUntrusted(const std::string& path, std::string& fsType, 61 std::string& fsUuid, std::string& fsLabel); 62 63 /* Returns either WEXITSTATUS() status, or a negative errno */ 64 status_t ForkExecvp(const std::vector<std::string>& args); 65 status_t ForkExecvp(const std::vector<std::string>& args, security_context_t context); 66 67 status_t ForkExecvp(const std::vector<std::string>& args, 68 std::vector<std::string>& output); 69 status_t ForkExecvp(const std::vector<std::string>& args, 70 std::vector<std::string>& output, security_context_t context); 71 72 pid_t ForkExecvpAsync(const std::vector<std::string>& args); 73 74 status_t ReadRandomBytes(size_t bytes, std::string& out); 75 76 /* Converts hex string to raw bytes, ignoring [ :-] */ 77 status_t HexToStr(const std::string& hex, std::string& str); 78 /* Converts raw bytes to hex string */ 79 status_t StrToHex(const std::string& str, std::string& hex); 80 /* Normalize given hex string into consistent format */ 81 status_t NormalizeHex(const std::string& in, std::string& out); 82 83 uint64_t GetFreeBytes(const std::string& path); 84 uint64_t GetTreeBytes(const std::string& path); 85 86 bool IsFilesystemSupported(const std::string& fsType); 87 88 /* Wipes contents of block device at given path */ 89 status_t WipeBlockDevice(const std::string& path); 90 91 std::string BuildKeyPath(const std::string& partGuid); 92 93 dev_t GetDevice(const std::string& path); 94 95 std::string DefaultFstabPath(); 96 97 } // namespace vold 98 } // namespace android 99 100 #endif 101