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

Commit 65417d40 authored by Erik Kline's avatar Erik Kline Committed by android-build-merger
Browse files

Merge "Fixup SntpClient to bypass Private DNS" into pi-dev am: 18474fcf

am: d49e0cf9

Change-Id: I327b816a9f472e94328232157a3b8887d17b0baf
parents 4094c84f d49e0cf9
Loading
Loading
Loading
Loading
+42 −2
Original line number Original line Diff line number Diff line
@@ -85,6 +85,21 @@ public class Network implements Parcelable {
    private static final long HANDLE_MAGIC = 0xcafed00dL;
    private static final long HANDLE_MAGIC = 0xcafed00dL;
    private static final int HANDLE_MAGIC_SIZE = 32;
    private static final int HANDLE_MAGIC_SIZE = 32;


    // A boolean to control how getAllByName()/getByName() behaves in the face
    // of Private DNS.
    //
    // When true, these calls will request that DNS resolution bypass any
    // Private DNS that might otherwise apply. Use of this feature is restricted
    // and permission checks are made by netd (attempts to bypass Private DNS
    // without appropriate permission are silently turned into vanilla DNS
    // requests). This only affects DNS queries made using this network object.
    //
    // It it not parceled to receivers because (a) it can be set or cleared at
    // anytime and (b) receivers should be explicit about attempts to bypass
    // Private DNS so that the intent of the code is easily determined and
    // code search audits are possible.
    private boolean mPrivateDnsBypass = false;

    /**
    /**
     * @hide
     * @hide
     */
     */
@@ -108,7 +123,7 @@ public class Network implements Parcelable {
     * @throws UnknownHostException if the address lookup fails.
     * @throws UnknownHostException if the address lookup fails.
     */
     */
    public InetAddress[] getAllByName(String host) throws UnknownHostException {
    public InetAddress[] getAllByName(String host) throws UnknownHostException {
        return InetAddress.getAllByNameOnNet(host, netId);
        return InetAddress.getAllByNameOnNet(host, getNetIdForResolv());
    }
    }


    /**
    /**
@@ -122,7 +137,32 @@ public class Network implements Parcelable {
     *             if the address lookup fails.
     *             if the address lookup fails.
     */
     */
    public InetAddress getByName(String host) throws UnknownHostException {
    public InetAddress getByName(String host) throws UnknownHostException {
        return InetAddress.getByNameOnNet(host, netId);
        return InetAddress.getByNameOnNet(host, getNetIdForResolv());
    }

    /**
     * Specify whether or not Private DNS should be bypassed when attempting
     * to use {@link getAllByName()}/{@link getByName()} methods on the given
     * instance for hostname resolution.
     *
     * @hide
     */
    public void setPrivateDnsBypass(boolean bypass) {
        mPrivateDnsBypass = bypass;
    }

    /**
     * Returns a netid marked with the Private DNS bypass flag.
     *
     * This flag must be kept in sync with the NETID_USE_LOCAL_NAMESERVERS flag
     * in system/netd/include/NetdClient.h.
     *
     * @hide
     */
    public int getNetIdForResolv() {
        return mPrivateDnsBypass
                ? (int) (0x80000000L | (long) netId)  // Non-portable DNS resolution flag.
                : netId;
    }
    }


    /**
    /**
+4 −0
Original line number Original line Diff line number Diff line
@@ -84,6 +84,10 @@ public class SntpClient {
     * @return true if the transaction was successful.
     * @return true if the transaction was successful.
     */
     */
    public boolean requestTime(String host, int timeout, Network network) {
    public boolean requestTime(String host, int timeout, Network network) {
        // This flag only affects DNS resolution and not other socket semantics,
        // therefore it's safe to set unilaterally rather than take more
        // defensive measures like making a copy.
        network.setPrivateDnsBypass(true);
        InetAddress address = null;
        InetAddress address = null;
        try {
        try {
            address = network.getByName(host);
            address = network.getByName(host);