ScoredNetworkNominator: Set scorer uid + package on wificonfig created
This will get propagated to the NetworkCapabilities.setOwnerUid() in
ClientModeImpl after connection.
Bug: 151842117
Test: atest com.android.server.wifi
Change-Id: Ib2b6c3823a60b53445a271d08a1bb396b50f0d9d
diff --git a/service/java/com/android/server/wifi/ScoredNetworkNominator.java b/service/java/com/android/server/wifi/ScoredNetworkNominator.java
index cf20253..b2b28c0 100644
--- a/service/java/com/android/server/wifi/ScoredNetworkNominator.java
+++ b/service/java/com/android/server/wifi/ScoredNetworkNominator.java
@@ -26,11 +26,11 @@
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.os.Handler;
-import android.os.Process;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.LocalLog;
import android.util.Log;
+import android.util.Pair;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.wifi.util.ScanResultUtil;
@@ -113,20 +113,26 @@
}
}
- private boolean activeScorerAllowedtoSeeScanResults() {
+ private Pair<Integer, String> getActiveScorerUidAndPackage() {
String packageName = mNetworkScoreManager.getActiveScorerPackage();
- if (packageName == null) return false;
+ if (packageName == null) return null;
int uid = -1;
try {
uid = mPackageManager.getApplicationInfo(packageName, 0).uid;
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Failed to retrieve package uid", e);
- return false;
+ return null;
}
+ return Pair.create(uid, packageName);
+ }
+
+ private boolean activeScorerAllowedtoSeeScanResults() {
+ Pair<Integer, String> scorerUidAndPackage = getActiveScorerUidAndPackage();
+ if (scorerUidAndPackage == null) return false;
try {
// TODO moltmann: Can we set a featureID here instead of null?
- mWifiPermissionsUtil.enforceCanAccessScanResults(packageName, null, uid,
- null);
+ mWifiPermissionsUtil.enforceCanAccessScanResults(
+ scorerUidAndPackage.second, null, scorerUidAndPackage.first, null);
return true;
} catch (SecurityException e) {
return false;
@@ -299,6 +305,11 @@
mEphemeralConfig.meteredHint));
break;
}
+ Pair<Integer, String> scorerUidAndPackage = getActiveScorerUidAndPackage();
+ if (scorerUidAndPackage == null) {
+ mLocalLog.log("Can't find active scorer uid and package");
+ break;
+ }
mEphemeralConfig =
ScanResultUtil.createNetworkFromScanResult(mScanResultCandidate);
@@ -309,7 +320,7 @@
mEphemeralConfig.meteredHint = mScoreCache.getMeteredHint(mScanResultCandidate);
NetworkUpdateResult result =
mWifiConfigManager.addOrUpdateNetwork(mEphemeralConfig,
- Process.WIFI_UID);
+ scorerUidAndPackage.first, scorerUidAndPackage.second);
if (!result.isSuccess()) {
mLocalLog.log("Failed to add ephemeral network");
break;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ScoredNetworkNominatorTest.java b/service/tests/wifitests/src/com/android/server/wifi/ScoredNetworkNominatorTest.java
index 1147d06..c9cad7d 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ScoredNetworkNominatorTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ScoredNetworkNominatorTest.java
@@ -29,7 +29,6 @@
import android.database.ContentObserver;
import android.net.NetworkKey;
import android.net.NetworkScoreManager;
-import android.net.NetworkScorerAppData;
import android.net.Uri;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
@@ -63,8 +62,6 @@
public class ScoredNetworkNominatorTest extends WifiBaseTest {
private static final String TEST_PACKAGE_NAME = "name.package.test";
private static final int TEST_UID = 12345;
- private static final NetworkScorerAppData TEST_APP_DATA = new NetworkScorerAppData(
- TEST_UID, null, null, null, null);
private ContentObserver mContentObserver;
private int mThresholdQualifiedRssi2G;
private int mThresholdQualifiedRssi5G;
@@ -95,8 +92,10 @@
.thenReturn("test");
ApplicationInfo appInfo = new ApplicationInfo();
appInfo.uid = TEST_UID;
- when(mPackageManager.getApplicationInfo(any(), anyInt()))
+ when(mPackageManager.getApplicationInfo(eq(TEST_PACKAGE_NAME), anyInt()))
.thenReturn(appInfo);
+ when(mNetworkScoreManager.getActiveScorerPackage())
+ .thenReturn(TEST_PACKAGE_NAME);
ArgumentCaptor<ContentObserver> observerCaptor =
ArgumentCaptor.forClass(ContentObserver.class);
@@ -109,12 +108,6 @@
observerCaptor.capture());
mContentObserver = observerCaptor.getValue();
- reset(mNetworkScoreManager);
- when(mNetworkScoreManager.getActiveScorer())
- .thenReturn(TEST_APP_DATA);
- when(mNetworkScoreManager.getActiveScorerPackage())
- .thenReturn(TEST_PACKAGE_NAME);
-
when(mClock.getElapsedSinceBootMillis()).thenReturn(SystemClock.elapsedRealtime());
}
@@ -307,7 +300,7 @@
when(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache(any(ScanDetail.class)))
.thenReturn(null);
// But when we create one, this is should be it.
- when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt()))
+ when(mWifiConfigManager.addOrUpdateNetwork(any(), eq(TEST_UID), eq(TEST_PACKAGE_NAME)))
.thenReturn(new NetworkUpdateResult(1));
// Untrusted networks allowed.
mScoredNetworkNominator.nominateNetworks(scanDetails,