Loading libs/binder/IPermissionController.cpp +24 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,19 @@ public: return reply.readInt32() != 0; } virtual int32_t noteOp(const String16& op, int32_t uid, const String16& packageName) { Parcel data, reply; data.writeInterfaceToken(IPermissionController::getInterfaceDescriptor()); data.writeString16(op); data.writeInt32(uid); data.writeString16(packageName); remote()->transact(NOTE_OP_TRANSACTION, data, &reply); // fail on exception if (reply.readExceptionCode() != 0) return 2; // MODE_ERRORED return reply.readInt32(); } virtual void getPackagesForUid(const uid_t uid, Vector<String16>& packages) { Parcel data, reply; Loading Loading @@ -111,6 +124,17 @@ status_t BnPermissionController::onTransact( return NO_ERROR; } break; case NOTE_OP_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); String16 op = data.readString16(); int32_t uid = data.readInt32(); String16 packageName = data.readString16(); int32_t res = noteOp(op, uid, packageName); reply->writeNoException(); reply->writeInt32(res); return NO_ERROR; } break; case GET_PACKAGES_FOR_UID_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); int32_t uid = data.readInt32(); Loading libs/binder/PermissionController.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,12 @@ bool PermissionController::checkPermission(const String16& permission, int32_t p return service != NULL ? service->checkPermission(permission, pid, uid) : false; } int32_t PermissionController::noteOp(const String16& op, int32_t uid, const String16& packageName) { sp<IPermissionController> service = getService(); return service != NULL ? service->noteOp(op, uid, packageName) : MODE_ERRORED; } void PermissionController::getPackagesForUid(const uid_t uid, Vector<String16> &packages) { sp<IPermissionController> service = getService(); Loading libs/binder/include/binder/IPermissionController.h +6 −3 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ public: virtual bool checkPermission(const String16& permission, int32_t pid, int32_t uid) = 0; virtual int32_t noteOp(const String16& op, int32_t uid, const String16& packageName) = 0; virtual void getPackagesForUid(const uid_t uid, Vector<String16> &packages) = 0; virtual bool isRuntimePermission(const String16& permission) = 0; Loading @@ -40,9 +42,10 @@ public: enum { CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1, IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2, GET_PACKAGE_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 3 NOTE_OP_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1, GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2, IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 3, GET_PACKAGE_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 4 }; }; Loading libs/binder/include/binder/PermissionController.h +8 −0 Original line number Diff line number Diff line Loading @@ -35,9 +35,17 @@ public: MATCH_INSTANT = 1<<23 }; enum { MODE_ALLOWED = 0, MODE_IGNORED = 1, MODE_ERRORED = 2, MODE_DEFAULT = 3, }; PermissionController(); bool checkPermission(const String16& permission, int32_t pid, int32_t uid); int32_t noteOp(const String16& op, int32_t uid, const String16& packageName); void getPackagesForUid(const uid_t uid, Vector<String16>& packages); bool isRuntimePermission(const String16& permission); int getPackageUid(const String16& package, int flags); Loading Loading
libs/binder/IPermissionController.cpp +24 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,19 @@ public: return reply.readInt32() != 0; } virtual int32_t noteOp(const String16& op, int32_t uid, const String16& packageName) { Parcel data, reply; data.writeInterfaceToken(IPermissionController::getInterfaceDescriptor()); data.writeString16(op); data.writeInt32(uid); data.writeString16(packageName); remote()->transact(NOTE_OP_TRANSACTION, data, &reply); // fail on exception if (reply.readExceptionCode() != 0) return 2; // MODE_ERRORED return reply.readInt32(); } virtual void getPackagesForUid(const uid_t uid, Vector<String16>& packages) { Parcel data, reply; Loading Loading @@ -111,6 +124,17 @@ status_t BnPermissionController::onTransact( return NO_ERROR; } break; case NOTE_OP_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); String16 op = data.readString16(); int32_t uid = data.readInt32(); String16 packageName = data.readString16(); int32_t res = noteOp(op, uid, packageName); reply->writeNoException(); reply->writeInt32(res); return NO_ERROR; } break; case GET_PACKAGES_FOR_UID_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); int32_t uid = data.readInt32(); Loading
libs/binder/PermissionController.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,12 @@ bool PermissionController::checkPermission(const String16& permission, int32_t p return service != NULL ? service->checkPermission(permission, pid, uid) : false; } int32_t PermissionController::noteOp(const String16& op, int32_t uid, const String16& packageName) { sp<IPermissionController> service = getService(); return service != NULL ? service->noteOp(op, uid, packageName) : MODE_ERRORED; } void PermissionController::getPackagesForUid(const uid_t uid, Vector<String16> &packages) { sp<IPermissionController> service = getService(); Loading
libs/binder/include/binder/IPermissionController.h +6 −3 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ public: virtual bool checkPermission(const String16& permission, int32_t pid, int32_t uid) = 0; virtual int32_t noteOp(const String16& op, int32_t uid, const String16& packageName) = 0; virtual void getPackagesForUid(const uid_t uid, Vector<String16> &packages) = 0; virtual bool isRuntimePermission(const String16& permission) = 0; Loading @@ -40,9 +42,10 @@ public: enum { CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1, IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2, GET_PACKAGE_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 3 NOTE_OP_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1, GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2, IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 3, GET_PACKAGE_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 4 }; }; Loading
libs/binder/include/binder/PermissionController.h +8 −0 Original line number Diff line number Diff line Loading @@ -35,9 +35,17 @@ public: MATCH_INSTANT = 1<<23 }; enum { MODE_ALLOWED = 0, MODE_IGNORED = 1, MODE_ERRORED = 2, MODE_DEFAULT = 3, }; PermissionController(); bool checkPermission(const String16& permission, int32_t pid, int32_t uid); int32_t noteOp(const String16& op, int32_t uid, const String16& packageName); void getPackagesForUid(const uid_t uid, Vector<String16>& packages); bool isRuntimePermission(const String16& permission); int getPackageUid(const String16& package, int flags); Loading