|
@@ -458,65 +458,6 @@ void MacEthernetTap::setDns(const char *domain, const std::vector<InetAddress> &
|
|
|
{
|
|
|
MacDNSHelper::doTheThing();
|
|
|
MacDNSHelper::setDNS(this->_nwid, domain, servers);
|
|
|
- // _removeDnsConfig(domain, servers);
|
|
|
- // _addDnsConfig(domain, servers);
|
|
|
-}
|
|
|
-
|
|
|
-void MacEthernetTap::_removeDnsConfig(const char *domain, const std::vector<InetAddress> &servers)
|
|
|
-{
|
|
|
- std::string tmpfile = std::tmpnam(nullptr);
|
|
|
- std::FILE *remf = std::fopen(tmpfile.c_str(), "w");
|
|
|
- char buf[4096] = {0};
|
|
|
- sprintf(buf, "remove State:/Network/Service/%.16llx/DNS\n", _nwid);
|
|
|
- std::fputs(buf, remf);
|
|
|
- std::fflush(remf);
|
|
|
- std::fclose(remf);
|
|
|
- fprintf(stderr, "wrote tmpfile %s\n", tmpfile.c_str());
|
|
|
- long cpid = (long)vfork();
|
|
|
- if (cpid == 0) {
|
|
|
- char cmd[1024] = {0};
|
|
|
- sprintf(cmd, "/usr/sbin/scutil < %s", tmpfile.c_str());
|
|
|
- ::execl("/bin/sh", "-c", cmd);
|
|
|
- } else if (cpid > 0) {
|
|
|
- int exitcode = -1;
|
|
|
- ::waitpid(cpid, &exitcode,0);
|
|
|
- if (exitcode) {
|
|
|
- throw std::runtime_error("scutil dns config remove error");
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void MacEthernetTap::_addDnsConfig(const char *domain, const std::vector<InetAddress> &servers)
|
|
|
-{
|
|
|
- std::string tmpfile = std::tmpnam(nullptr);
|
|
|
- std::FILE *addf = std::fopen(tmpfile.c_str(), "w");
|
|
|
- char buf[4096] = {0};
|
|
|
- sprintf(buf, "d.init\n");
|
|
|
- sprintf(buf, "d.add ServerAddresses *");
|
|
|
- for (auto it = servers.begin(); it != servers.end(); ++it) {
|
|
|
- char ipbuf[128] = {0};
|
|
|
- sprintf(buf, " %s", it->toIpString(buf));
|
|
|
- }
|
|
|
- sprintf(buf, "\n");
|
|
|
- sprintf(buf, "d.add SupplementalMatchDomains * %s\n", domain);
|
|
|
- sprintf(buf, "set State:/Network/Service/%.16llx/DNS", _nwid);
|
|
|
- std::fputs(buf, addf);
|
|
|
- std::fflush(addf);
|
|
|
- std::fclose(addf);
|
|
|
- fprintf(stderr, "wrote add tmpfile %s\n", tmpfile.c_str());
|
|
|
- long cpid = (long)vfork();
|
|
|
- if (cpid == 0) {
|
|
|
- char cmd[1024];
|
|
|
- sprintf(cmd, "'/usr/bin/scutil < %s'", tmpfile.c_str());
|
|
|
- fprintf(stderr, "%s\n", cmd);
|
|
|
- ::execl("/bin/sh", "-c", cmd);
|
|
|
- } else if (cpid > 0) {
|
|
|
- int exitcode = -1;
|
|
|
- ::waitpid(cpid, &exitcode, 0);
|
|
|
- if (exitcode) {
|
|
|
- throw std::runtime_error("scutil dns config add error");
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
} // namespace ZeroTier
|