summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2001-08-10 02:19:05 +0000
committerfoobar <sniper@php.net>2001-08-10 02:19:05 +0000
commit52e3b4a44f39ef39dd4d21010a8ba09d8b80f797 (patch)
tree7a23324f50cbcbe09d3f4ceb587f6a55d551cc12
parent9e9e47faa448f7a62f51d44f3b23d4eef3e5f259 (diff)
downloadphp-git-52e3b4a44f39ef39dd4d21010a8ba09d8b80f797.tar.gz
Cleanup. Also make gethostnamel() to return FALSE on error and not just empty array.
-rw-r--r--ext/standard/dns.c59
1 files changed, 31 insertions, 28 deletions
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
index f3a4d71b8d..a9f173d580 100644
--- a/ext/standard/dns.c
+++ b/ext/standard/dns.c
@@ -63,45 +63,52 @@
#include "dns.h"
/* }}} */
-char *php_gethostbyaddr(char *ip);
-char *php_gethostbyname(char *name);
+static char *php_gethostbyaddr(char *ip);
+static char *php_gethostbyname(char *name);
/* {{{ proto string gethostbyaddr(string ip_address)
Get the Internet host name corresponding to a given IP address */
PHP_FUNCTION(gethostbyaddr)
{
- pval **arg;
+ zval **arg;
+ char *addr;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
+
convert_to_string_ex(arg);
+
+ addr = php_gethostbyaddr(Z_STRVAL_PP(arg));
- RETVAL_STRING(php_gethostbyaddr(Z_STRVAL_PP(arg)), 0);
+ if(addr == NULL) {
+ php_error(E_WARNING, "Address is not in a.b.c.d form");
+ RETVAL_FALSE;
+ } else {
+ RETVAL_STRING(addr, 0);
+ }
}
/* }}} */
/* {{{ php_gethostbyaddr
*/
-char *php_gethostbyaddr(char *ip)
+static char *php_gethostbyaddr(char *ip)
{
struct in_addr addr;
struct hostent *hp;
addr.s_addr = inet_addr(ip);
+
if (addr.s_addr == -1) {
-#if PHP_DEBUG
- php_error(E_WARNING, "address not in a.b.c.d form");
-#endif
- return estrdup(ip);
+ return NULL;
}
+
hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
+
if (!hp) {
-#if PHP_DEBUG
- php_error(E_WARNING, "Unable to resolve %s\n", ip);
-#endif
return estrdup(ip);
}
+
return estrdup(hp->h_name);
}
/* }}} */
@@ -110,11 +117,12 @@ char *php_gethostbyaddr(char *ip)
Get the IP address corresponding to a given Internet host name */
PHP_FUNCTION(gethostbyname)
{
- pval **arg;
+ zval **arg;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
+
convert_to_string_ex(arg);
RETVAL_STRING(php_gethostbyname(Z_STRVAL_PP(arg)), 0);
@@ -125,13 +133,13 @@ PHP_FUNCTION(gethostbyname)
Return a list of IP addresses that a given hostname resolves to. */
PHP_FUNCTION(gethostbynamel)
{
- pval **arg;
+ zval **arg;
struct hostent *hp;
struct in_addr in;
int i;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) {
- WRONG_PARAM_COUNT;
+ ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(arg);
@@ -141,36 +149,31 @@ PHP_FUNCTION(gethostbynamel)
hp = gethostbyname(Z_STRVAL_PP(arg));
if (hp == NULL || hp->h_addr_list == NULL) {
-#if PHP_DEBUG
- php_error(E_WARNING, "Unable to resolve %s\n", Z_STRVAL_PP(arg));
-#endif
- return;
+ RETURN_FALSE;
}
for (i = 0 ; hp->h_addr_list[i] != 0 ; i++) {
in = *(struct in_addr *) hp->h_addr_list[i];
add_next_index_string(return_value, inet_ntoa(in), 1);
}
-
- return;
}
/* }}} */
/* {{{ php_gethostbyname
*/
-char *php_gethostbyname(char *name)
+static char *php_gethostbyname(char *name)
{
struct hostent *hp;
struct in_addr in;
hp = gethostbyname(name);
+
if (!hp || !hp->h_addr_list) {
-#if PHP_DEBUG
- php_error(E_WARNING, "Unable to resolve %s\n", name);
-#endif
return estrdup(name);
}
+
memcpy(&in.s_addr, *(hp->h_addr_list), sizeof(in.s_addr));
+
return estrdup(inet_ntoa(in));
}
/* }}} */
@@ -181,7 +184,7 @@ char *php_gethostbyname(char *name)
Check DNS records corresponding to a given Internet host name or IP address */
PHP_FUNCTION(checkdnsrr)
{
- pval **arg1,**arg2;
+ zval **arg1,**arg2;
int type,i;
#ifndef MAXPACKET
#define MAXPACKET 8192 /* max packet size used internally by BIND */