summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2016-05-03 18:08:33 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-05-03 18:08:35 +0000
commit28309fec2f104e181c22ab03ba3cec7f8756e4b7 (patch)
tree01fe93937983344f63cf5af712e242da445bf988
parent65fad18461b64ac35bf65e463e7f792c6df72add (diff)
parentd17fda40cdcf875002086fbe98bf34ba7cbdb03c (diff)
Merge "Added option to reset network policies for a given user." into nyc-dev
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java30
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java38
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java17
3 files changed, 71 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java b/services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java
new file mode 100644
index 000000000000..9e4432d25c0b
--- /dev/null
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerInternal.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.net;
+
+/**
+ * Network Policy Manager local system service interface.
+ *
+ * @hide Only for use within the system server.
+ */
+public abstract class NetworkPolicyManagerInternal {
+
+ /**
+ * Resets all policies associated with a given user.
+ */
+ public abstract void resetUserState(int userId);
+}
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 7ed75ca2cd6c..a6055c1716f7 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -406,6 +406,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
mAppOps = context.getSystemService(AppOpsManager.class);
mPackageMonitor = new MyPackageMonitor();
+
+ // Expose private service for system components to use.
+ LocalServices.addService(NetworkPolicyManagerInternal.class,
+ new NetworkPolicyManagerInternalImpl());
}
public void bindConnectivityManager(IConnectivityManager connManager) {
@@ -742,7 +746,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
synchronized (mRulesLock) {
// Remove any persistable state for the given user; both cleaning up after a
// USER_REMOVED, and one last sanity check during USER_ADDED
- removeUserStateLocked(userId);
+ removeUserStateLocked(userId, true);
if (action == ACTION_USER_ADDED) {
// Add apps that are whitelisted by default.
addDefaultRestrictBackgroundWhitelistUidsLocked(userId);
@@ -1742,12 +1746,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
/**
- * Remove any persistable state associated with given {@link UserHandle}, persisting
- * if any changes are made.
+ * Removes any persistable state associated with given {@link UserHandle}, persisting
+ * if any changes that are made.
*/
- void removeUserStateLocked(int userId) {
+ boolean removeUserStateLocked(int userId, boolean writePolicy) {
+
if (LOGV) Slog.v(TAG, "removeUserStateLocked()");
- boolean writePolicy = false;
+ boolean changed = false;
// Remove entries from restricted background UID whitelist
int[] wlUids = new int[0];
@@ -1762,7 +1767,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
for (int uid : wlUids) {
removeRestrictBackgroundWhitelistedUidLocked(uid, false, false);
}
- writePolicy = true;
+ changed = true;
}
// Remove entries from revoked default restricted background UID whitelist
@@ -1770,7 +1775,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
final int uid = mRestrictBackgroundWhitelistRevokedUids.keyAt(i);
if (UserHandle.getUserId(uid) == userId) {
mRestrictBackgroundWhitelistRevokedUids.removeAt(i);
- writePolicy = true;
+ changed = true;
}
}
@@ -1787,14 +1792,15 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
for (int uid : uids) {
mUidPolicy.delete(uid);
}
- writePolicy = true;
+ changed = true;
}
updateRulesForGlobalChangeLocked(true);
- if (writePolicy) {
+ if (writePolicy && changed) {
writePolicyLocked();
}
+ return changed;
}
@Override
@@ -3295,4 +3301,18 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
}
}
}
+
+ private class NetworkPolicyManagerInternalImpl extends NetworkPolicyManagerInternal {
+
+ @Override
+ public void resetUserState(int userId) {
+ synchronized (mRulesLock) {
+ boolean changed = removeUserStateLocked(userId, false);
+ changed = addDefaultRestrictBackgroundWhitelistUidsLocked(userId) || changed;
+ if (changed) {
+ writePolicyLocked();
+ }
+ }
+ }
+ }
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 24a6171b5b61..c9ba0038d129 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -164,6 +164,7 @@ import android.content.pm.VerifierInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.hardware.display.DisplayManager;
+import android.net.INetworkPolicyManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
@@ -243,6 +244,7 @@ import com.android.server.LocalServices;
import com.android.server.ServiceThread;
import com.android.server.SystemConfig;
import com.android.server.Watchdog;
+import com.android.server.net.NetworkPolicyManagerInternal;
import com.android.server.pm.PermissionsState.PermissionState;
import com.android.server.pm.Settings.DatabaseVersion;
import com.android.server.pm.Settings.VersionInfo;
@@ -16159,6 +16161,10 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
+ private void resetNetworkPolicies(int userId) {
+ LocalServices.getService(NetworkPolicyManagerInternal.class).resetUserState(userId);
+ }
+
/**
* Reverts user permission state changes (permissions and flags).
*
@@ -16649,10 +16655,10 @@ public class PackageManagerService extends IPackageManager.Stub {
public void resetApplicationPreferences(int userId) {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
+ final long identity = Binder.clearCallingIdentity();
// writer
- synchronized (mPackages) {
- final long identity = Binder.clearCallingIdentity();
- try {
+ try {
+ synchronized (mPackages) {
clearPackagePreferredActivitiesLPw(null, userId);
mSettings.applyDefaultPreferredAppsLPw(this, userId);
// TODO: We have to reset the default SMS and Phone. This requires
@@ -16664,9 +16670,10 @@ public class PackageManagerService extends IPackageManager.Stub {
primeDomainVerificationsLPw(userId);
resetUserChangesToRuntimePermissionsAndFlagsLPw(userId);
scheduleWritePackageRestrictionsLocked(userId);
- } finally {
- Binder.restoreCallingIdentity(identity);
}
+ resetNetworkPolicies(userId);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
}
}