Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69887e83 authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

Don't redirect dns to an iface without dns servers

bug:10115444
Change-Id: Ide42072bb3aae21f8e99c11c2de263e9a765b911
parent 66a9b2d7
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -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) {
            }

+14 −4
Original line number Diff line number Diff line
@@ -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;