diff options
Diffstat (limited to 'data/libevent')
-rw-r--r-- | data/libevent/_metadata/in.1200.00 | 0 | ||||
-rw-r--r-- | data/libevent/darwindns.diff | 108 |
2 files changed, 108 insertions, 0 deletions
diff --git a/data/libevent/_metadata/in.1200.00 b/data/libevent/_metadata/in.1200.00 new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/data/libevent/_metadata/in.1200.00 diff --git a/data/libevent/darwindns.diff b/data/libevent/darwindns.diff new file mode 100644 index 000000000..e751e1805 --- /dev/null +++ b/data/libevent/darwindns.diff @@ -0,0 +1,108 @@ +diff -ur libevent-2.1.8-stable/evdns.c libevent-2.1.8-stable+ios/evdns.c +--- libevent-2.1.8-stable/evdns.c 2017-01-29 07:51:00.000000000 -1000 ++++ libevent-2.1.8-stable+ios/evdns.c 2019-10-29 14:49:24.000000000 -1000 +@@ -3896,6 +3896,76 @@ + } + #endif + ++#ifdef __APPLE__ ++#include <dnsinfo.h> ++ ++int ++load_nameservers_from_systemconfiguration(struct evdns_base *base) ++{ ++ int found = 0; ++ ++ ASSERT_LOCKED(base); ++ ++ dns_config_t *dns_config = dns_configuration_copy(); ++ if (!dns_config) return -1; ++ ++ if (dns_config->n_resolver > 0) { ++ for (int i=0; i<dns_config->n_resolver; i++) { ++ // This should probably support domain specific servers but idk how ++ if (dns_config->resolver[i]->domain == NULL) { ++ char buf[1024]; ++ for (int j=0; j<dns_config->resolver[i]->n_nameserver; j++) { ++ struct sockaddr *nameserver = dns_config->resolver[i]->nameserver[j]; ++ const char *ns = NULL; ++ if (nameserver->sa_family == AF_INET) { ++ ns = inet_ntop(nameserver->sa_family, &((struct sockaddr_in*)nameserver)->sin_addr, buf, 1024); ++ } else if (nameserver->sa_family == AF_INET6) { ++ ns = inet_ntop(nameserver->sa_family, &((struct sockaddr_in6*)nameserver)->sin6_addr, buf, 1024); ++ } ++ if (ns && evdns_base_nameserver_ip_add(base, ns)) { ++ found=1; ++ } ++ } ++ } ++ } ++ } ++ free(dns_config); ++ ++ if (found) { ++ log(EVDNS_LOG_DEBUG,"Found nameservers in systemconfiguration"); ++ } else { ++ log(EVDNS_LOG_DEBUG,"Didn't find nameservers in systemconfiguration"); ++ } ++ ++ return found ? 0 : -1; ++} ++ ++int ++evdns_base_config_darwin_nameservers(struct evdns_base *base) ++{ ++ if (base == NULL) ++ base = current_base; ++ if (base == NULL) ++ return -1; ++ EVDNS_LOCK(base); ++ int r = evdns_base_resolv_conf_parse_impl(base, DNS_OPTIONS_ALL, "/etc/resolv.conf"); ++ int r2 = load_nameservers_from_systemconfiguration(base); ++ EVDNS_UNLOCK(base); ++ return (r==-1 && r2==-1)?-1:0; ++} ++ ++int ++evdns_config_darwin_nameservers(void) ++{ ++ if (!current_base) { ++ current_base = evdns_base_new(NULL, 1); ++ return current_base == NULL ? -1 : 0; ++ } else { ++ return evdns_base_config_darwin_nameservers(current_base); ++ } ++} ++#endif ++ + struct evdns_base * + evdns_base_new(struct event_base *event_base, int flags) + { +@@ -3960,7 +4030,11 @@ + #ifdef _WIN32 + r = evdns_base_config_windows_nameservers(base); + #else ++#ifdef __APPLE__ ++ r = evdns_base_config_darwin_nameservers(base); ++#else + r = evdns_base_resolv_conf_parse(base, DNS_OPTIONS_ALL, "/etc/resolv.conf"); ++#endif // __APPLE__ + #endif + if (r == -1) { + evdns_base_free_and_unlock(base, 0); +diff -ur libevent-2.1.8-stable/include/event2/dns_compat.h libevent-2.1.8-stable+ios/include/event2/dns_compat.h +--- libevent-2.1.8-stable/include/event2/dns_compat.h 2016-10-04 09:55:31.000000000 -1000 ++++ libevent-2.1.8-stable+ios/include/event2/dns_compat.h 2019-10-29 14:44:10.000000000 -1000 +@@ -329,6 +329,12 @@ + #define EVDNS_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED + #endif + ++#ifdef __APPLE__ ++int load_nameservers_from_systemconfiguration(struct evdns_base *base); ++int evdns_base_config_darwin_nameservers(struct evdns_base *base); ++int evdns_config_darwin_nameservers(void); ++#endif ++ + #ifdef __cplusplus + } + #endif |