Add explicit override for default Private DNS mode
Test: as follows
- built
- flashed
- booted
- runtest frameworks-net passes
Bug: 79719289
Change-Id: I943c5476666e47d04690626e2133f501cb875b46
This commit is contained in:
@@ -696,7 +696,7 @@ public class ConnectivityManager {
|
|||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public static final String PRIVATE_DNS_DEFAULT_MODE = PRIVATE_DNS_MODE_OPPORTUNISTIC;
|
public static final String PRIVATE_DNS_DEFAULT_MODE_FALLBACK = PRIVATE_DNS_MODE_OPPORTUNISTIC;
|
||||||
|
|
||||||
private final IConnectivityManager mService;
|
private final IConnectivityManager mService;
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.android.server.connectivity;
|
package com.android.server.connectivity;
|
||||||
|
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_DEFAULT_MODE;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_DEFAULT_MODE_FALLBACK;
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
||||||
@@ -24,6 +24,7 @@ import static android.provider.Settings.Global.DNS_RESOLVER_MIN_SAMPLES;
|
|||||||
import static android.provider.Settings.Global.DNS_RESOLVER_MAX_SAMPLES;
|
import static android.provider.Settings.Global.DNS_RESOLVER_MAX_SAMPLES;
|
||||||
import static android.provider.Settings.Global.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS;
|
import static android.provider.Settings.Global.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS;
|
||||||
import static android.provider.Settings.Global.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT;
|
import static android.provider.Settings.Global.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT;
|
||||||
|
import static android.provider.Settings.Global.PRIVATE_DNS_DEFAULT_MODE;
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
|
import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
|
import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
|
||||||
|
|
||||||
@@ -184,6 +185,7 @@ public class DnsManager {
|
|||||||
|
|
||||||
public static Uri[] getPrivateDnsSettingsUris() {
|
public static Uri[] getPrivateDnsSettingsUris() {
|
||||||
return new Uri[]{
|
return new Uri[]{
|
||||||
|
Settings.Global.getUriFor(PRIVATE_DNS_DEFAULT_MODE),
|
||||||
Settings.Global.getUriFor(PRIVATE_DNS_MODE),
|
Settings.Global.getUriFor(PRIVATE_DNS_MODE),
|
||||||
Settings.Global.getUriFor(PRIVATE_DNS_SPECIFIER),
|
Settings.Global.getUriFor(PRIVATE_DNS_SPECIFIER),
|
||||||
};
|
};
|
||||||
@@ -485,8 +487,10 @@ public class DnsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String getPrivateDnsMode(ContentResolver cr) {
|
private static String getPrivateDnsMode(ContentResolver cr) {
|
||||||
final String mode = getStringSetting(cr, PRIVATE_DNS_MODE);
|
String mode = getStringSetting(cr, PRIVATE_DNS_MODE);
|
||||||
return !TextUtils.isEmpty(mode) ? mode : PRIVATE_DNS_DEFAULT_MODE;
|
if (TextUtils.isEmpty(mode)) mode = getStringSetting(cr, PRIVATE_DNS_DEFAULT_MODE);
|
||||||
|
if (TextUtils.isEmpty(mode)) mode = PRIVATE_DNS_DEFAULT_MODE_FALLBACK;
|
||||||
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getStringSetting(ContentResolver cr, String which) {
|
private static String getStringSetting(ContentResolver cr, String which) {
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ package com.android.server.connectivity;
|
|||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
||||||
|
import static android.provider.Settings.Global.PRIVATE_DNS_DEFAULT_MODE;
|
||||||
|
import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
|
||||||
|
import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
@@ -40,6 +43,7 @@ import android.support.test.runner.AndroidJUnit4;
|
|||||||
import android.test.mock.MockContentResolver;
|
import android.test.mock.MockContentResolver;
|
||||||
|
|
||||||
import com.android.internal.util.test.FakeSettingsProvider;
|
import com.android.internal.util.test.FakeSettingsProvider;
|
||||||
|
import com.android.server.connectivity.DnsManager.PrivateDnsConfig;
|
||||||
import com.android.server.connectivity.MockableSystemProperties;
|
import com.android.server.connectivity.MockableSystemProperties;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
@@ -84,10 +88,9 @@ public class DnsManagerTest {
|
|||||||
mDnsManager = new DnsManager(mCtx, mNMService, mSystemProperties);
|
mDnsManager = new DnsManager(mCtx, mNMService, mSystemProperties);
|
||||||
|
|
||||||
// Clear the private DNS settings
|
// Clear the private DNS settings
|
||||||
Settings.Global.putString(mContentResolver,
|
Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, "");
|
||||||
Settings.Global.PRIVATE_DNS_MODE, "");
|
Settings.Global.putString(mContentResolver, PRIVATE_DNS_MODE, "");
|
||||||
Settings.Global.putString(mContentResolver,
|
Settings.Global.putString(mContentResolver, PRIVATE_DNS_SPECIFIER, "");
|
||||||
Settings.Global.PRIVATE_DNS_SPECIFIER, "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -127,9 +130,8 @@ public class DnsManagerTest {
|
|||||||
TEST_IFACENAME));
|
TEST_IFACENAME));
|
||||||
|
|
||||||
Settings.Global.putString(mContentResolver,
|
Settings.Global.putString(mContentResolver,
|
||||||
Settings.Global.PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME);
|
PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME);
|
||||||
Settings.Global.putString(mContentResolver,
|
Settings.Global.putString(mContentResolver, PRIVATE_DNS_SPECIFIER, "strictmode.com");
|
||||||
Settings.Global.PRIVATE_DNS_SPECIFIER, "strictmode.com");
|
|
||||||
mDnsManager.updatePrivateDns(new Network(TEST_NETID),
|
mDnsManager.updatePrivateDns(new Network(TEST_NETID),
|
||||||
new DnsManager.PrivateDnsConfig("strictmode.com", new InetAddress[] {
|
new DnsManager.PrivateDnsConfig("strictmode.com", new InetAddress[] {
|
||||||
InetAddress.parseNumericAddress("6.6.6.6"),
|
InetAddress.parseNumericAddress("6.6.6.6"),
|
||||||
@@ -222,8 +224,7 @@ public class DnsManagerTest {
|
|||||||
assertNull(lp.getPrivateDnsServerName());
|
assertNull(lp.getPrivateDnsServerName());
|
||||||
|
|
||||||
// Turn private DNS mode off
|
// Turn private DNS mode off
|
||||||
Settings.Global.putString(mContentResolver,
|
Settings.Global.putString(mContentResolver, PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OFF);
|
||||||
Settings.Global.PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OFF);
|
|
||||||
mDnsManager.updatePrivateDns(new Network(TEST_NETID),
|
mDnsManager.updatePrivateDns(new Network(TEST_NETID),
|
||||||
mDnsManager.getPrivateDnsConfig());
|
mDnsManager.getPrivateDnsConfig());
|
||||||
mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT);
|
mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT);
|
||||||
@@ -234,4 +235,29 @@ public class DnsManagerTest {
|
|||||||
assertFalse(lp.isPrivateDnsActive());
|
assertFalse(lp.isPrivateDnsActive());
|
||||||
assertNull(lp.getPrivateDnsServerName());
|
assertNull(lp.getPrivateDnsServerName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOverrideDefaultMode() throws Exception {
|
||||||
|
// Hard-coded default is opportunistic mode.
|
||||||
|
final PrivateDnsConfig cfgAuto = DnsManager.getPrivateDnsConfig(mContentResolver);
|
||||||
|
assertTrue(cfgAuto.useTls);
|
||||||
|
assertEquals("", cfgAuto.hostname);
|
||||||
|
assertEquals(new InetAddress[0], cfgAuto.ips);
|
||||||
|
|
||||||
|
// Pretend a gservices push sets the default to "off".
|
||||||
|
Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, "off");
|
||||||
|
final PrivateDnsConfig cfgOff = DnsManager.getPrivateDnsConfig(mContentResolver);
|
||||||
|
assertFalse(cfgOff.useTls);
|
||||||
|
assertEquals("", cfgOff.hostname);
|
||||||
|
assertEquals(new InetAddress[0], cfgOff.ips);
|
||||||
|
|
||||||
|
// Strict mode still works.
|
||||||
|
Settings.Global.putString(
|
||||||
|
mContentResolver, PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME);
|
||||||
|
Settings.Global.putString(mContentResolver, PRIVATE_DNS_SPECIFIER, "strictmode.com");
|
||||||
|
final PrivateDnsConfig cfgStrict = DnsManager.getPrivateDnsConfig(mContentResolver);
|
||||||
|
assertTrue(cfgStrict.useTls);
|
||||||
|
assertEquals("strictmode.com", cfgStrict.hostname);
|
||||||
|
assertEquals(new InetAddress[0], cfgStrict.ips);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user