From: Tobias Brunner Date: Tue, 5 Mar 2019 16:26:26 +0000 (+0100) Subject: android: Use configured custom DNS servers X-Git-Tag: 5.8.0dr2~12^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dd5de792cf73076a8f6674e40e03e815b3112699;p=thirdparty%2Fstrongswan.git android: Use configured custom DNS servers --- diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java index ac9ff495fa..a43095fe08 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java @@ -838,8 +838,7 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe { try { - mBuilder.addDnsServer(address); - mCache.recordAddressFamily(address); + mCache.addDnsServer(address); } catch (IllegalArgumentException ex) { @@ -1073,8 +1072,9 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe private final int mSplitTunneling; private final SelectedAppsHandling mAppHandling; private final SortedSet mSelectedApps; + private final List mDnsServers = new ArrayList<>(); private int mMtu; - private boolean mIPv4Seen, mIPv6Seen; + private boolean mIPv4Seen, mIPv6Seen, mDnsServersConfigured; public BuilderCache(VpnProfile profile) { @@ -1111,6 +1111,23 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe } mAppHandling = appHandling; + if (profile.getDnsServers() != null) + { + for (String server : profile.getDnsServers().split("\\s+")) + { + try + { + mDnsServers.add(InetAddress.getByName(server)); + recordAddressFamily(server); + mDnsServersConfigured = true; + } + catch (UnknownHostException e) + { + e.printStackTrace(); + } + } + } + /* set a default MTU, will be set by the daemon for regular interfaces */ Integer mtu = profile.getMTU(); mMtu = mtu == null ? Constants.MTU_MAX : mtu; @@ -1129,6 +1146,25 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe } } + public void addDnsServer(String address) + { + /* ignore received DNS servers if any were configured */ + if (mDnsServersConfigured) + { + return; + } + + try + { + mDnsServers.add(InetAddress.getByName(address)); + recordAddressFamily(address); + } + catch (UnknownHostException e) + { + e.printStackTrace(); + } + } + public void addRoute(String address, int prefixLength) { try @@ -1179,6 +1215,10 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe { builder.addAddress(address.getFrom(), address.getPrefix()); } + for (InetAddress server : mDnsServers) + { + builder.addDnsServer(server); + } /* add routes depending on whether split tunneling is allowed or not, * that is, whether we have to handle and block non-VPN traffic */ if ((mSplitTunneling & VpnProfile.SPLIT_TUNNELING_BLOCK_IPV4) == 0)