Loading libs/binder/IPermissionController.cpp +24 −0 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,19 @@ public: return reply.readInt32() != 0; 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) virtual void getPackagesForUid(const uid_t uid, Vector<String16>& packages) { { Parcel data, reply; Parcel data, reply; Loading Loading @@ -111,6 +124,17 @@ status_t BnPermissionController::onTransact( return NO_ERROR; return NO_ERROR; } break; } 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: { case GET_PACKAGES_FOR_UID_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); CHECK_INTERFACE(IPermissionController, data, reply); int32_t uid = data.readInt32(); int32_t uid = data.readInt32(); Loading libs/binder/PermissionController.cpp +6 −0 Original line number Original line 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; 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) void PermissionController::getPackagesForUid(const uid_t uid, Vector<String16> &packages) { { sp<IPermissionController> service = getService(); sp<IPermissionController> service = getService(); Loading libs/binder/include/binder/IPermissionController.h +6 −3 Original line number Original line 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 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 void getPackagesForUid(const uid_t uid, Vector<String16> &packages) = 0; virtual bool isRuntimePermission(const String16& permission) = 0; virtual bool isRuntimePermission(const String16& permission) = 0; Loading @@ -40,9 +42,10 @@ public: enum { enum { CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1, NOTE_OP_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1, IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2, GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2, GET_PACKAGE_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 3 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 Original line Diff line number Diff line Loading @@ -35,9 +35,17 @@ public: MATCH_INSTANT = 1<<23 MATCH_INSTANT = 1<<23 }; }; enum { MODE_ALLOWED = 0, MODE_IGNORED = 1, MODE_ERRORED = 2, MODE_DEFAULT = 3, }; PermissionController(); PermissionController(); bool checkPermission(const String16& permission, int32_t pid, int32_t uid); 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); void getPackagesForUid(const uid_t uid, Vector<String16>& packages); bool isRuntimePermission(const String16& permission); bool isRuntimePermission(const String16& permission); int getPackageUid(const String16& package, int flags); int getPackageUid(const String16& package, int flags); Loading Loading
libs/binder/IPermissionController.cpp +24 −0 Original line number Original line Diff line number Diff line Loading @@ -49,6 +49,19 @@ public: return reply.readInt32() != 0; 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) virtual void getPackagesForUid(const uid_t uid, Vector<String16>& packages) { { Parcel data, reply; Parcel data, reply; Loading Loading @@ -111,6 +124,17 @@ status_t BnPermissionController::onTransact( return NO_ERROR; return NO_ERROR; } break; } 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: { case GET_PACKAGES_FOR_UID_TRANSACTION: { CHECK_INTERFACE(IPermissionController, data, reply); CHECK_INTERFACE(IPermissionController, data, reply); int32_t uid = data.readInt32(); int32_t uid = data.readInt32(); Loading
libs/binder/PermissionController.cpp +6 −0 Original line number Original line 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; 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) void PermissionController::getPackagesForUid(const uid_t uid, Vector<String16> &packages) { { sp<IPermissionController> service = getService(); sp<IPermissionController> service = getService(); Loading
libs/binder/include/binder/IPermissionController.h +6 −3 Original line number Original line 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 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 void getPackagesForUid(const uid_t uid, Vector<String16> &packages) = 0; virtual bool isRuntimePermission(const String16& permission) = 0; virtual bool isRuntimePermission(const String16& permission) = 0; Loading @@ -40,9 +42,10 @@ public: enum { enum { CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, CHECK_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1, NOTE_OP_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 1, IS_RUNTIME_PERMISSION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2, GET_PACKAGES_FOR_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 2, GET_PACKAGE_UID_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 3 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 Original line Diff line number Diff line Loading @@ -35,9 +35,17 @@ public: MATCH_INSTANT = 1<<23 MATCH_INSTANT = 1<<23 }; }; enum { MODE_ALLOWED = 0, MODE_IGNORED = 1, MODE_ERRORED = 2, MODE_DEFAULT = 3, }; PermissionController(); PermissionController(); bool checkPermission(const String16& permission, int32_t pid, int32_t uid); 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); void getPackagesForUid(const uid_t uid, Vector<String16>& packages); bool isRuntimePermission(const String16& permission); bool isRuntimePermission(const String16& permission); int getPackageUid(const String16& package, int flags); int getPackageUid(const String16& package, int flags); Loading