Allow bypassing private DNS via setNetworkForProcess.
Currently, bypassing private DNS requires calling
setNetworkForResolv, which is not accessible except through
the deprecated setProcessDefaultNetworkForHostResolution API.
Allow apps to do this via setNetworkForProcess as well.
Bug: 112869080
Test: atest netd_unit_test netd_integration_test resolv_unit_test resolv_integration_test
Change-Id: I033d1ba3f0227cb54eec352d4b2ded8b3ffa8539
diff --git a/client/NetdClient.cpp b/client/NetdClient.cpp
index d22b5b2..d70f9fa 100644
--- a/client/NetdClient.cpp
+++ b/client/NetdClient.cpp
@@ -122,7 +122,7 @@
if (socketFd == -1) {
return -1;
}
- unsigned netId = netIdForProcess;
+ unsigned netId = netIdForProcess & ~NETID_USE_LOCAL_NAMESERVERS;
if (netId != NETID_UNSET && FwmarkClient::shouldSetFwmark(domain)) {
if (int error = setNetworkForSocket(netId, socketFd)) {
return closeFdAndSetErrno(socketFd, error);
@@ -165,7 +165,7 @@
}
int error = setNetworkForSocket(netId, socketFd);
if (!error) {
- *target = (target == &netIdForResolv) ? requestedNetId : netId;
+ *target = requestedNetId;
}
close(socketFd);
return error;
@@ -327,7 +327,7 @@
}
extern "C" unsigned getNetworkForProcess() {
- return netIdForProcess;
+ return netIdForProcess & ~NETID_USE_LOCAL_NAMESERVERS;
}
extern "C" int setNetworkForSocket(unsigned netId, int socketFd) {
@@ -463,4 +463,4 @@
extern "C" void resNetworkCancel(int fd) {
close(fd);
-}
\ No newline at end of file
+}