Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java
- index 1ff6fc1ac..b8260346f 100644
- --- a/service/src/com/android/server/ConnectivityService.java
- +++ b/service/src/com/android/server/ConnectivityService.java
- @@ -1470,7 +1470,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
- mContext, mHandler, () -> updateAvoidBadWifi());
- mMultinetworkPolicyTracker.start();
- - mDnsManager = new DnsManager(mContext, mDnsResolver);
- + mDnsManager = new DnsManager(mContext, mDnsResolver, mSystemProperties);
- registerPrivateDnsSettingsCallbacks();
- // This NAI is a sentinel used to offer no service to apps that are on a multi-layer
- @@ -7187,12 +7187,20 @@ public class ConnectivityService extends IConnectivityManager.Stub
- return; // no updating necessary
- }
- + final NetworkAgentInfo defaultNai = getDefaultNetwork();
- + final boolean isDefaultNetwork = (defaultNai != null && defaultNai.network.netId == netId);
- +
- if (DBG) {
- final Collection<InetAddress> dnses = newLp.getDnsServers();
- log("Setting DNS servers for network " + netId + " to " + dnses);
- }
- try {
- mDnsManager.noteDnsServersForNetwork(netId, newLp);
- + // TODO: netd should listen on [::1]:53 and proxy queries to the current
- + // default network, and we should just set net.dns1 to ::1, not least
- + // because applications attempting to use net.dns resolvers will bypass
- + // the privacy protections of things like DNS-over-TLS.
- + if (isDefaultNetwork) mDnsManager.setDefaultDnsSystemProperties(newLp.getDnsServers());
- mDnsManager.flushVmDnsCache();
- } catch (Exception e) {
- loge("Exception in setDnsConfigurationForNetwork: " + e);
- diff --git a/service/src/com/android/server/connectivity/DnsManager.java b/service/src/com/android/server/connectivity/DnsManager.java
- index 1493cae79..2aea01199 100644
- --- a/service/src/com/android/server/connectivity/DnsManager.java
- +++ b/service/src/com/android/server/connectivity/DnsManager.java
- @@ -247,21 +247,24 @@ public class DnsManager {
- private final Context mContext;
- private final ContentResolver mContentResolver;
- private final IDnsResolver mDnsResolver;
- + private final MockableSystemProperties mSystemProperties;
- private final ConcurrentHashMap<Integer, PrivateDnsConfig> mPrivateDnsMap;
- // TODO: Replace the Map with SparseArrays.
- private final Map<Integer, PrivateDnsValidationStatuses> mPrivateDnsValidationMap;
- private final Map<Integer, LinkProperties> mLinkPropertiesMap;
- private final Map<Integer, int[]> mTransportsMap;
- + private int mNumDnsEntries;
- private int mSampleValidity;
- private int mSuccessThreshold;
- private int mMinSamples;
- private int mMaxSamples;
- - public DnsManager(Context ctx, IDnsResolver dnsResolver) {
- + public DnsManager(Context ctx, IDnsResolver dnsResolver, MockableSystemProperties sp) {
- mContext = ctx;
- mContentResolver = mContext.getContentResolver();
- mDnsResolver = dnsResolver;
- + mSystemProperties = sp;
- mPrivateDnsMap = new ConcurrentHashMap<>();
- mPrivateDnsValidationMap = new HashMap<>();
- mLinkPropertiesMap = new HashMap<>();
- @@ -412,6 +415,18 @@ public class DnsManager {
- }
- }
- + public void setDefaultDnsSystemProperties(Collection<InetAddress> dnses) {
- + int last = 0;
- + for (InetAddress dns : dnses) {
- + ++last;
- + setNetDnsProperty(last, dns.getHostAddress());
- + }
- + for (int i = last + 1; i <= mNumDnsEntries; ++i) {
- + setNetDnsProperty(i, "");
- + }
- + mNumDnsEntries = last;
- + }
- +
- /**
- * Flush DNS caches and events work before boot has completed.
- */
- @@ -467,6 +482,16 @@ public class DnsManager {
- return Settings.Global.getInt(mContentResolver, which, dflt);
- }
- + private void setNetDnsProperty(int which, String value) {
- + final String key = "net.dns" + which;
- + // Log and forget errors setting unsupported properties.
- + try {
- + mSystemProperties.set(key, value);
- + } catch (Exception e) {
- + Log.e(TAG, "Error setting unsupported net.dns property: ", e);
- + }
- + }
- +
- /**
- * Create a string array of host addresses from a collection of InetAddresses
- *
- diff --git a/service/src/com/android/server/connectivity/MockableSystemProperties.java b/service/src/com/android/server/connectivity/MockableSystemProperties.java
- index a25b89ac0..77b86d8e4 100644
- --- a/service/src/com/android/server/connectivity/MockableSystemProperties.java
- +++ b/service/src/com/android/server/connectivity/MockableSystemProperties.java
- @@ -31,4 +31,8 @@ public class MockableSystemProperties {
- public boolean getBoolean(String key, boolean def) {
- return SystemProperties.getBoolean(key, def);
- }
- +
- + public void set(String key, String value) {
- + SystemProperties.set(key, value);
- + }
- }
- diff --git a/tests/unit/java/com/android/server/connectivity/DnsManagerTest.java b/tests/unit/java/com/android/server/connectivity/DnsManagerTest.java
- index 24aecdb90..6ddef92b9 100644
- --- a/tests/unit/java/com/android/server/connectivity/DnsManagerTest.java
- +++ b/tests/unit/java/com/android/server/connectivity/DnsManagerTest.java
- @@ -105,6 +105,7 @@ public class DnsManagerTest {
- @Mock Context mCtx;
- @Mock IDnsResolver mMockDnsResolver;
- + @Mock MockableSystemProperties mSystemProperties;
- private void assertResolverOptionsEquals(
- @Nullable ResolverOptionsParcel actual,
- @@ -149,7 +150,7 @@ public class DnsManagerTest {
- mContentResolver.addProvider(Settings.AUTHORITY,
- new FakeSettingsProvider());
- when(mCtx.getContentResolver()).thenReturn(mContentResolver);
- - mDnsManager = new DnsManager(mCtx, mMockDnsResolver);
- + mDnsManager = new DnsManager(mCtx, mMockDnsResolver, mSystemProperties);
- // Clear the private DNS settings
- Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, "");
- @@ -171,6 +172,7 @@ public class DnsManagerTest {
- // Send a validation event that is tracked on the alternate netId
- mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
- mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
- + mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
- mDnsManager.flushVmDnsCache();
- mDnsManager.updateTransportsForNetwork(TEST_NETID_ALTERNATE, TEST_TRANSPORT_TYPES);
- mDnsManager.noteDnsServersForNetwork(TEST_NETID_ALTERNATE, lp);
- @@ -207,6 +209,7 @@ public class DnsManagerTest {
- }));
- mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
- mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
- + mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
- mDnsManager.flushVmDnsCache();
- fixedLp = new LinkProperties(lp);
- mDnsManager.updatePrivateDnsStatus(TEST_NETID, fixedLp);
- @@ -244,6 +247,7 @@ public class DnsManagerTest {
- lp.addDnsServer(InetAddress.getByName("3.3.3.3"));
- mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
- mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
- + mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
- mDnsManager.flushVmDnsCache();
- mDnsManager.updatePrivateDnsValidation(
- new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
- @@ -258,6 +262,7 @@ public class DnsManagerTest {
- mDnsManager.getPrivateDnsConfig());
- mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
- mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
- + mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
- mDnsManager.flushVmDnsCache();
- mDnsManager.updatePrivateDnsValidation(
- new DnsManager.PrivateDnsValidationUpdate(TEST_NETID_UNTRACKED,
- @@ -309,6 +314,7 @@ public class DnsManagerTest {
- mDnsManager.getPrivateDnsConfig());
- mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
- mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
- + mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
- mDnsManager.flushVmDnsCache();
- mDnsManager.updatePrivateDnsValidation(
- new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
- @@ -354,6 +360,7 @@ public class DnsManagerTest {
- lp.addDnsServer(InetAddress.getByName("4.4.4.4"));
- mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
- mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
- + mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
- mDnsManager.flushVmDnsCache();
- final ArgumentCaptor<ResolverParamsParcel> resolverParamsParcelCaptor =
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement