Merge "Don't redirect dns to an iface without dns servers" into klp-dev
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index f005f5f..59b559e 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -2794,7 +2794,7 @@
             }
             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 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 45797b2..f5a7039 100644
--- a/services/java/com/android/server/connectivity/Vpn.java
+++ b/services/java/com/android/server/connectivity/Vpn.java
@@ -242,9 +242,11 @@
             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 @@
         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 @@
             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 @@
                     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;