1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project 3*38e8c45fSAndroid Build Coastguard Worker * 4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*38e8c45fSAndroid Build Coastguard Worker * 8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*38e8c45fSAndroid Build Coastguard Worker * 10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License. 15*38e8c45fSAndroid Build Coastguard Worker */ 16*38e8c45fSAndroid Build Coastguard Worker 17*38e8c45fSAndroid Build Coastguard Worker /** 18*38e8c45fSAndroid Build Coastguard Worker * Structures and functions related to permission checks in native code. 19*38e8c45fSAndroid Build Coastguard Worker * 20*38e8c45fSAndroid Build Coastguard Worker * @addtogroup Permission 21*38e8c45fSAndroid Build Coastguard Worker * @{ 22*38e8c45fSAndroid Build Coastguard Worker */ 23*38e8c45fSAndroid Build Coastguard Worker 24*38e8c45fSAndroid Build Coastguard Worker /** 25*38e8c45fSAndroid Build Coastguard Worker * @file permission_manager.h 26*38e8c45fSAndroid Build Coastguard Worker */ 27*38e8c45fSAndroid Build Coastguard Worker 28*38e8c45fSAndroid Build Coastguard Worker #ifndef ANDROID_PERMISSION_MANAGER_H 29*38e8c45fSAndroid Build Coastguard Worker #define ANDROID_PERMISSION_MANAGER_H 30*38e8c45fSAndroid Build Coastguard Worker 31*38e8c45fSAndroid Build Coastguard Worker #include <sys/cdefs.h> 32*38e8c45fSAndroid Build Coastguard Worker #include <sys/types.h> 33*38e8c45fSAndroid Build Coastguard Worker 34*38e8c45fSAndroid Build Coastguard Worker __BEGIN_DECLS 35*38e8c45fSAndroid Build Coastguard Worker 36*38e8c45fSAndroid Build Coastguard Worker /** 37*38e8c45fSAndroid Build Coastguard Worker * Permission check results. 38*38e8c45fSAndroid Build Coastguard Worker * 39*38e8c45fSAndroid Build Coastguard Worker * Introduced in API 31. 40*38e8c45fSAndroid Build Coastguard Worker */ 41*38e8c45fSAndroid Build Coastguard Worker enum { 42*38e8c45fSAndroid Build Coastguard Worker /** 43*38e8c45fSAndroid Build Coastguard Worker * This is returned by APermissionManager_checkPermission() 44*38e8c45fSAndroid Build Coastguard Worker * if the permission has been granted to the given package. 45*38e8c45fSAndroid Build Coastguard Worker */ 46*38e8c45fSAndroid Build Coastguard Worker PERMISSION_MANAGER_PERMISSION_GRANTED = 0, 47*38e8c45fSAndroid Build Coastguard Worker /** 48*38e8c45fSAndroid Build Coastguard Worker * This is returned by APermissionManager_checkPermission() 49*38e8c45fSAndroid Build Coastguard Worker * if the permission has not been granted to the given package. 50*38e8c45fSAndroid Build Coastguard Worker */ 51*38e8c45fSAndroid Build Coastguard Worker PERMISSION_MANAGER_PERMISSION_DENIED = -1, 52*38e8c45fSAndroid Build Coastguard Worker }; 53*38e8c45fSAndroid Build Coastguard Worker 54*38e8c45fSAndroid Build Coastguard Worker /** 55*38e8c45fSAndroid Build Coastguard Worker * Permission check return status values. 56*38e8c45fSAndroid Build Coastguard Worker * 57*38e8c45fSAndroid Build Coastguard Worker * Introduced in API 31. 58*38e8c45fSAndroid Build Coastguard Worker */ 59*38e8c45fSAndroid Build Coastguard Worker enum { 60*38e8c45fSAndroid Build Coastguard Worker /** 61*38e8c45fSAndroid Build Coastguard Worker * This is returned if the permission check completed without errors. 62*38e8c45fSAndroid Build Coastguard Worker * The output result is valid and contains one of {::PERMISSION_MANAGER_PERMISSION_GRANTED, 63*38e8c45fSAndroid Build Coastguard Worker * ::PERMISSION_MANAGER_PERMISSION_DENIED}. 64*38e8c45fSAndroid Build Coastguard Worker */ 65*38e8c45fSAndroid Build Coastguard Worker PERMISSION_MANAGER_STATUS_OK = 0, 66*38e8c45fSAndroid Build Coastguard Worker /** 67*38e8c45fSAndroid Build Coastguard Worker * This is returned if the permission check encountered an unspecified error. 68*38e8c45fSAndroid Build Coastguard Worker * The output result is unmodified. 69*38e8c45fSAndroid Build Coastguard Worker */ 70*38e8c45fSAndroid Build Coastguard Worker PERMISSION_MANAGER_STATUS_ERROR_UNKNOWN = -1, 71*38e8c45fSAndroid Build Coastguard Worker /** 72*38e8c45fSAndroid Build Coastguard Worker * This is returned if the permission check failed because the service is 73*38e8c45fSAndroid Build Coastguard Worker * unavailable. The output result is unmodified. 74*38e8c45fSAndroid Build Coastguard Worker */ 75*38e8c45fSAndroid Build Coastguard Worker PERMISSION_MANAGER_STATUS_SERVICE_UNAVAILABLE = -2, 76*38e8c45fSAndroid Build Coastguard Worker }; 77*38e8c45fSAndroid Build Coastguard Worker 78*38e8c45fSAndroid Build Coastguard Worker /** 79*38e8c45fSAndroid Build Coastguard Worker * Checks whether the package with the given pid/uid has been granted a permission. 80*38e8c45fSAndroid Build Coastguard Worker * 81*38e8c45fSAndroid Build Coastguard Worker * Note that the Java API of Context#checkPermission() is usually faster due to caching, 82*38e8c45fSAndroid Build Coastguard Worker * thus is preferred over this API wherever possible. 83*38e8c45fSAndroid Build Coastguard Worker * 84*38e8c45fSAndroid Build Coastguard Worker * @param permission the permission to be checked. 85*38e8c45fSAndroid Build Coastguard Worker * @param pid the process id of the package to be checked. 86*38e8c45fSAndroid Build Coastguard Worker * @param uid the uid of the package to be checked. 87*38e8c45fSAndroid Build Coastguard Worker * @param outResult output of the permission check result. 88*38e8c45fSAndroid Build Coastguard Worker * 89*38e8c45fSAndroid Build Coastguard Worker * @return error codes if any error happened during the check. 90*38e8c45fSAndroid Build Coastguard Worker */ 91*38e8c45fSAndroid Build Coastguard Worker int32_t APermissionManager_checkPermission(const char* permission, 92*38e8c45fSAndroid Build Coastguard Worker pid_t pid, 93*38e8c45fSAndroid Build Coastguard Worker uid_t uid, 94*38e8c45fSAndroid Build Coastguard Worker int32_t* outResult) __INTRODUCED_IN(31); 95*38e8c45fSAndroid Build Coastguard Worker 96*38e8c45fSAndroid Build Coastguard Worker __END_DECLS 97*38e8c45fSAndroid Build Coastguard Worker 98*38e8c45fSAndroid Build Coastguard Worker #endif // ANDROID_PERMISSION_MANAGER_H 99*38e8c45fSAndroid Build Coastguard Worker 100*38e8c45fSAndroid Build Coastguard Worker /** @} */ 101