168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes/* 268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * Copyright 2016 The Android Open Source Project 368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * 468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * Licensed under the Apache License, Version 2.0 (the "License"); 568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * you may not use this file except in compliance with the License. 668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * You may obtain a copy of the License at 768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * 868aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * http://www.apache.org/licenses/LICENSE-2.0 968aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * 1068aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * Unless required by applicable law or agreed to in writing, software 1168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * distributed under the License is distributed on an "AS IS" BASIS, 1268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * See the License for the specific language governing permissions and 1468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes * limitations under the License. 1568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes */ 1668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 1768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <base/at_exit.h> 1868aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <base/logging.h> 1968aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <base/message_loop/message_loop.h> 2068aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <binder/IServiceManager.h> 2168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <binder/Status.h> 2268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <brillo/binder_watcher.h> 2368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <brillo/message_loops/base_message_loop.h> 2468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <brillo/syslog_logging.h> 2568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include <utils/String16.h> 2668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 2768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes#include "android/os/BnPermissionController.h" 2868aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 2968aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obesnamespace { 3068aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obesstatic android::String16 serviceName("permission"); 3168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes} 3268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 3368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obesnamespace android { 3468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 3568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obesclass PermissionService : public android::os::BnPermissionController { 3668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes public: 3768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes ::android::binder::Status checkPermission( 3868aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes const ::android::String16& permission, int32_t pid, int32_t uid, 3968aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes bool* _aidl_return) { 4068aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes (void)permission; 4168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes (void)pid; 4268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes (void)uid; 4368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes *_aidl_return = true; 4468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes return binder::Status::ok(); 4568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes } 4668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 4768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes ::android::binder::Status getPackagesForUid( 4868aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes int32_t uid, ::std::vector<::android::String16>* _aidl_return) { 4968aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes (void)uid; 5068aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes // Brillo doesn't currently have installable packages. 5168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes if (_aidl_return) { 5268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes _aidl_return->clear(); 5368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes } 5468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes return binder::Status::ok(); 5568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes } 5668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 5768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes ::android::binder::Status isRuntimePermission( 5868aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes const ::android::String16& permission, bool* _aidl_return) { 5968aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes (void)permission; 6068aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes // Brillo doesn't currently have runtime permissions. 6168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes *_aidl_return = false; 6268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes return binder::Status::ok(); 6368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes } 6468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes}; 6568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 6668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes} // namespace android 6768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 6868aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obesint main() { 6968aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes base::AtExitManager atExitManager; 7068aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes brillo::InitLog(brillo::kLogToSyslog); 7168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes // Register the service with servicemanager. 7268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes android::status_t status = android::defaultServiceManager()->addService( 7368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes serviceName, new android::PermissionService()); 7468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes CHECK(status == android::OK) << "Failed to get IPermissionController " 7568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes "binder from servicemanager."; 7668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 7768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes // Create a message loop. 7868aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes base::MessageLoopForIO messageLoopForIo; 7968aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes brillo::BaseMessageLoop messageLoop{&messageLoopForIo}; 8068aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 8168aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes // Initialize a binder watcher. 8268aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes brillo::BinderWatcher watcher(&messageLoop); 8368aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes watcher.Init(); 8468aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes 8568aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes // Run the message loop. 8668aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes messageLoop.Run(); 8768aac7f5ba92ebfe409714c611e488cf81c2bca7Jorge Lucangeli Obes} 88