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