diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2013-09-24 11:05:57 -0700 |
---|---|---|
committer | Robert Greenwalt <rgreenwalt@google.com> | 2013-09-25 16:58:45 -0700 |
commit | 69887e838814642a7ae78fc810656c7c8afc2a19 (patch) | |
tree | d883784e7b9096bff984ce8e42403e7e1679aae1 /services | |
parent | 66a9b2d7392a7f6334b5fe23d00ba718f3fa1851 (diff) | |
download | frameworks_base-69887e838814642a7ae78fc810656c7c8afc2a19.zip frameworks_base-69887e838814642a7ae78fc810656c7c8afc2a19.tar.gz frameworks_base-69887e838814642a7ae78fc810656c7c8afc2a19.tar.bz2 |
Don't redirect dns to an iface without dns servers
bug:10115444
Change-Id: Ide42072bb3aae21f8e99c11c2de263e9a765b911
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 20 | ||||
-rw-r--r-- | services/java/com/android/server/connectivity/Vpn.java | 18 |
2 files changed, 25 insertions, 13 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 3f13f3a..56d5010 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -2794,7 +2794,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } mNumDnsEntries = last; } catch (Exception e) { - if (DBG) loge("exception setting default dns interface: " + e); + loge("exception setting default dns interface: " + e); } } @@ -3779,31 +3779,33 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } - public void addUserForwarding(String interfaze, int uid) { + public void addUserForwarding(String interfaze, int uid, boolean forwardDns) { int uidStart = uid * UserHandle.PER_USER_RANGE; int uidEnd = uidStart + UserHandle.PER_USER_RANGE - 1; - addUidForwarding(interfaze, uidStart, uidEnd); + addUidForwarding(interfaze, uidStart, uidEnd, forwardDns); } - public void clearUserForwarding(String interfaze, int uid) { + public void clearUserForwarding(String interfaze, int uid, boolean forwardDns) { int uidStart = uid * UserHandle.PER_USER_RANGE; int uidEnd = uidStart + UserHandle.PER_USER_RANGE - 1; - clearUidForwarding(interfaze, uidStart, uidEnd); + clearUidForwarding(interfaze, uidStart, uidEnd, forwardDns); } - public void addUidForwarding(String interfaze, int uidStart, int uidEnd) { + public void addUidForwarding(String interfaze, int uidStart, int uidEnd, + boolean forwardDns) { try { mNetd.setUidRangeRoute(interfaze,uidStart, uidEnd); - mNetd.setDnsInterfaceForUidRange(interfaze, uidStart, uidEnd); + if (forwardDns) mNetd.setDnsInterfaceForUidRange(interfaze, uidStart, uidEnd); } catch (RemoteException e) { } } - public void clearUidForwarding(String interfaze, int uidStart, int uidEnd) { + public void clearUidForwarding(String interfaze, int uidStart, int uidEnd, + boolean forwardDns) { try { mNetd.clearUidRangeRoute(interfaze, uidStart, uidEnd); - mNetd.clearDnsInterfaceForUidRange(uidStart, uidEnd); + if (forwardDns) mNetd.clearDnsInterfaceForUidRange(uidStart, uidEnd); } catch (RemoteException e) { } diff --git a/services/java/com/android/server/connectivity/Vpn.java b/services/java/com/android/server/connectivity/Vpn.java index 8cc5b4f..7c456ae 100644 --- a/services/java/com/android/server/connectivity/Vpn.java +++ b/services/java/com/android/server/connectivity/Vpn.java @@ -242,9 +242,11 @@ public class Vpn extends BaseNetworkStateTracker { try { mCallback.restore(); final int size = mVpnUsers.size(); + final boolean forwardDns = (mConfig.dnsServers != null && + mConfig.dnsServers.size() != 0); for (int i = 0; i < size; i++) { int user = mVpnUsers.keyAt(i); - mCallback.clearUserForwarding(mInterface, user); + mCallback.clearUserForwarding(mInterface, user, forwardDns); hideNotification(user); } @@ -443,8 +445,12 @@ public class Vpn extends BaseNetworkStateTracker { if (!isRunningLocked()) { throw new IllegalStateException("VPN is not active"); } + + final boolean forwardDns = (mConfig.dnsServers != null && + mConfig.dnsServers.size() != 0); + // add the user - mCallback.addUserForwarding(mInterface, user); + mCallback.addUserForwarding(mInterface, user, forwardDns); mVpnUsers.put(user, true); // show the notification @@ -484,7 +490,9 @@ public class Vpn extends BaseNetworkStateTracker { if (!isRunningLocked()) { throw new IllegalStateException("VPN is not active"); } - mCallback.clearUserForwarding(mInterface, user); + final boolean forwardDns = (mConfig.dnsServers != null && + mConfig.dnsServers.size() != 0); + mCallback.clearUserForwarding(mInterface, user, forwardDns); mVpnUsers.delete(user); hideNotification(user); } @@ -553,9 +561,11 @@ public class Vpn extends BaseNetworkStateTracker { final long token = Binder.clearCallingIdentity(); try { final int size = mVpnUsers.size(); + final boolean forwardDns = (mConfig.dnsServers != null && + mConfig.dnsServers.size() != 0); for (int i = 0; i < size; i++) { int user = mVpnUsers.keyAt(i); - mCallback.clearUserForwarding(mInterface, user); + mCallback.clearUserForwarding(mInterface, user, forwardDns); hideNotification(user); } mVpnUsers = null; |