From e642c06280c7850dab210079bf0f0938c585358e Mon Sep 17 00:00:00 2001 From: Chirayu Desai Date: Mon, 24 Jun 2019 21:27:35 +0530 Subject: [PATCH] Add Quad9 DNS as a private DNS provider TODO: Add tests Also includes: commit d82a7a0585671903ba18cd1d8fab25d9275c2a25 Author: Oliver Scott Date: Fri Jan 29 10:57:26 2021 -0500 Fix Cloudflare private DNS provider Change-Id: I5932d8d7e82621220eb119a212ccecf15e284421 (cherry picked from commit 24abf646a0df5e00285d1b698adec03eb897388f) Change-Id: I7e8a320d47e7c5ddbcb9acfaf23032ae92d5d70d (cherry picked from commit 96ce93f7bf7233008591d22a0d24a6d7cd0a94ff) --- .../android/net/ConnectivitySettingsManager.java | 14 ++++++++++++++ .../android/server/connectivity/DnsManager.java | 6 ++++++ .../net/module/util/ConnectivitySettingsUtils.java | 7 +++++++ 3 files changed, 27 insertions(+) diff --git a/framework/src/android/net/ConnectivitySettingsManager.java b/framework/src/android/net/ConnectivitySettingsManager.java index ba7df7ff9b..f3758c54c5 100644 --- a/framework/src/android/net/ConnectivitySettingsManager.java +++ b/framework/src/android/net/ConnectivitySettingsManager.java @@ -356,6 +356,12 @@ public class ConnectivitySettingsManager { */ public static final int PRIVATE_DNS_MODE_OFF = ConnectivitySettingsUtils.PRIVATE_DNS_MODE_OFF; + /** + * @hide + */ + public static final int PRIVATE_DNS_MODE_QUADNINE = + ConnectivitySettingsUtils.PRIVATE_DNS_MODE_QUADNINE; + /** * One of the private DNS modes that indicates the private DNS mode is automatic, which * will try to use the current DNS as private DNS. @@ -371,10 +377,17 @@ public class ConnectivitySettingsManager { public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = ConnectivitySettingsUtils.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; + /** + * @hide + */ + public static final String PRIVATE_DNS_SPECIFIER_QUADNINE = "dns.quad9.net"; + + /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(value = { PRIVATE_DNS_MODE_OFF, + PRIVATE_DNS_MODE_QUADNINE, PRIVATE_DNS_MODE_OPPORTUNISTIC, PRIVATE_DNS_MODE_PROVIDER_HOSTNAME, }) @@ -829,6 +842,7 @@ public class ConnectivitySettingsManager { public static void setPrivateDnsDefaultMode(@NonNull Context context, @NonNull @PrivateDnsMode int mode) { if (!(mode == PRIVATE_DNS_MODE_OFF + || mode == PRIVATE_DNS_MODE_QUADNINE || mode == PRIVATE_DNS_MODE_OPPORTUNISTIC || mode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) { throw new IllegalArgumentException("Invalid private dns mode"); diff --git a/service/src/com/android/server/connectivity/DnsManager.java b/service/src/com/android/server/connectivity/DnsManager.java index c940eecd46..20f2e9bf98 100644 --- a/service/src/com/android/server/connectivity/DnsManager.java +++ b/service/src/com/android/server/connectivity/DnsManager.java @@ -23,8 +23,10 @@ import static android.net.ConnectivitySettingsManager.DNS_RESOLVER_SUCCESS_THRES import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_DEFAULT_MODE; import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE; import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_OFF; +import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_QUADNINE; import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER; +import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER_QUADNINE; import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE; import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS; @@ -145,6 +147,10 @@ public class DnsManager { return new PrivateDnsConfig(specifier, null); } + if (PRIVATE_DNS_MODE_QUADNINE == mode) { + return new PrivateDnsConfig(PRIVATE_DNS_SPECIFIER_QUADNINE, null); + } + return new PrivateDnsConfig(useTls); } diff --git a/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java b/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java index f4856b344f..08619fe3e2 100644 --- a/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java +++ b/staticlibs/framework/com/android/net/module/util/ConnectivitySettingsUtils.java @@ -32,10 +32,12 @@ public class ConnectivitySettingsUtils { public static final int PRIVATE_DNS_MODE_OFF = 1; public static final int PRIVATE_DNS_MODE_OPPORTUNISTIC = 2; public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = 3; + public static final int PRIVATE_DNS_MODE_QUADNINE = 4; public static final String PRIVATE_DNS_DEFAULT_MODE = "private_dns_default_mode"; public static final String PRIVATE_DNS_MODE = "private_dns_mode"; public static final String PRIVATE_DNS_MODE_OFF_STRING = "off"; + public static final String PRIVATE_DNS_MODE_QUADNINE_STRING = "quadnine"; public static final String PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING = "opportunistic"; public static final String PRIVATE_DNS_MODE_PROVIDER_HOSTNAME_STRING = "hostname"; public static final String PRIVATE_DNS_SPECIFIER = "private_dns_specifier"; @@ -50,6 +52,8 @@ public class ConnectivitySettingsUtils { switch (mode) { case PRIVATE_DNS_MODE_OFF: return PRIVATE_DNS_MODE_OFF_STRING; + case PRIVATE_DNS_MODE_QUADNINE: + return PRIVATE_DNS_MODE_QUADNINE_STRING; case PRIVATE_DNS_MODE_OPPORTUNISTIC: return PRIVATE_DNS_MODE_OPPORTUNISTIC_STRING; case PRIVATE_DNS_MODE_PROVIDER_HOSTNAME: @@ -67,6 +71,8 @@ public class ConnectivitySettingsUtils { switch (mode) { case "off": return PRIVATE_DNS_MODE_OFF; + case "quadnine": + return PRIVATE_DNS_MODE_QUADNINE; case "hostname": return PRIVATE_DNS_MODE_PROVIDER_HOSTNAME; case "opportunistic": @@ -100,6 +106,7 @@ public class ConnectivitySettingsUtils { */ public static void setPrivateDnsMode(@NonNull Context context, int mode) { if (!(mode == PRIVATE_DNS_MODE_OFF + || mode == PRIVATE_DNS_MODE_QUADNINE || mode == PRIVATE_DNS_MODE_OPPORTUNISTIC || mode == PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) { throw new IllegalArgumentException("Invalid private dns mode: " + mode); -- GitLab