1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define LOG_TAG "PermissionController" 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 19c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IPermissionController.h> 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Debug.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Log.h> 23c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/Parcel.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/String8.h> 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 26208059f67ed2dd9fa025e07fcb6954d3cb61c79eMathias Agopian#include <private/binder/Static.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------- 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass BpPermissionController : public BpInterface<IPermissionController> 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project BpPermissionController(const sp<IBinder>& impl) 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project : BpInterface<IPermissionController>(impl) 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project { 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 39837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual bool checkPermission(const String16& permission, int32_t pid, int32_t uid) 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project { 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Parcel data, reply; 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project data.writeInterfaceToken(IPermissionController::getInterfaceDescriptor()); 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project data.writeString16(permission); 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project data.writeInt32(pid); 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project data.writeInt32(uid); 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project remote()->transact(CHECK_PERMISSION_TRANSACTION, data, &reply); 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // fail on exception 49837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick if (reply.readExceptionCode() != 0) return 0; 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return reply.readInt32() != 0; 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectIMPLEMENT_META_INTERFACE(PermissionController, "android.os.IPermissionController"); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------- 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatus_t BnPermissionController::onTransact( 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //printf("PermissionController received: "); data.print(); 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch(code) { 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case CHECK_PERMISSION_TRANSACTION: { 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project CHECK_INTERFACE(IPermissionController, data, reply); 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project String16 permission = data.readString16(); 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int32_t pid = data.readInt32(); 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int32_t uid = data.readInt32(); 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool res = checkPermission(permission, pid, uid); 69837a0d0fb2c3fba8082d47d04cb6120af1eb9a54Brad Fitzpatrick reply->writeNoException(); 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project reply->writeInt32(res ? 1 : 0); 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return NO_ERROR; 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } break; 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project default: 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return BBinder::onTransact(code, data, reply, flags); 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 79