pollita Sun Dec 8 03:14:43 2002 EDT
Modified files:
/php4/ext/standard dns.c
Log:
Bug #17174 Added IPv6 (AAAA record) support to dns_check_record() also added support
to dns_get_record
Index: php4/ext/standard/dns.c
diff -u php4/ext/standard/dns.c:1.47 php4/ext/standard/dns.c:1.48
--- php4/ext/standard/dns.c:1.47 Thu Dec 5 17:28:02 2002
+++ php4/ext/standard/dns.c Sun Dec 8 03:14:43 2002
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: dns.c,v 1.47 2002/12/05 22:28:02 iliaa Exp $ */
+/* $Id: dns.c,v 1.48 2002/12/08 08:14:43 pollita Exp $ */
/* {{{ includes */
#include "php.h"
@@ -241,6 +241,7 @@
else if (!strcasecmp("ANY", Z_STRVAL_PP(arg2))) type = T_ANY;
else if (!strcasecmp("SOA", Z_STRVAL_PP(arg2))) type = T_SOA;
else if (!strcasecmp("CNAME", Z_STRVAL_PP(arg2))) type =
T_CNAME;
+ else if (!strcasecmp("AAAA", Z_STRVAL_PP(arg2))) type =
+T_AAAA;
else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Type '%s'
not supported", Z_STRVAL_PP(arg2));
RETURN_FALSE;
@@ -272,9 +273,9 @@
#define PHP_DNS_HINFO 0x00001000
#define PHP_DNS_MX 0x00004000
#define PHP_DNS_TXT 0x00008000
-
+#define PHP_DNS_AAAA 0x08000000
#define PHP_DNS_ANY 0x10000000
-#define PHP_DNS_ALL
(PHP_DNS_A|PHP_DNS_NS|PHP_DNS_CNAME|PHP_DNS_SOA|PHP_DNS_PTR|PHP_DNS_HINFO|PHP_DNS_MX|PHP_DNS_TXT)
+#define PHP_DNS_ALL
+(PHP_DNS_A|PHP_DNS_NS|PHP_DNS_CNAME|PHP_DNS_SOA|PHP_DNS_PTR|PHP_DNS_HINFO|PHP_DNS_MX|PHP_DNS_TXT|PHP_DNS_AAAA)
PHP_MINIT_FUNCTION(dns) {
REGISTER_LONG_CONSTANT("DNS_A", PHP_DNS_A, CONST_CS |
CONST_PERSISTENT);
@@ -285,6 +286,7 @@
REGISTER_LONG_CONSTANT("DNS_HINFO", PHP_DNS_HINFO, CONST_CS |
CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DNS_MX", PHP_DNS_MX, CONST_CS |
CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DNS_TXT", PHP_DNS_TXT, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("DNS_AAAA", PHP_DNS_AAAA, CONST_CS |
+CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DNS_ANY", PHP_DNS_ANY, CONST_CS |
CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("DNS_ALL", PHP_DNS_ALL, CONST_CS |
CONST_PERSISTENT);
return SUCCESS;
@@ -316,6 +318,8 @@
u_short type, class, dlen;
u_long ttl;
long n, i;
+ u_short s;
+ u_char *tp;
char name[MAXHOSTNAMELEN];
n = dn_expand(answer->qb2, answer->qb2+65536, cp, name, (sizeof(name)) - 2);
@@ -416,6 +420,30 @@
GETLONG(n, cp);
add_assoc_long(*subarray, "minimum-ttl", n);
break;
+ case T_AAAA:
+ tp = name;
+ for(i=0; i < 8; i++) {
+ GETSHORT(s, cp);
+ if (s > 0) {
+ if (tp > (u_char *)name) {
+ tp[0] = ':';
+ tp++;
+ }
+ sprintf(tp,"%x",s);
+ tp += strlen(tp);
+ } else if (s == 0) {
+ if ((tp > (u_char *)name) && (tp[-1] != ':')) {
+ tp[0] = ':';
+ tp++;
+ }
+ }
+ }
+ if ((tp > (u_char *)name) && (tp[-1] == ':'))
+ tp[-1] = '\0';
+ tp[0] = '\0';
+ add_assoc_string(*subarray, "type", "AAAA", 1);
+ add_assoc_string(*subarray, "ipv6", name, 1);
+ break;
default:
cp += dlen;
}
@@ -480,13 +508,13 @@
/* Initialize the return array */
array_init(return_value);
- /* - We emulate an or'ed type mask by querying type by type. (Steps 0 - 7)
- * If additional info is wanted we check again with T_ANY (step 8/9)
+ /* - We emulate an or'ed type mask by querying type by type. (Steps 0 - 8)
+ * If additional info is wanted we check again with T_ANY (step 9/10)
* store_results is used to skip storing the results retrieved in step
- * 9 when results were already fetched.
- * - In case of PHP_DNS_ANY we use the directly fetch T_ANY. (step 9)
+ * 10 when results were already fetched.
+ * - In case of PHP_DNS_ANY we use the directly fetch T_ANY. (step 10)
*/
- for(type = (type_param==PHP_DNS_ANY ? 9 : 0); type < (addtl_recs ? 10 : 8) ||
first_query; type++)
+ for(type = (type_param==PHP_DNS_ANY ? 10 : 0); type < (addtl_recs ? 11 : 9) ||
+first_query; type++)
{
first_query = 0;
switch(type) {
@@ -515,10 +543,13 @@
type_to_fetch = type_param&PHP_DNS_TXT ? T_TXT : 0;
break;
case 8:
+ type_to_fetch = type_param&PHP_DNS_AAAA ? T_AAAA : 0;
+ break;
+ case 9:
store_results = 0;
continue;
default:
- case 9:
+ case 10:
type_to_fetch = T_ANY;
break;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php