diff options
author | 2018-06-08 15:11:57 -0700 | |
---|---|---|
committer | 2018-06-08 15:11:57 -0700 | |
commit | f11e2bd016d886a333345dea853ebda23a408d5c (patch) | |
tree | 905bd4d25d6ab2b046620ff459777d8dcfa5d7de /libs/binder/IPermissionController.cpp | |
parent | aabd6b7fa343654cd85b3b2da392e424d037d15a (diff) | |
parent | 5c947cdf72270fd1f766b2248d526ebc8c7227f6 (diff) |
Merge pi-dev-plus-aosp-without-vendor into stage-aosp-master
Bug: 79597307
Change-Id: I6d6bee71b9424eb478780bbfc06b830eb8ded342
Diffstat (limited to 'libs/binder/IPermissionController.cpp')
-rw-r--r-- | libs/binder/IPermissionController.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/libs/binder/IPermissionController.cpp b/libs/binder/IPermissionController.cpp index 674bddf218..89ebc6c1aa 100644 --- a/libs/binder/IPermissionController.cpp +++ b/libs/binder/IPermissionController.cpp @@ -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; @@ -78,6 +91,18 @@ public: if (reply.readExceptionCode() != 0) return false; return reply.readInt32() != 0; } + + virtual int getPackageUid(const String16& package, int flags) + { + Parcel data, reply; + data.writeInterfaceToken(IPermissionController::getInterfaceDescriptor()); + data.writeString16(package); + data.writeInt32(flags); + remote()->transact(GET_PACKAGE_UID_TRANSACTION, data, &reply); + // fail on exception + if (reply.readExceptionCode() != 0) return false; + return reply.readInt32(); + } }; IMPLEMENT_META_INTERFACE(PermissionController, "android.os.IPermissionController"); @@ -99,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(); @@ -122,6 +158,16 @@ status_t BnPermissionController::onTransact( return NO_ERROR; } break; + case GET_PACKAGE_UID_TRANSACTION: { + CHECK_INTERFACE(IPermissionController, data, reply); + String16 package = data.readString16(); + int flags = data.readInt32(); + const int uid = getPackageUid(package, flags); + reply->writeNoException(); + reply->writeInt32(uid); + return NO_ERROR; + } break; + default: return BBinder::onTransact(code, data, reply, flags); } |