App ops: add op for writing settings.
Also fix a build.
And fix a bug that I think was introduced in the multi-user work
that removed the permission check for writing to settings...!
Change-Id: I5945682faa789ffc78fd3546c0df7d03693f106d
diff --git a/services/java/com/android/server/AppOpsService.java b/services/java/com/android/server/AppOpsService.java
index 335917e..748b3cb 100644
--- a/services/java/com/android/server/AppOpsService.java
+++ b/services/java/com/android/server/AppOpsService.java
@@ -204,6 +204,7 @@
@Override
public void setMode(int code, int uid, String packageName, int mode) {
verifyIncomingUid(uid);
+ verifyIncomingOp(code);
synchronized (this) {
Op op = getOpLocked(AppOpsManager.opToSwitch(code), uid, packageName, true);
if (op != null) {
@@ -218,6 +219,7 @@
@Override
public int checkOperation(int code, int uid, String packageName) {
verifyIncomingUid(uid);
+ verifyIncomingOp(code);
synchronized (this) {
Op op = getOpLocked(AppOpsManager.opToSwitch(code), uid, packageName, false);
if (op == null) {
@@ -230,6 +232,7 @@
@Override
public int noteOperation(int code, int uid, String packageName) {
verifyIncomingUid(uid);
+ verifyIncomingOp(code);
synchronized (this) {
Ops ops = getOpsLocked(uid, packageName, true);
if (ops == null) {
@@ -261,6 +264,7 @@
@Override
public int startOperation(int code, int uid, String packageName) {
verifyIncomingUid(uid);
+ verifyIncomingOp(code);
synchronized (this) {
Ops ops = getOpsLocked(uid, packageName, true);
if (ops == null) {
@@ -291,6 +295,7 @@
@Override
public void finishOperation(int code, int uid, String packageName) {
verifyIncomingUid(uid);
+ verifyIncomingOp(code);
synchronized (this) {
Op op = getOpLocked(code, uid, packageName, true);
if (op == null) {
@@ -322,6 +327,13 @@
Binder.getCallingPid(), Binder.getCallingUid(), null);
}
+ private void verifyIncomingOp(int op) {
+ if (op >= 0 && op < AppOpsManager._NUM_OP) {
+ return;
+ }
+ throw new IllegalArgumentException("Bad operation #" + op);
+ }
+
private Ops getOpsLocked(int uid, String packageName, boolean edit) {
HashMap<String, Ops> pkgOps = mUidOps.get(uid);
if (pkgOps == null) {