summaryrefslogtreecommitdiff
path: root/data/libresolv
diff options
context:
space:
mode:
authorJay Freeman <saurik@saurik.com>2008-11-21 18:50:08 +0000
committerJay Freeman <saurik@saurik.com>2008-11-21 18:50:08 +0000
commite54fff2be5aea9105abfb1ca5300d0b90532fcb9 (patch)
treeba560855708026392d6eb923b1620c3ad447bf1c /data/libresolv
parentcc2c7128f4ca2ff2867064279bd7471a0720a827 (diff)
Renamed libresolv into the mainline.
git-svn-id: http://svn.telesphoreo.org/trunk@507 514c082c-b64e-11dc-b46d-3d985efe055d
Diffstat (limited to 'data/libresolv')
-rw-r--r--data/libresolv/_metadata/description1
l---------data/libresolv/_metadata/license1
l---------data/libresolv/_metadata/maintainer1
-rw-r--r--data/libresolv/_metadata/priority1
-rw-r--r--data/libresolv/_metadata/role1
-rw-r--r--data/libresolv/_metadata/section1
-rw-r--r--data/libresolv/_metadata/tags1
-rw-r--r--data/libresolv/_metadata/version1
-rw-r--r--data/libresolv/dnsinfo_copy.c338
-rw-r--r--data/libresolv/dnsinfo_private.c76
-rw-r--r--data/libresolv/dnsinfo_private.h193
-rw-r--r--data/libresolv/libresolv-25.tar.gzbin0 -> 135079 bytes
-rw-r--r--data/libresolv/make.sh9
-rw-r--r--data/libresolv/pselect.diff22
-rw-r--r--data/libresolv/shared_dns_info.h180
-rw-r--r--data/libresolv/shared_dns_infoUser.c524
-rw-r--r--data/libresolv/shared_dns_info_types.h51
17 files changed, 1401 insertions, 0 deletions
diff --git a/data/libresolv/_metadata/description b/data/libresolv/_metadata/description
new file mode 100644
index 000000000..2183d8cc4
--- /dev/null
+++ b/data/libresolv/_metadata/description
@@ -0,0 +1 @@
+Darwin's copy of Bind's resolution engine
diff --git a/data/libresolv/_metadata/license b/data/libresolv/_metadata/license
new file mode 120000
index 000000000..9e5e5e89d
--- /dev/null
+++ b/data/libresolv/_metadata/license
@@ -0,0 +1 @@
+../../../licenses/apsl-2.0 \ No newline at end of file
diff --git a/data/libresolv/_metadata/maintainer b/data/libresolv/_metadata/maintainer
new file mode 120000
index 000000000..0fa66e077
--- /dev/null
+++ b/data/libresolv/_metadata/maintainer
@@ -0,0 +1 @@
+../../../people/saurik \ No newline at end of file
diff --git a/data/libresolv/_metadata/priority b/data/libresolv/_metadata/priority
new file mode 100644
index 000000000..1c96b78c1
--- /dev/null
+++ b/data/libresolv/_metadata/priority
@@ -0,0 +1 @@
++important
diff --git a/data/libresolv/_metadata/role b/data/libresolv/_metadata/role
new file mode 100644
index 000000000..8d0320866
--- /dev/null
+++ b/data/libresolv/_metadata/role
@@ -0,0 +1 @@
+developer
diff --git a/data/libresolv/_metadata/section b/data/libresolv/_metadata/section
new file mode 100644
index 000000000..8708e4b54
--- /dev/null
+++ b/data/libresolv/_metadata/section
@@ -0,0 +1 @@
+Networking
diff --git a/data/libresolv/_metadata/tags b/data/libresolv/_metadata/tags
new file mode 100644
index 000000000..a8928cec8
--- /dev/null
+++ b/data/libresolv/_metadata/tags
@@ -0,0 +1 @@
+purpose::library
diff --git a/data/libresolv/_metadata/version b/data/libresolv/_metadata/version
new file mode 100644
index 000000000..7273c0fa8
--- /dev/null
+++ b/data/libresolv/_metadata/version
@@ -0,0 +1 @@
+25
diff --git a/data/libresolv/dnsinfo_copy.c b/data/libresolv/dnsinfo_copy.c
new file mode 100644
index 000000000..882b697b9
--- /dev/null
+++ b/data/libresolv/dnsinfo_copy.c
@@ -0,0 +1,338 @@
+/*
+ * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Modification History
+ *
+ * March 9, 2004 Allan Nathanson <ajn@apple.com>
+ * - initial revision
+ */
+
+#include <stdlib.h>
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+
+#include "dnsinfo.h"
+#include "dnsinfo_private.h"
+#include "shared_dns_info.h"
+
+
+static boolean_t
+add_list(void **padding, uint32_t *n_padding, int32_t count, int32_t size, void **list)
+{
+ int32_t need;
+
+ need = count * size;
+ if (need > *n_padding) {
+ return FALSE;
+ }
+
+ *list = (need == 0) ? NULL : *padding;
+ *padding += need;
+ *n_padding -= need;
+ return TRUE;
+}
+
+
+static _dns_config_buf_t *
+copy_dns_info()
+{
+ uint8_t *buf = NULL;
+ dnsDataOut_t dataRef = NULL;
+ mach_msg_type_number_t dataLen = 0;
+ mach_port_t server;
+ kern_return_t status;
+
+ server = _dns_configuration_server_port();
+ if (server == MACH_PORT_NULL) {
+ return NULL;
+ }
+
+ status = shared_dns_infoGet(server, &dataRef, &dataLen);
+ (void)mach_port_deallocate(mach_task_self(), server);
+ if (status != KERN_SUCCESS) {
+ mach_error("shared_dns_infoGet():", status);
+ return NULL;
+ }
+
+ if (dataRef != NULL) {
+ if (dataLen >= sizeof(_dns_config_buf_t)) {
+ _dns_config_buf_t *config = (_dns_config_buf_t *)dataRef;
+ uint32_t len;
+ uint32_t n_padding = ntohl(config->n_padding);
+
+ len = dataLen + n_padding;
+ buf = malloc(len);
+ bcopy((void *)dataRef, buf, dataLen);
+ bzero(&buf[dataLen], n_padding);
+ }
+
+ status = vm_deallocate(mach_task_self(), (vm_address_t)dataRef, dataLen);
+ if (status != KERN_SUCCESS) {
+ mach_error("vm_deallocate():", status);
+ free(buf);
+ return NULL;
+ }
+ }
+
+ return (_dns_config_buf_t *)buf;
+}
+
+
+static dns_resolver_t *
+expand_resolver(_dns_resolver_buf_t *buf, uint32_t n_buf, void **padding, uint32_t *n_padding)
+{
+ dns_attribute_t *attribute;
+ uint32_t n_attribute;
+ int32_t n_nameserver = 0;
+ int32_t n_search = 0;
+ int32_t n_sortaddr = 0;
+ dns_resolver_t *resolver = (dns_resolver_t *)&buf->resolver;
+
+ if (n_buf < sizeof(_dns_resolver_buf_t)) {
+ goto error;
+ }
+
+ // initialize domain
+
+ resolver->domain = NULL;
+
+ // initialize nameserver list
+
+ resolver->n_nameserver = ntohl(resolver->n_nameserver);
+ if (!add_list(padding,
+ n_padding,
+ resolver->n_nameserver,
+ sizeof(struct sockaddr *),
+ (void **)&resolver->nameserver)) {
+ goto error;
+ }
+
+ // initialize port
+
+ resolver->port = ntohs(resolver->port);
+
+ // initialize search list
+
+ resolver->n_search = ntohl(resolver->n_search);
+ if (!add_list(padding,
+ n_padding,
+ resolver->n_search,
+ sizeof(char *),
+ (void **)&resolver->search)) {
+ goto error;
+ }
+
+ // initialize sortaddr list
+
+ resolver->n_sortaddr = ntohl(resolver->n_sortaddr);
+ if (!add_list(padding,
+ n_padding,
+ resolver->n_sortaddr,
+ sizeof(dns_sortaddr_t *),
+ (void **)&resolver->sortaddr)) {
+ goto error;
+ }
+
+ // initialize options
+
+ resolver->options = NULL;
+
+ // initialize timeout
+
+ resolver->timeout = ntohl(resolver->timeout);
+
+ // initialize search_order
+
+ resolver->search_order = ntohl(resolver->search_order);
+
+ // process resolver buffer "attribute" data
+
+ n_attribute = n_buf - sizeof(_dns_resolver_buf_t);
+ attribute = (dns_attribute_t *)&buf->attribute[0];
+ if (n_attribute != ntohl(buf->n_attribute)) {
+ goto error;
+ }
+
+ while (n_attribute >= sizeof(dns_attribute_t)) {
+ int32_t attribute_length = ntohl(attribute->length);
+
+ switch (ntohl(attribute->type)) {
+ case RESOLVER_ATTRIBUTE_DOMAIN :
+ resolver->domain = (char *)&attribute->attribute[0];
+ break;
+
+ case RESOLVER_ATTRIBUTE_ADDRESS :
+ resolver->nameserver[n_nameserver++] = (struct sockaddr *)&attribute->attribute[0];
+ break;
+
+ case RESOLVER_ATTRIBUTE_SEARCH :
+ resolver->search[n_search++] = (char *)&attribute->attribute[0];
+ break;
+
+ case RESOLVER_ATTRIBUTE_SORTADDR :
+ resolver->sortaddr[n_sortaddr++] = (dns_sortaddr_t *)&attribute->attribute[0];
+ break;
+
+ case RESOLVER_ATTRIBUTE_OPTIONS :
+ resolver->options = (char *)&attribute->attribute[0];
+ break;
+
+ default :
+ break;
+ }
+
+ attribute = (dns_attribute_t *)((void *)attribute + attribute_length);
+ n_attribute -= attribute_length;
+ }
+
+ if ((n_nameserver != resolver->n_nameserver) ||
+ (n_search != resolver->n_search ) ||
+ (n_sortaddr != resolver->n_sortaddr )) {
+ goto error;
+ }
+
+ return resolver;
+
+ error :
+
+ return NULL;
+}
+
+
+static dns_config_t *
+expand_config(_dns_config_buf_t *buf)
+{
+ dns_attribute_t *attribute;
+ dns_config_t *config = (dns_config_t *)buf;
+ uint32_t n_attribute;
+ uint32_t n_padding;
+ int32_t n_resolver = 0;
+ void *padding;
+
+ // establish padding
+
+ padding = &buf->attribute[ntohl(buf->n_attribute)];
+ n_padding = ntohl(buf->n_padding);
+
+ // initialize resolver list
+
+ config->n_resolver = ntohl(config->n_resolver);
+ if (!add_list(&padding,
+ &n_padding,
+ config->n_resolver,
+ sizeof(dns_resolver_t *),
+ (void **)&config->resolver)) {
+ goto error;
+ }
+
+ // process configuration buffer "attribute" data
+
+ n_attribute = ntohl(buf->n_attribute);
+ attribute = (dns_attribute_t *)&buf->attribute[0];
+
+ while (n_attribute >= sizeof(dns_attribute_t)) {
+ int32_t attribute_length = ntohl(attribute->length);
+
+ switch (ntohl(attribute->type)) {
+ case CONFIG_ATTRIBUTE_RESOLVER : {
+ dns_resolver_t *resolver;
+
+ // expand resolver buffer
+
+ resolver = expand_resolver((_dns_resolver_buf_t *)&attribute->attribute[0],
+ attribute_length - sizeof(dns_attribute_t),
+ &padding,
+ &n_padding);
+ if (resolver == NULL) {
+ goto error;
+ }
+
+ // add resolver to config list
+
+ config->resolver[n_resolver++] = resolver;
+
+ break;
+ }
+
+ default :
+ break;
+ }
+
+ attribute = (dns_attribute_t *)((void *)attribute + attribute_length);
+ n_attribute -= attribute_length;
+ }
+
+ if (n_resolver != config->n_resolver) {
+ goto error;
+ }
+
+ return config;
+
+ error :
+
+ return NULL;
+}
+
+
+__private_extern__
+const char *
+dns_configuration_notify_key()
+{
+ return _dns_configuration_notify_key();
+}
+
+
+__private_extern__
+dns_config_t *
+dns_configuration_copy()
+{
+ _dns_config_buf_t *buf;
+ dns_config_t *config;
+
+ buf = copy_dns_info();
+ if (buf == NULL) {
+ return NULL;
+ }
+
+ config = expand_config(buf);
+ if (config == NULL) {
+ free(buf);
+ return NULL;
+ }
+
+ return config;
+}
+
+
+__private_extern__
+void
+dns_configuration_free(dns_config_t *config)
+{
+ if (config == NULL) {
+ return;
+ }
+
+ free((void *)config);
+ return;
+}
diff --git a/data/libresolv/dnsinfo_private.c b/data/libresolv/dnsinfo_private.c
new file mode 100644
index 000000000..96663693a
--- /dev/null
+++ b/data/libresolv/dnsinfo_private.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2004, 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+/*
+ * Modification History
+ *
+ * March 9, 2004 Allan Nathanson <ajn@apple.com>
+ * - initial revision
+ */
+
+#include <stdlib.h>
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <servers/bootstrap.h>
+
+#include "dnsinfo_private.h"
+#include "shared_dns_info_types.h"
+
+
+__private_extern__
+const char *
+_dns_configuration_notify_key()
+{
+ return "com.apple.system.SystemConfiguration.dns_configuration";
+}
+
+
+__private_extern__
+mach_port_t
+_dns_configuration_server_port()
+{
+ mach_port_t server = MACH_PORT_NULL;
+ char *server_name;
+ kern_return_t status;
+
+ server_name = getenv("DNS_SERVER");
+ if (!server_name) {
+ server_name = DNS_SERVER;
+ }
+
+ status = bootstrap_look_up(bootstrap_port, server_name, &server);
+ switch (status) {
+ case BOOTSTRAP_SUCCESS :
+ /* service currently registered, "a good thing" (tm) */
+ break;
+ case BOOTSTRAP_UNKNOWN_SERVICE :
+ /* service not currently registered, try again later */
+ return MACH_PORT_NULL;
+ default :
+ mach_error("could not lookup DNS configuration info service:", status);
+ return MACH_PORT_NULL;
+ }
+
+ return server;
+}
+
diff --git a/data/libresolv/dnsinfo_private.h b/data/libresolv/dnsinfo_private.h
new file mode 100644
index 000000000..5e6ac0e5a
--- /dev/null
+++ b/data/libresolv/dnsinfo_private.h
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2004, 2005 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#ifndef __DNSINFO_PRIVATE_H__
+#define __DNSINFO_PRIVATE_H__
+
+
+#include <AvailabilityMacros.h>
+#include <sys/cdefs.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <mach/mach.h>
+
+#include "dnsinfo.h"
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040
+
+/*
+ * What's all of this stuff about???
+ *
+ * In order to minimize the amount of data conversions associated with
+ * storing, retrieving, and accessing the systems DNS configuration I
+ * have opted to create a memory image filled with the actual data
+ * types / structures that would be used by those applications which
+ * make use of these APIS. The implication here is that we use
+ * sockaddr's for addresses, char *'s for strings, etc.
+ *
+ * To achieve this goal the APIs which are used to store and access the
+ * configuration data build and use a single buffer of the relevant
+ * bits. When multiple instances of a given type / structure are needed
+ * we maintain a count, the actual data, and when the configuration has
+ * been unpacked, arrays of pointers to the data.
+ *
+ * In memory, the data looks as follows:
+ *
+ * +-------------------------------------------------------------------+
+ * | struct _dns_config_buf_t |
+ * +-+-------------+---------------------------------------------------+
+ * | | config | struct dns_config_t |
+ * | | +-+--------------+----------------------------------+
+ * | | | | n_resolver | int32_t | <- # of name resolvers
+ * | | | +--------------+----------------------------------+
+ * | | | | resolver | dns_resolver_t ** | <- not used during creation, filled
+ * | | | | | | in with pointer to a list of
+ * | | | | | | resolver configurations which be
+ * | | | | | | established in the "padding"
+ * | | | +--------------+----------------------------------+
+ * | | | | ... | ... |
+ * | +-------------+-+--------------+----------------------------------+
+ * | | n_attribute | uint32_t | <- how many bytes of "attribute"
+ * | | | | data is associated with the
+ * | | | | configuration
+ * |-+-------------+---------------------------------------------------+
+ * | | n_padding | uint32_t | <- how many additional bytes
+ * | | | | for arrays (of pointers), ...
+ * +-+-------------+---------------------------------------------------+
+ * | struct dns_attribute_t |
+ * |-+-------------+---------------------------------------------------+
+ * | | type | uint32_t | <- type of attribute (e.g. CONFIG_ATTRIBUTE_RESOLVER)
+ * | +-------------+---------------------------------------------------+
+ * | | length | uint32_t | <- length of the attribute
+ * | +-------------+---------------------------------------------------+
+ * | | attribute | struct _dns_resolver_buf_t | <- the attribute data (resolver configuration #1)
+ * | | +-+-------------+-----------------------------------+
+ * | | | | resolver | struct dns_resolver_t |
+ * | | | | +--------------+--------------------+
+ * | | | | | domain | char * | <- not used during creation,
+ * | | | | | | | filled in with pointer to
+ * | | | | | | | domain name in the "padding"
+ * | | | | +--------------+--------------------+
+ * | | | | | n_nameserver | int32_t | <- # of name server addresses
+ * | | | | +--------------+--------------------+
+ * | | | | | nameserver | struct sockaddr ** | <- not used during creation,
+ * | | | | | | | filled in with pointer to
+ * | | | | | | | a list of addresses which
+ * | | | | | | | will be established in the
+ * | | | | | | | "padding"
+ * | | | | +--------------+--------------------+
+ * | | | | | ... |
+ * | | +-+-------------+--------------+--------------------+
+ * | | | | n_attribute | uint32_t |
+ * | | +-+-------------+-----------------------------------+
+ * | | | | attribute | struct dns_attribute_t |
+ * | | | | +-+-----------+---------------------+
+ * | | | | | | type | uint32_t | <- type of attribute (e.g. RESOLVER_ATTRIBUTE_DOMAIN)
+ * | | | | | +-----------+---------------------+
+ * | | | | | | length | uint32_t | <- length of the attribute
+ * | | | | | +-----------+---------------------+
+ * | | | | | | attribute | | <- the attribute data ("apple.com")
+ * | | +-+-------------+-------------+---------------------+
+ * | | | | attribute | struct dns_attribute_t |
+ * | | | | +-+-----------+---------------------+
+ * | | | | | | type | uint32_t | <- type of attribute (e.g. RESOLVER_ATTRIBUTE_ADDRESS)
+ * | | | | | +-----------+---------------------+
+ * | | | | | | length | uint32_t | <- length of the attribute
+ * | | | | | +-----------+---------------------+
+ * | | | | | | attribute | | <- the attribute data ("struct sockaddr_in" #1)
+ * | | +---------------+-----------------------------------+
+ * | | | | attribute | struct dns_attribute_t |
+ * | | | | +-+-----------+---------------------+
+ * | | | | | | type | uint32_t | <- type of attribute (e.g. RESOLVER_ATTRIBUTE_ADDRESS)
+ * | | | | | +-----------+---------------------+
+ * | | | | | | length | uint32_t | <- length of the attribute
+ * | | | | | +-----------+---------------------+
+ * | | | | | | attribute | | <- the attribute data ("struct sockaddr_in" #2)
+ * | | +---------------+-----------------------------------+
+ * | | | ... |
+ * +-+-------------+---------------------------------------------------+
+ * | | attribute | struct _dns_resolver_buf_t | <- the attribute data (resolver configuration #2)
+ * | | +---------------+-----------------------------------+
+ * | | | ... |
+ * +---------------+---------------------------------------------------+
+ * | | ... |
+ * +---------------+---------------------------------------------------+
+ *
+ * When the data is unpacked the "n_padding" additional bytes
+ * specified in configuration buffer will be allocated at the
+ * end of this buffer. Arrays of pointers will be allocated
+ * within the extra space array element (an "attribute") is
+ * encountered the pointer reference will be filled in.
+ */
+
+
+// configuration buffer attributes
+enum {
+ CONFIG_ATTRIBUTE_RESOLVER = 1
+};
+
+
+// resolver buffer attributes
+enum {
+ RESOLVER_ATTRIBUTE_DOMAIN = 10,
+ RESOLVER_ATTRIBUTE_ADDRESS,
+ RESOLVER_ATTRIBUTE_SEARCH,
+ RESOLVER_ATTRIBUTE_SORTADDR,
+ RESOLVER_ATTRIBUTE_OPTIONS
+};
+
+
+typedef struct {
+ uint32_t type;
+ uint32_t length;
+ uint8_t attribute[0];
+} dns_attribute_t;
+
+
+typedef struct {
+ dns_config_t config;
+ uint32_t n_attribute;
+ uint32_t n_padding;
+ uint8_t attribute[0];
+} _dns_config_buf_t;
+
+
+typedef struct {
+ dns_resolver_t resolver;
+ uint32_t n_attribute;
+ uint8_t attribute[0];
+} _dns_resolver_buf_t;
+
+
+__BEGIN_DECLS
+
+const char * _dns_configuration_notify_key() AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+mach_port_t _dns_configuration_server_port() AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
+
+__END_DECLS
+
+#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 */
+
+#endif /* __DNSINFO_PRIVATE_H__ */
diff --git a/data/libresolv/libresolv-25.tar.gz b/data/libresolv/libresolv-25.tar.gz
new file mode 100644
index 000000000..eac1867b6
--- /dev/null
+++ b/data/libresolv/libresolv-25.tar.gz
Binary files differ
diff --git a/data/libresolv/make.sh b/data/libresolv/make.sh
new file mode 100644
index 000000000..26b76422c
--- /dev/null
+++ b/data/libresolv/make.sh
@@ -0,0 +1,9 @@
+pkg:setup
+cp -a "${PKG_DATA}"/*.[ch] .
+declare -a flags
+# XXX: don't use this on darwin8
+flags[${#flags[@]}]=-DNEED_PSELECT
+"${PKG_TARG}-gcc" -fno-common !(dns_async).c -o libresolv.9.dylib -dynamiclib -I. -linfo -install_name /usr/lib/libresolv.9.dylib -compatibility_version 1.0.0 "${flags[@]}" -save-temps
+pkg: mkdir -p /usr/lib
+pkg: cp -a libresolv.9.dylib /usr/lib
+pkg: ln -s libresolv.9.dylib /usr/lib/libresolv.dylib
diff --git a/data/libresolv/pselect.diff b/data/libresolv/pselect.diff
new file mode 100644
index 000000000..192eee992
--- /dev/null
+++ b/data/libresolv/pselect.diff
@@ -0,0 +1,22 @@
+diff -ru libresolv-19/res_send.c libresolv-19+iPhone/res_send.c
+--- libresolv-19/res_send.c 2007-10-05 00:02:17.000000000 +0000
++++ libresolv-19+iPhone/res_send.c 2008-04-04 20:18:45.000000000 +0000
+@@ -141,7 +141,8 @@
+ static void Perror(const res_state, FILE *, const char *, int);
+ static int sock_eq(struct sockaddr *, struct sockaddr *);
+ #ifdef NEED_PSELECT
+-static int pselect(int, void *, void *, void *, struct timespec *, const sigset_t *);
++static int pselect_(int, void *, void *, void *, struct timespec *, const sigset_t *);
++#define pselect pselect_
+ #endif
+
+ static const int niflags = NI_NUMERICHOST | NI_NUMERICSERV;
+@@ -1414,7 +1415,7 @@
+ #ifdef NEED_PSELECT
+ /* XXX needs to move to the porting library. */
+ static int
+-pselect(int nfds, void *rfds, void *wfds, void *efds, struct timespec *tsp, const sigset_t *sigmask)
++pselect_(int nfds, void *rfds, void *wfds, void *efds, struct timespec *tsp, const sigset_t *sigmask)
+ {
+ struct timeval tv, *tvp = NULL;
+ sigset_t sigs;
diff --git a/data/libresolv/shared_dns_info.h b/data/libresolv/shared_dns_info.h
new file mode 100644
index 000000000..c03837252
--- /dev/null
+++ b/data/libresolv/shared_dns_info.h
@@ -0,0 +1,180 @@
+#ifndef _shared_dns_info_user_
+#define _shared_dns_info_user_
+
+/* Module shared_dns_info */
+
+#include <string.h>
+#include <mach/ndr.h>
+#include <mach/boolean.h>
+#include <mach/kern_return.h>
+#include <mach/notify.h>
+#include <mach/mach_types.h>
+#include <mach/message.h>
+#include <mach/mig_errors.h>
+#include <mach/port.h>
+
+#ifdef AUTOTEST
+#ifndef FUNCTION_PTR_T
+#define FUNCTION_PTR_T
+typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t);
+typedef struct {
+ char *name;
+ function_ptr_t function;
+} function_table_entry;
+typedef function_table_entry *function_table_t;
+#endif /* FUNCTION_PTR_T */
+#endif /* AUTOTEST */
+
+#ifndef shared_dns_info_MSG_COUNT
+#define shared_dns_info_MSG_COUNT 2
+#endif /* shared_dns_info_MSG_COUNT */
+
+#include <mach/std_types.h>
+#include <mach/mig.h>
+#include <mach/mig.h>
+#include <mach/mach_types.h>
+#include "shared_dns_info_types.h"
+
+#ifdef __BeforeMigUserHeader
+__BeforeMigUserHeader
+#endif /* __BeforeMigUserHeader */
+
+#include <sys/cdefs.h>
+__BEGIN_DECLS
+
+
+/* Routine shared_dns_infoGet */
+#ifdef mig_external
+mig_external
+#else
+extern
+#endif /* mig_external */
+kern_return_t shared_dns_infoGet
+(
+ mach_port_t server,
+ dnsDataOut_t *data,
+ mach_msg_type_number_t *dataCnt
+);
+
+/* Routine shared_dns_infoSet */
+#ifdef mig_external
+mig_external
+#else
+extern
+#endif /* mig_external */
+kern_return_t shared_dns_infoSet
+(
+ mach_port_t server,
+ dnsData_t data,
+ mach_msg_type_number_t dataCnt
+);
+
+__END_DECLS
+
+/********************** Caution **************************/
+/* The following data types should be used to calculate */
+/* maximum message sizes only. The actual message may be */
+/* smaller, and the position of the arguments within the */
+/* message layout may vary from what is presented here. */
+/* For example, if any of the arguments are variable- */
+/* sized, and less than the maximum is sent, the data */
+/* will be packed tight in the actual message to reduce */
+/* the presence of holes. */
+/********************** Caution **************************/
+
+/* typedefs for all requests */
+
+#ifndef __Request__shared_dns_info_subsystem__defined
+#define __Request__shared_dns_info_subsystem__defined
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ } __Request__shared_dns_infoGet_t;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ /* start of the kernel processed data */
+ mach_msg_body_t msgh_body;
+ mach_msg_ool_descriptor_t data;
+ /* end of the kernel processed data */
+ NDR_record_t NDR;
+ mach_msg_type_number_t dataCnt;
+ } __Request__shared_dns_infoSet_t;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+#endif /* !__Request__shared_dns_info_subsystem__defined */
+
+/* union of all requests */
+
+#ifndef __RequestUnion__shared_dns_info_subsystem__defined
+#define __RequestUnion__shared_dns_info_subsystem__defined
+union __RequestUnion__shared_dns_info_subsystem {
+ __Request__shared_dns_infoGet_t Request_shared_dns_infoGet;
+ __Request__shared_dns_infoSet_t Request_shared_dns_infoSet;
+};
+#endif /* !__RequestUnion__shared_dns_info_subsystem__defined */
+/* typedefs for all replies */
+
+#ifndef __Reply__shared_dns_info_subsystem__defined
+#define __Reply__shared_dns_info_subsystem__defined
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ /* start of the kernel processed data */
+ mach_msg_body_t msgh_body;
+ mach_msg_ool_descriptor_t data;
+ /* end of the kernel processed data */
+ NDR_record_t NDR;
+ mach_msg_type_number_t dataCnt;
+ } __Reply__shared_dns_infoGet_t;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ NDR_record_t NDR;
+ kern_return_t RetCode;
+ } __Reply__shared_dns_infoSet_t;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+#endif /* !__Reply__shared_dns_info_subsystem__defined */
+
+/* union of all replies */
+
+#ifndef __ReplyUnion__shared_dns_info_subsystem__defined
+#define __ReplyUnion__shared_dns_info_subsystem__defined
+union __ReplyUnion__shared_dns_info_subsystem {
+ __Reply__shared_dns_infoGet_t Reply_shared_dns_infoGet;
+ __Reply__shared_dns_infoSet_t Reply_shared_dns_infoSet;
+};
+#endif /* !__RequestUnion__shared_dns_info_subsystem__defined */
+
+#ifndef subsystem_to_name_map_shared_dns_info
+#define subsystem_to_name_map_shared_dns_info \
+ { "shared_dns_infoGet", 21000 },\
+ { "shared_dns_infoSet", 21001 }
+#endif
+
+#ifdef __AfterMigUserHeader
+__AfterMigUserHeader
+#endif /* __AfterMigUserHeader */
+
+#endif /* _shared_dns_info_user_ */
diff --git a/data/libresolv/shared_dns_infoUser.c b/data/libresolv/shared_dns_infoUser.c
new file mode 100644
index 000000000..64a7f16ce
--- /dev/null
+++ b/data/libresolv/shared_dns_infoUser.c
@@ -0,0 +1,524 @@
+/*
+ * IDENTIFICATION:
+ * stub generated Tue Jan 1 16:42:09 2008
+ * with a MiG generated Mon Sep 11 19:11:05 PDT 2006 by root@b09.apple.com
+ * OPTIONS:
+ */
+#define __MIG_check__Reply__shared_dns_info_subsystem__ 1
+#define __NDR_convert__Reply__shared_dns_info_subsystem__ 1
+#define __NDR_convert__mig_reply_error_subsystem__ 1
+
+#include "shared_dns_info.h"
+
+
+#ifndef mig_internal
+#define mig_internal static __inline__
+#endif /* mig_internal */
+
+#ifndef mig_external
+#define mig_external
+#endif /* mig_external */
+
+#if !defined(__MigTypeCheck) && defined(TypeCheck)
+#define __MigTypeCheck TypeCheck /* Legacy setting */
+#endif /* !defined(__MigTypeCheck) */
+
+#if !defined(__MigKernelSpecificCode) && defined(_MIG_KERNEL_SPECIFIC_CODE_)
+#define __MigKernelSpecificCode _MIG_KERNEL_SPECIFIC_CODE_ /* Legacy setting */
+#endif /* !defined(__MigKernelSpecificCode) */
+
+#ifndef LimitCheck
+#define LimitCheck 0
+#endif /* LimitCheck */
+
+#ifndef min
+#define min(a,b) ( ((a) < (b))? (a): (b) )
+#endif /* min */
+
+#if !defined(_WALIGN_)
+#define _WALIGN_(x) (((x) + 3) & ~3)
+#endif /* !defined(_WALIGN_) */
+
+#if !defined(_WALIGNSZ_)
+#define _WALIGNSZ_(x) _WALIGN_(sizeof(x))
+#endif /* !defined(_WALIGNSZ_) */
+
+#ifndef UseStaticTemplates
+#define UseStaticTemplates 0
+#endif /* UseStaticTemplates */
+
+#ifndef __MachMsgErrorWithTimeout
+#define __MachMsgErrorWithTimeout(_R_) { \
+ switch (_R_) { \
+ case MACH_SEND_INVALID_REPLY: \
+ case MACH_RCV_INVALID_NAME: \
+ case MACH_RCV_PORT_DIED: \
+ case MACH_RCV_PORT_CHANGED: \
+ case MACH_RCV_TIMED_OUT: \
+ mig_dealloc_reply_port(InP->Head.msgh_reply_port); \
+ break; \
+ default: \
+ mig_put_reply_port(InP->Head.msgh_reply_port); \
+ } \
+}
+#endif /* __MachMsgErrorWithTimeout */
+
+#ifndef __MachMsgErrorWithoutTimeout
+#define __MachMsgErrorWithoutTimeout(_R_) { \
+ switch (_R_) { \
+ case MACH_SEND_INVALID_REPLY: \
+ case MACH_RCV_INVALID_NAME: \
+ case MACH_RCV_PORT_DIED: \
+ case MACH_RCV_PORT_CHANGED: \
+ mig_dealloc_reply_port(InP->Head.msgh_reply_port); \
+ break; \
+ default: \
+ mig_put_reply_port(InP->Head.msgh_reply_port); \
+ } \
+}
+#endif /* __MachMsgErrorWithoutTimeout */
+
+#ifndef __DeclareSendRpc
+#define __DeclareSendRpc(_NUM_, _NAME_)
+#endif /* __DeclareSendRpc */
+
+#ifndef __BeforeSendRpc
+#define __BeforeSendRpc(_NUM_, _NAME_)
+#endif /* __BeforeSendRpc */
+
+#ifndef __AfterSendRpc
+#define __AfterSendRpc(_NUM_, _NAME_)
+#endif /* __AfterSendRpc */
+
+#ifndef __DeclareSendSimple
+#define __DeclareSendSimple(_NUM_, _NAME_)
+#endif /* __DeclareSendSimple */
+
+#ifndef __BeforeSendSimple
+#define __BeforeSendSimple(_NUM_, _NAME_)
+#endif /* __BeforeSendSimple */
+
+#ifndef __AfterSendSimple
+#define __AfterSendSimple(_NUM_, _NAME_)
+#endif /* __AfterSendSimple */
+
+#define msgh_request_port msgh_remote_port
+#define msgh_reply_port msgh_local_port
+
+
+
+#if ( __MigTypeCheck || __NDR_convert__ )
+#if __MIG_check__Reply__shared_dns_info_subsystem__
+#if !defined(__MIG_check__Reply__shared_dns_infoGet_t__defined)
+#define __MIG_check__Reply__shared_dns_infoGet_t__defined
+#ifndef __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data__defined
+#if defined(__NDR_convert__int_rep__shared_dns_info__dnsDataOut_t__defined)
+#define __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data__defined
+#define __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data(a, f, c) \
+ __NDR_convert__int_rep__shared_dns_info__dnsDataOut_t((dnsDataOut_t *)(a), f, c)
+#elif defined(__NDR_convert__int_rep__dnsDataOut_t__defined)
+#define __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data__defined
+#define __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data(a, f, c) \
+ __NDR_convert__int_rep__dnsDataOut_t((dnsDataOut_t *)(a), f, c)
+#endif /* defined(__NDR_convert__*__defined) */
+#endif /* __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data__defined */
+
+
+#ifndef __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt__defined
+#if defined(__NDR_convert__int_rep__shared_dns_info__mach_msg_type_number_t__defined)
+#define __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt__defined
+#define __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt(a, f) \
+ __NDR_convert__int_rep__shared_dns_info__mach_msg_type_number_t((mach_msg_type_number_t *)(a), f)
+#elif defined(__NDR_convert__int_rep__mach_msg_type_number_t__defined)
+#define __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt__defined
+#define __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt(a, f) \
+ __NDR_convert__int_rep__mach_msg_type_number_t((mach_msg_type_number_t *)(a), f)
+#endif /* defined(__NDR_convert__*__defined) */
+#endif /* __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt__defined */
+
+
+#ifndef __NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data__defined
+#if defined(__NDR_convert__char_rep__shared_dns_info__dnsDataOut_t__defined)
+#define __NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data__defined
+#define __NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data(a, f, c) \
+ __NDR_convert__char_rep__shared_dns_info__dnsDataOut_t((dnsDataOut_t *)(a), f, c)
+#elif defined(__NDR_convert__char_rep__dnsDataOut_t__defined)
+#define __NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data__defined
+#define __NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data(a, f, c) \
+ __NDR_convert__char_rep__dnsDataOut_t((dnsDataOut_t *)(a), f, c)
+#endif /* defined(__NDR_convert__*__defined) */
+#endif /* __NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data__defined */
+
+
+
+#ifndef __NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data__defined
+#if defined(__NDR_convert__float_rep__shared_dns_info__dnsDataOut_t__defined)
+#define __NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data__defined
+#define __NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data(a, f, c) \
+ __NDR_convert__float_rep__shared_dns_info__dnsDataOut_t((dnsDataOut_t *)(a), f, c)
+#elif defined(__NDR_convert__float_rep__dnsDataOut_t__defined)
+#define __NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data__defined
+#define __NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data(a, f, c) \
+ __NDR_convert__float_rep__dnsDataOut_t((dnsDataOut_t *)(a), f, c)
+#endif /* defined(__NDR_convert__*__defined) */
+#endif /* __NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data__defined */
+
+
+
+
+mig_internal kern_return_t __MIG_check__Reply__shared_dns_infoGet_t(__Reply__shared_dns_infoGet_t *Out0P)
+{
+
+ typedef __Reply__shared_dns_infoGet_t __Reply;
+ boolean_t msgh_simple;
+#if __MigTypeCheck
+ unsigned int msgh_size;
+#endif /* __MigTypeCheck */
+ if (Out0P->Head.msgh_id != 21100) {
+ if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)
+ { return MIG_SERVER_DIED; }
+ else
+ { return MIG_REPLY_MISMATCH; }
+ }
+
+ msgh_simple = !(Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX);
+#if __MigTypeCheck
+ msgh_size = Out0P->Head.msgh_size;
+
+ if ((msgh_simple || Out0P->msgh_body.msgh_descriptor_count != 1 ||
+ msgh_size != (mach_msg_size_t)sizeof(__Reply)) &&
+ (!msgh_simple || msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||
+ ((mig_reply_error_t *)Out0P)->RetCode == KERN_SUCCESS))
+ { return MIG_TYPE_ERROR ; }
+#endif /* __MigTypeCheck */
+
+ if (msgh_simple) {
+#ifdef __NDR_convert__mig_reply_error_t__defined
+ __NDR_convert__mig_reply_error_t((mig_reply_error_t *)Out0P);
+#endif /* __NDR_convert__mig_reply_error_t__defined */
+ return ((mig_reply_error_t *)Out0P)->RetCode;
+ }
+
+#if __MigTypeCheck
+ if (Out0P->data.type != MACH_MSG_OOL_DESCRIPTOR)
+ { return MIG_TYPE_ERROR; }
+#endif /* __MigTypeCheck */
+
+#if defined(__NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data__defined) || \
+ defined(__NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt__defined)
+ if (Out0P->NDR.int_rep != NDR_record.int_rep) {
+#if defined(__NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt__defined)
+ __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt(&Out0P->dataCnt, Out0P->NDR.int_rep);
+#endif /* __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__dataCnt__defined */
+#if defined(__NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data__defined)
+ __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data((dnsDataOut_t)(Out0P->data.address), Out0P->NDR.int_rep, Out0P->dataCnt);
+#endif /* __NDR_convert__int_rep__Reply__shared_dns_infoGet_t__data__defined */
+ }
+#endif /* defined(__NDR_convert__int_rep...) */
+
+#if defined(__NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data__defined) || \
+ 0
+ if (Out0P->NDR.char_rep != NDR_record.char_rep) {
+#if defined(__NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data__defined)
+ __NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data((dnsDataOut_t)(Out0P->data.address), Out0P->NDR.char_rep, Out0P->dataCnt);
+#endif /* __NDR_convert__char_rep__Reply__shared_dns_infoGet_t__data__defined */
+ }
+#endif /* defined(__NDR_convert__char_rep...) */
+
+#if defined(__NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data__defined) || \
+ 0
+ if (Out0P->NDR.float_rep != NDR_record.float_rep) {
+#if defined(__NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data__defined)
+ __NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data((dnsDataOut_t)(Out0P->data.address), Out0P->NDR.float_rep, Out0P->dataCnt);
+#endif /* __NDR_convert__float_rep__Reply__shared_dns_infoGet_t__data__defined */
+ }
+#endif /* defined(__NDR_convert__float_rep...) */
+
+ return MACH_MSG_SUCCESS;
+}
+#endif /* !defined(__MIG_check__Reply__shared_dns_infoGet_t__defined) */
+#endif /* __MIG_check__Reply__shared_dns_info_subsystem__ */
+#endif /* ( __MigTypeCheck || __NDR_convert__ ) */
+
+
+/* Routine shared_dns_infoGet */
+mig_external kern_return_t shared_dns_infoGet
+(
+ mach_port_t server,
+ dnsDataOut_t *data,
+ mach_msg_type_number_t *dataCnt
+)
+{
+ {
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ } Request;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ /* start of the kernel processed data */
+ mach_msg_body_t msgh_body;
+ mach_msg_ool_descriptor_t data;
+ /* end of the kernel processed data */
+ NDR_record_t NDR;
+ mach_msg_type_number_t dataCnt;
+ mach_msg_trailer_t trailer;
+ } Reply;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ /* start of the kernel processed data */
+ mach_msg_body_t msgh_body;
+ mach_msg_ool_descriptor_t data;
+ /* end of the kernel processed data */
+ NDR_record_t NDR;
+ mach_msg_type_number_t dataCnt;
+ } __Reply;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+ /*
+ * typedef struct {
+ * mach_msg_header_t Head;
+ * NDR_record_t NDR;
+ * kern_return_t RetCode;
+ * } mig_reply_error_t;
+ */
+
+ union {
+ Request In;
+ Reply Out;
+ } Mess;
+
+ Request *InP = &Mess.In;
+ Reply *Out0P = &Mess.Out;
+
+ mach_msg_return_t msg_result;
+
+#ifdef __MIG_check__Reply__shared_dns_infoGet_t__defined
+ kern_return_t check_result;
+#endif /* __MIG_check__Reply__shared_dns_infoGet_t__defined */
+
+ __DeclareSendRpc(21000, "shared_dns_infoGet")
+
+ InP->Head.msgh_bits =
+ MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
+ /* msgh_size passed as argument */
+ InP->Head.msgh_request_port = server;
+ InP->Head.msgh_reply_port = mig_get_reply_port();
+ InP->Head.msgh_id = 21000;
+
+ __BeforeSendRpc(21000, "shared_dns_infoGet")
+ msg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, (mach_msg_size_t)sizeof(Request), (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+ __AfterSendRpc(21000, "shared_dns_infoGet")
+ if (msg_result != MACH_MSG_SUCCESS) {
+ __MachMsgErrorWithoutTimeout(msg_result);
+ { return msg_result; }
+ }
+
+
+#if defined(__MIG_check__Reply__shared_dns_infoGet_t__defined)
+ check_result = __MIG_check__Reply__shared_dns_infoGet_t((__Reply__shared_dns_infoGet_t *)Out0P);
+ if (check_result != MACH_MSG_SUCCESS)
+ { return check_result; }
+#endif /* defined(__MIG_check__Reply__shared_dns_infoGet_t__defined) */
+
+ *data = (dnsDataOut_t)(Out0P->data.address);
+ *dataCnt = Out0P->dataCnt;
+
+ return KERN_SUCCESS;
+ }
+}
+
+#if ( __MigTypeCheck || __NDR_convert__ )
+#if __MIG_check__Reply__shared_dns_info_subsystem__
+#if !defined(__MIG_check__Reply__shared_dns_infoSet_t__defined)
+#define __MIG_check__Reply__shared_dns_infoSet_t__defined
+#ifndef __NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode__defined
+#if defined(__NDR_convert__int_rep__shared_dns_info__kern_return_t__defined)
+#define __NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode__defined
+#define __NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode(a, f) \
+ __NDR_convert__int_rep__shared_dns_info__kern_return_t((kern_return_t *)(a), f)
+#elif defined(__NDR_convert__int_rep__kern_return_t__defined)
+#define __NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode__defined
+#define __NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode(a, f) \
+ __NDR_convert__int_rep__kern_return_t((kern_return_t *)(a), f)
+#endif /* defined(__NDR_convert__*__defined) */
+#endif /* __NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode__defined */
+
+
+
+
+
+mig_internal kern_return_t __MIG_check__Reply__shared_dns_infoSet_t(__Reply__shared_dns_infoSet_t *Out0P)
+{
+
+ typedef __Reply__shared_dns_infoSet_t __Reply;
+ if (Out0P->Head.msgh_id != 21101) {
+ if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)
+ { return MIG_SERVER_DIED; }
+ else
+ { return MIG_REPLY_MISMATCH; }
+ }
+
+#if __MigTypeCheck
+ if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
+ (Out0P->Head.msgh_size != (mach_msg_size_t)sizeof(__Reply)))
+ { return MIG_TYPE_ERROR ; }
+#endif /* __MigTypeCheck */
+
+#if defined(__NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode__defined)
+ if (Out0P->NDR.int_rep != NDR_record.int_rep)
+ __NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode(&Out0P->RetCode, Out0P->NDR.int_rep);
+#endif /* __NDR_convert__int_rep__Reply__shared_dns_infoSet_t__RetCode__defined */
+ { return Out0P->RetCode;
+ }
+}
+#endif /* !defined(__MIG_check__Reply__shared_dns_infoSet_t__defined) */
+#endif /* __MIG_check__Reply__shared_dns_info_subsystem__ */
+#endif /* ( __MigTypeCheck || __NDR_convert__ ) */
+
+
+/* Routine shared_dns_infoSet */
+mig_external kern_return_t shared_dns_infoSet
+(
+ mach_port_t server,
+ dnsData_t data,
+ mach_msg_type_number_t dataCnt
+)
+{
+ {
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ /* start of the kernel processed data */
+ mach_msg_body_t msgh_body;
+ mach_msg_ool_descriptor_t data;
+ /* end of the kernel processed data */
+ NDR_record_t NDR;
+ mach_msg_type_number_t dataCnt;
+ } Request;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ NDR_record_t NDR;
+ kern_return_t RetCode;
+ mach_msg_trailer_t trailer;
+ } Reply;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+
+#ifdef __MigPackStructs
+#pragma pack(4)
+#endif
+ typedef struct {
+ mach_msg_header_t Head;
+ NDR_record_t NDR;
+ kern_return_t RetCode;
+ } __Reply;
+#ifdef __MigPackStructs
+#pragma pack()
+#endif
+ /*
+ * typedef struct {
+ * mach_msg_header_t Head;
+ * NDR_record_t NDR;
+ * kern_return_t RetCode;
+ * } mig_reply_error_t;
+ */
+
+ union {
+ Request In;
+ Reply Out;
+ } Mess;
+
+ Request *InP = &Mess.In;
+ Reply *Out0P = &Mess.Out;
+
+ mach_msg_return_t msg_result;
+
+#ifdef __MIG_check__Reply__shared_dns_infoSet_t__defined
+ kern_return_t check_result;
+#endif /* __MIG_check__Reply__shared_dns_infoSet_t__defined */
+
+ __DeclareSendRpc(21001, "shared_dns_infoSet")
+
+#if UseStaticTemplates
+ const static mach_msg_ool_descriptor_t dataTemplate = {
+ /* addr = */ (void *)0,
+ /* size = */ 0,
+ /* deal = */ FALSE,
+ /* copy = */ MACH_MSG_VIRTUAL_COPY,
+ /* pad2 = */ 0,
+ /* type = */ MACH_MSG_OOL_DESCRIPTOR,
+ };
+#endif /* UseStaticTemplates */
+
+ InP->msgh_body.msgh_descriptor_count = 1;
+#if UseStaticTemplates
+ InP->data = dataTemplate;
+ InP->data.address = (void *)(data);
+ InP->data.size = dataCnt;
+#else /* UseStaticTemplates */
+ InP->data.address = (void *)(data);
+ InP->data.size = dataCnt;
+ InP->data.deallocate = FALSE;
+ InP->data.copy = MACH_MSG_VIRTUAL_COPY;
+ InP->data.type = MACH_MSG_OOL_DESCRIPTOR;
+#endif /* UseStaticTemplates */
+
+ InP->NDR = NDR_record;
+
+ InP->dataCnt = dataCnt;
+
+ InP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|
+ MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);
+ /* msgh_size passed as argument */
+ InP->Head.msgh_request_port = server;
+ InP->Head.msgh_reply_port = mig_get_reply_port();
+ InP->Head.msgh_id = 21001;
+
+ __BeforeSendRpc(21001, "shared_dns_infoSet")
+ msg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, (mach_msg_size_t)sizeof(Request), (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+ __AfterSendRpc(21001, "shared_dns_infoSet")
+ if (msg_result != MACH_MSG_SUCCESS) {
+ __MachMsgErrorWithoutTimeout(msg_result);
+ { return msg_result; }
+ }
+
+
+#if defined(__MIG_check__Reply__shared_dns_infoSet_t__defined)
+ check_result = __MIG_check__Reply__shared_dns_infoSet_t((__Reply__shared_dns_infoSet_t *)Out0P);
+ if (check_result != MACH_MSG_SUCCESS)
+ { return check_result; }
+#endif /* defined(__MIG_check__Reply__shared_dns_infoSet_t__defined) */
+
+ return KERN_SUCCESS;
+ }
+}
diff --git a/data/libresolv/shared_dns_info_types.h b/data/libresolv/shared_dns_info_types.h
new file mode 100644
index 000000000..e4fe4b679
--- /dev/null
+++ b/data/libresolv/shared_dns_info_types.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#ifndef _SHARED_DNS_INFO_TYPES_H
+#define _SHARED_DNS_INFO_TYPES_H
+
+/*
+ * Keep IPC functions private to the framework
+ */
+#ifdef mig_external
+#undef mig_external
+#endif
+#define mig_external __private_extern__
+
+/*
+ * Mach server port name
+ */
+#define DNS_SERVER "com.apple.SystemConfiguration.configd"
+
+/*
+ * Input arguments: DNS configuration
+ * (sent as out-of-line data in a message)
+ */
+typedef const char * dnsData_t;
+
+/* Output arguments: DNS configuration
+ * (sent as out-of-line data in a message)
+ */
+typedef char * dnsDataOut_t;
+
+#endif /* !_SHARED_DNS_INFO_TYPES_H */