Loading core/java/android/net/ConnectivityManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -696,7 +696,7 @@ public class ConnectivityManager { * * @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; /** Loading core/java/android/provider/Settings.java +12 −1 Original line number Diff line number Diff line Loading @@ -9297,7 +9297,7 @@ public final class Settings { * values. * Consists of a comma seperated list of strings: * "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" * note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" * note that empty fields can be omitted: "name,apn,,,,,,,,,310,260,,DUN" * @hide */ public static final String TETHER_DUN_APN = "tether_dun_apn"; Loading Loading @@ -10358,6 +10358,17 @@ public final class Settings { private static final Validator PRIVATE_DNS_SPECIFIER_VALIDATOR = ANY_STRING_VALIDATOR; /** * Forced override of the default mode (hardcoded as "automatic", nee "opportunistic"). * This allows changing the default mode without effectively disabling other modes, * all of which require explicit user action to enable/configure. See also b/79719289. * * Value is a string, suitable for assignment to PRIVATE_DNS_MODE above. * * {@hide} */ public static final String PRIVATE_DNS_DEFAULT_MODE = "private_dns_default_mode"; /** {@hide} */ public static final String BLUETOOTH_HEADSET_PRIORITY_PREFIX = "bluetooth_headset_priority_"; Loading core/tests/coretests/src/android/provider/SettingsBackupTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -358,6 +358,7 @@ public class SettingsBackupTest { Settings.Global.PREFERRED_NETWORK_MODE, Settings.Global.PRIV_APP_OOB_ENABLED, Settings.Global.PRIV_APP_OOB_LIST, Settings.Global.PRIVATE_DNS_DEFAULT_MODE, Settings.Global.PROVISIONING_APN_ALARM_DELAY_IN_MS, Settings.Global.RADIO_BLUETOOTH, Settings.Global.RADIO_CELL, Loading services/core/java/com/android/server/connectivity/DnsManager.java +7 −3 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ 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_OPPORTUNISTIC; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; Loading @@ -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_SAMPLE_VALIDITY_SECONDS; 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_SPECIFIER; Loading Loading @@ -184,6 +185,7 @@ public class DnsManager { public static Uri[] getPrivateDnsSettingsUris() { return new Uri[]{ Settings.Global.getUriFor(PRIVATE_DNS_DEFAULT_MODE), Settings.Global.getUriFor(PRIVATE_DNS_MODE), Settings.Global.getUriFor(PRIVATE_DNS_SPECIFIER), }; Loading Loading @@ -485,8 +487,10 @@ public class DnsManager { } private static String getPrivateDnsMode(ContentResolver cr) { final String mode = getStringSetting(cr, PRIVATE_DNS_MODE); return !TextUtils.isEmpty(mode) ? mode : PRIVATE_DNS_DEFAULT_MODE; String mode = getStringSetting(cr, PRIVATE_DNS_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) { Loading tests/net/java/com/android/server/connectivity/DnsManagerTest.java +35 −9 Original line number Diff line number Diff line Loading @@ -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_OPPORTUNISTIC; 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.assertFalse; Loading @@ -40,6 +43,7 @@ import android.support.test.runner.AndroidJUnit4; import android.test.mock.MockContentResolver; import com.android.internal.util.test.FakeSettingsProvider; import com.android.server.connectivity.DnsManager.PrivateDnsConfig; import com.android.server.connectivity.MockableSystemProperties; import java.net.InetAddress; Loading Loading @@ -84,10 +88,9 @@ public class DnsManagerTest { mDnsManager = new DnsManager(mCtx, mNMService, mSystemProperties); // Clear the private DNS settings Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_MODE, ""); Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_SPECIFIER, ""); Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, ""); Settings.Global.putString(mContentResolver, PRIVATE_DNS_MODE, ""); Settings.Global.putString(mContentResolver, PRIVATE_DNS_SPECIFIER, ""); } @Test Loading Loading @@ -127,9 +130,8 @@ public class DnsManagerTest { TEST_IFACENAME)); Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME); Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_SPECIFIER, "strictmode.com"); PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME); Settings.Global.putString(mContentResolver, PRIVATE_DNS_SPECIFIER, "strictmode.com"); mDnsManager.updatePrivateDns(new Network(TEST_NETID), new DnsManager.PrivateDnsConfig("strictmode.com", new InetAddress[] { InetAddress.parseNumericAddress("6.6.6.6"), Loading Loading @@ -222,8 +224,7 @@ public class DnsManagerTest { assertNull(lp.getPrivateDnsServerName()); // Turn private DNS mode off Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OFF); Settings.Global.putString(mContentResolver, PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OFF); mDnsManager.updatePrivateDns(new Network(TEST_NETID), mDnsManager.getPrivateDnsConfig()); mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT); Loading @@ -234,4 +235,29 @@ public class DnsManagerTest { assertFalse(lp.isPrivateDnsActive()); 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); } } Loading
core/java/android/net/ConnectivityManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -696,7 +696,7 @@ public class ConnectivityManager { * * @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; /** Loading
core/java/android/provider/Settings.java +12 −1 Original line number Diff line number Diff line Loading @@ -9297,7 +9297,7 @@ public final class Settings { * values. * Consists of a comma seperated list of strings: * "name,apn,proxy,port,username,password,server,mmsc,mmsproxy,mmsport,mcc,mnc,auth,type" * note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" * note that empty fields can be omitted: "name,apn,,,,,,,,,310,260,,DUN" * @hide */ public static final String TETHER_DUN_APN = "tether_dun_apn"; Loading Loading @@ -10358,6 +10358,17 @@ public final class Settings { private static final Validator PRIVATE_DNS_SPECIFIER_VALIDATOR = ANY_STRING_VALIDATOR; /** * Forced override of the default mode (hardcoded as "automatic", nee "opportunistic"). * This allows changing the default mode without effectively disabling other modes, * all of which require explicit user action to enable/configure. See also b/79719289. * * Value is a string, suitable for assignment to PRIVATE_DNS_MODE above. * * {@hide} */ public static final String PRIVATE_DNS_DEFAULT_MODE = "private_dns_default_mode"; /** {@hide} */ public static final String BLUETOOTH_HEADSET_PRIORITY_PREFIX = "bluetooth_headset_priority_"; Loading
core/tests/coretests/src/android/provider/SettingsBackupTest.java +1 −0 Original line number Diff line number Diff line Loading @@ -358,6 +358,7 @@ public class SettingsBackupTest { Settings.Global.PREFERRED_NETWORK_MODE, Settings.Global.PRIV_APP_OOB_ENABLED, Settings.Global.PRIV_APP_OOB_LIST, Settings.Global.PRIVATE_DNS_DEFAULT_MODE, Settings.Global.PROVISIONING_APN_ALARM_DELAY_IN_MS, Settings.Global.RADIO_BLUETOOTH, Settings.Global.RADIO_CELL, Loading
services/core/java/com/android/server/connectivity/DnsManager.java +7 −3 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ 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_OPPORTUNISTIC; import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; Loading @@ -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_SAMPLE_VALIDITY_SECONDS; 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_SPECIFIER; Loading Loading @@ -184,6 +185,7 @@ public class DnsManager { public static Uri[] getPrivateDnsSettingsUris() { return new Uri[]{ Settings.Global.getUriFor(PRIVATE_DNS_DEFAULT_MODE), Settings.Global.getUriFor(PRIVATE_DNS_MODE), Settings.Global.getUriFor(PRIVATE_DNS_SPECIFIER), }; Loading Loading @@ -485,8 +487,10 @@ public class DnsManager { } private static String getPrivateDnsMode(ContentResolver cr) { final String mode = getStringSetting(cr, PRIVATE_DNS_MODE); return !TextUtils.isEmpty(mode) ? mode : PRIVATE_DNS_DEFAULT_MODE; String mode = getStringSetting(cr, PRIVATE_DNS_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) { Loading
tests/net/java/com/android/server/connectivity/DnsManagerTest.java +35 −9 Original line number Diff line number Diff line Loading @@ -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_OPPORTUNISTIC; 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.assertFalse; Loading @@ -40,6 +43,7 @@ import android.support.test.runner.AndroidJUnit4; import android.test.mock.MockContentResolver; import com.android.internal.util.test.FakeSettingsProvider; import com.android.server.connectivity.DnsManager.PrivateDnsConfig; import com.android.server.connectivity.MockableSystemProperties; import java.net.InetAddress; Loading Loading @@ -84,10 +88,9 @@ public class DnsManagerTest { mDnsManager = new DnsManager(mCtx, mNMService, mSystemProperties); // Clear the private DNS settings Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_MODE, ""); Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_SPECIFIER, ""); Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, ""); Settings.Global.putString(mContentResolver, PRIVATE_DNS_MODE, ""); Settings.Global.putString(mContentResolver, PRIVATE_DNS_SPECIFIER, ""); } @Test Loading Loading @@ -127,9 +130,8 @@ public class DnsManagerTest { TEST_IFACENAME)); Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME); Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_SPECIFIER, "strictmode.com"); PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME); Settings.Global.putString(mContentResolver, PRIVATE_DNS_SPECIFIER, "strictmode.com"); mDnsManager.updatePrivateDns(new Network(TEST_NETID), new DnsManager.PrivateDnsConfig("strictmode.com", new InetAddress[] { InetAddress.parseNumericAddress("6.6.6.6"), Loading Loading @@ -222,8 +224,7 @@ public class DnsManagerTest { assertNull(lp.getPrivateDnsServerName()); // Turn private DNS mode off Settings.Global.putString(mContentResolver, Settings.Global.PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OFF); Settings.Global.putString(mContentResolver, PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OFF); mDnsManager.updatePrivateDns(new Network(TEST_NETID), mDnsManager.getPrivateDnsConfig()); mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT); Loading @@ -234,4 +235,29 @@ public class DnsManagerTest { assertFalse(lp.isPrivateDnsActive()); 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); } }