scottmac Thu, 06 Aug 2009 04:37:07 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=286865
Log:
Deal with moving to res_nsearch(). dns_search() on OSX lacks an error handler,
might revert to using straight bind9.
Changed paths:
U php/php-src/trunk/ext/standard/dns.c
U php/php-src/trunk/ext/standard/php_dns.h
Modified: php/php-src/trunk/ext/standard/dns.c
===================================================================
--- php/php-src/trunk/ext/standard/dns.c 2009-08-06 04:33:18 UTC (rev
286864)
+++ php/php-src/trunk/ext/standard/dns.c 2009-08-06 04:37:07 UTC (rev
286865)
@@ -809,10 +809,14 @@
n = php_dns_search(handle, hostname, C_IN,
type_to_fetch, answer.qb2, sizeof answer);
- if (n < 0 ) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"res_nsearch() failed");
+ if (n < 0) {
+ if (php_dns_errno(handle) == NO_DATA) {
+ php_dns_free_handle(handle);
+ continue;
+ }
+
+ php_dns_free_handle(handle);
zval_dtor(return_value);
- php_dns_free_handle(handle);
RETURN_FALSE;
}
@@ -845,33 +849,33 @@
add_next_index_zval(return_value,
retval);
}
}
- php_dns_free_handle(handle);
- }
- }
- if (authns || addtl) {
- /* List of Authoritative Name Servers
- * Process when only requesting addtl so that we can skip
through the section
- */
- while (ns-- > 0 && cp && cp < end) {
- zval *retval = NULL;
+ if (authns || addtl) {
+ /* List of Authoritative Name Servers
+ * Process when only requesting addtl so that
we can skip through the section
+ */
+ while (ns-- > 0 && cp && cp < end) {
+ zval *retval = NULL;
- cp = php_parserr(cp, &answer, DNS_T_ANY, authns !=
NULL, &retval TSRMLS_CC);
- if (retval != NULL) {
- add_next_index_zval(authns, retval);
+ cp = php_parserr(cp, &answer,
DNS_T_ANY, authns != NULL, &retval TSRMLS_CC);
+ if (retval != NULL) {
+ add_next_index_zval(authns,
retval);
+ }
+ }
}
- }
- }
- if (addtl) {
- /* Additional records associated with authoritative name
servers */
- while (ar-- > 0 && cp && cp < end) {
- zval *retval = NULL;
+ if (addtl) {
+ /* Additional records associated with
authoritative name servers */
+ while (ar-- > 0 && cp && cp < end) {
+ zval *retval = NULL;
- cp = php_parserr(cp, &answer, DNS_T_ANY, 1, &retval
TSRMLS_CC);
- if (retval != NULL) {
- add_next_index_zval(addtl, retval);
+ cp = php_parserr(cp, &answer,
DNS_T_ANY, 1, &retval TSRMLS_CC);
+ if (retval != NULL) {
+ add_next_index_zval(addtl,
retval);
+ }
+ }
}
+ php_dns_free_handle(handle);
}
}
}
Modified: php/php-src/trunk/ext/standard/php_dns.h
===================================================================
--- php/php-src/trunk/ext/standard/php_dns.h 2009-08-06 04:33:18 UTC (rev
286864)
+++ php/php-src/trunk/ext/standard/php_dns.h 2009-08-06 04:37:07 UTC (rev
286865)
@@ -28,17 +28,25 @@
((int)dns_search(res, dname, class, type, answer, anslen,
(struct sockaddr *)&from, &fromsize))
#define php_dns_free_handle(res) \
dns_free(res)
+#define php_dns_errno(_res) \
+ (NO_DATA)
#elif defined(HAVE_RES_NSEARCH)
#define php_dns_search(res, dname, class, type, answer, anslen) \
res_nsearch(res, dname, class, type, answer, anslen)
-#define php_dns_free_handle(res) \
- res_nclose(res)
+#define php_dns_free_handle(res) \
+ res_nclose(res); \
+ php_dns_free_res(*res)
+#define php_dns_errno(res) \
+ (res->res_h_errno)
+
#elif defined(HAVE_RES_SEARCH)
#define php_dns_search(res, dname, class, type, answer, anslen) \
res_search(dname, class, type, answer, anslen)
#define php_dns_free_handle(res) /* noop */
+#define php_dns_errno(res) \
+ (_res.res_h_errno)
#endif
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php