| Chong Zhang | b632bd5 | 2020-11-02 11:01:48 -0800 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright (C) 2020 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 |  | 
| Chong Zhang | 7f7db5a | 2021-02-16 14:08:09 -0800 | [diff] [blame] | 17 | /** | 
|  | 18 | * Structures and functions related to permission checks in native code. | 
|  | 19 | * | 
|  | 20 | * @addtogroup Permission | 
|  | 21 | * @{ | 
|  | 22 | */ | 
|  | 23 |  | 
|  | 24 | /** | 
|  | 25 | * @file permission_manager.h | 
|  | 26 | */ | 
|  | 27 |  | 
| Chong Zhang | b632bd5 | 2020-11-02 11:01:48 -0800 | [diff] [blame] | 28 | #ifndef ANDROID_PERMISSION_MANAGER_H | 
|  | 29 | #define ANDROID_PERMISSION_MANAGER_H | 
|  | 30 |  | 
|  | 31 | #include <sys/cdefs.h> | 
|  | 32 | #include <sys/types.h> | 
|  | 33 |  | 
|  | 34 | __BEGIN_DECLS | 
|  | 35 |  | 
|  | 36 | /** | 
|  | 37 | * Permission check results. | 
|  | 38 | * | 
|  | 39 | * Introduced in API 31. | 
|  | 40 | */ | 
|  | 41 | enum { | 
|  | 42 | /** | 
|  | 43 | * This is returned by APermissionManager_checkPermission() | 
|  | 44 | * if the permission has been granted to the given package. | 
|  | 45 | */ | 
|  | 46 | PERMISSION_MANAGER_PERMISSION_GRANTED = 0, | 
|  | 47 | /** | 
|  | 48 | * This is returned by APermissionManager_checkPermission() | 
|  | 49 | * if the permission has not been granted to the given package. | 
|  | 50 | */ | 
|  | 51 | PERMISSION_MANAGER_PERMISSION_DENIED = -1, | 
|  | 52 | }; | 
|  | 53 |  | 
|  | 54 | /** | 
|  | 55 | * Permission check return status values. | 
|  | 56 | * | 
|  | 57 | * Introduced in API 31. | 
|  | 58 | */ | 
|  | 59 | enum { | 
|  | 60 | /** | 
|  | 61 | * This is returned if the permission check completed without errors. | 
| Chong Zhang | 7f7db5a | 2021-02-16 14:08:09 -0800 | [diff] [blame] | 62 | * The output result is valid and contains one of {::PERMISSION_MANAGER_PERMISSION_GRANTED, | 
|  | 63 | * ::PERMISSION_MANAGER_PERMISSION_DENIED}. | 
| Chong Zhang | b632bd5 | 2020-11-02 11:01:48 -0800 | [diff] [blame] | 64 | */ | 
|  | 65 | PERMISSION_MANAGER_STATUS_OK = 0, | 
|  | 66 | /** | 
|  | 67 | * This is returned if the permission check encountered an unspecified error. | 
|  | 68 | * The output result is unmodified. | 
|  | 69 | */ | 
|  | 70 | PERMISSION_MANAGER_STATUS_ERROR_UNKNOWN = -1, | 
|  | 71 | /** | 
|  | 72 | * This is returned if the permission check failed because the service is | 
|  | 73 | * unavailable. The output result is unmodified. | 
|  | 74 | */ | 
|  | 75 | PERMISSION_MANAGER_STATUS_SERVICE_UNAVAILABLE = -2, | 
|  | 76 | }; | 
|  | 77 |  | 
| Chong Zhang | b632bd5 | 2020-11-02 11:01:48 -0800 | [diff] [blame] | 78 | /** | 
|  | 79 | * Checks whether the package with the given pid/uid has been granted a permission. | 
|  | 80 | * | 
|  | 81 | * Note that the Java API of Context#checkPermission() is usually faster due to caching, | 
|  | 82 | * thus is preferred over this API wherever possible. | 
|  | 83 | * | 
|  | 84 | * @param permission the permission to be checked. | 
|  | 85 | * @param pid the process id of the package to be checked. | 
|  | 86 | * @param uid the uid of the package to be checked. | 
|  | 87 | * @param outResult output of the permission check result. | 
|  | 88 | * | 
|  | 89 | * @return error codes if any error happened during the check. | 
|  | 90 | */ | 
|  | 91 | int32_t APermissionManager_checkPermission(const char* permission, | 
|  | 92 | pid_t pid, | 
|  | 93 | uid_t uid, | 
|  | 94 | int32_t* outResult) __INTRODUCED_IN(31); | 
|  | 95 |  | 
| Chong Zhang | b632bd5 | 2020-11-02 11:01:48 -0800 | [diff] [blame] | 96 | __END_DECLS | 
|  | 97 |  | 
|  | 98 | #endif  // ANDROID_PERMISSION_MANAGER_H | 
| Chong Zhang | 7f7db5a | 2021-02-16 14:08:09 -0800 | [diff] [blame] | 99 |  | 
|  | 100 | /** @} */ |