From 6076d966844330e8bb12a7c19a57242ca3c0a9a8 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Wed, 13 Aug 2014 12:29:44 +0200 Subject: [PATCH] Removed port and scheme guessing of http\Url for portability --- config.w32 | 2 -- config9.m4 | 5 +-- package.xml | 2 ++ php_http_api.h | 11 +++--- php_http_url.c | 91 +------------------------------------------------- 5 files changed, 8 insertions(+), 103 deletions(-) diff --git a/config.w32 b/config.w32 index 497fb65..b84101f 100644 --- a/config.w32 +++ b/config.w32 @@ -61,8 +61,6 @@ if (PHP_HTTP != "no") { AC_DEFINE("HTTP_SHARED_DEPS", 1, "Depend on shared extensions"); AC_DEFINE("HAVE_GETHOSTNAME", 1); - AC_DEFINE("HAVE_GETSERVBYPORT", 1); - AC_DEFINE("HAVE_GETSERVBYNAME", 1); if (PHP_DEBUG != "no") { ADD_FLAG("CFLAGS_HTTP", "/W3"); diff --git a/config9.m4 b/config9.m4 index ba1b935..17e9933 100644 --- a/config9.m4 +++ b/config9.m4 @@ -96,13 +96,10 @@ if test "$PHP_HTTP" != "no"; then dnl ---- dnl STDC dnl ---- + dnl getdomainname() is declared in netdb.h on some platforms: AIX, OSF AC_CHECK_HEADERS([netdb.h unistd.h]) PHP_CHECK_FUNC(gethostname, nsl) PHP_CHECK_FUNC(getdomainname, nsl) - PHP_CHECK_FUNC(getservbyport, nsl) - PHP_CHECK_FUNC(getservbyport_r, nsl) - PHP_CHECK_FUNC(getservbyname, nsl) - PHP_CHECK_FUNC(getservbyname_r, nsl) dnl ---- dnl ZLIB diff --git a/package.xml b/package.xml index bd7b579..4354350 100644 --- a/package.xml +++ b/package.xml @@ -49,6 +49,8 @@ v2: http://dev.iworks.at/ext-http/lcov/ext/http/ BSD, revised diff --git a/php_http_api.h b/php_http_api.h index 9e0dc6c..091fd65 100644 --- a/php_http_api.h +++ b/php_http_api.h @@ -58,17 +58,14 @@ typedef int STATUS; #ifdef PHP_WIN32 # define CURL_STATICLIB -# define PHP_HTTP_HAVE_NETDB # include -#elif defined(HAVE_NETDB_H) -# define PHP_HTTP_HAVE_NETDB -# include +#else +# ifdef HAVE_NETDB_H +# include +# endif # ifdef HAVE_UNISTD_H # include # endif -# ifdef HAVE_ERRNO_H -# include -# endif #endif #include diff --git a/php_http_url.c b/php_http_url.c index c4eb90b..7c8077b 100644 --- a/php_http_url.c +++ b/php_http_url.c @@ -42,94 +42,6 @@ static inline char *localhostname(void) return estrndup("localhost", lenof("localhost")); } -static inline unsigned port(const char *scheme) -{ - unsigned port = 80; - -#if defined(ZTS) && defined(HAVE_GETSERVBYPORT_R) - int rc; - size_t len = 0xff; - char *buf = NULL; - struct servent *se_res = NULL, se_buf = {0}; - - do { - buf = erealloc(buf, len); - rc = getservbyname_r(scheme, "tcp", &se_buf, buf, len, &se_res); - len *= 2; - } while (rc == ERANGE && len <= 0xfff); - - if (!rc) { - port = ntohs(se_res->s_port); - } - - efree(buf); -#elif !defined(ZTS) && defined(HAVE_GETSERVBYPORT) - struct servent *se; - - if ((se = getservbyname(scheme, "tcp")) && se->s_port) { - port = ntohs(se->s_port); - } -#endif - - return port; -} -static inline char *scheme(unsigned port) -{ - char *scheme; -#if defined(ZTS) && defined(HAVE_GETSERVBYPORT_R) - int rc; - size_t len = 0xff; - char *buf = NULL; - struct servent *se_res = NULL, se_buf = {0}; -#elif !defined(ZTS) && defined(HAVE_GETSERVBYPORT) - struct servent *se; -#endif - - switch (port) { - case 443: - scheme = estrndup("https", lenof("https")); - break; - -#if defined(ZTS) && !defined(HAVE_GETSERVBYPORT_R) - default: -#elif !defined(ZTS) && !defined(HAVE_GETSERVBYPORT) - default: -#endif - case 80: - case 0: - scheme = estrndup("http", lenof("http")); - break; - -#if defined(ZTS) && defined(HAVE_GETSERVBYPORT_R) - default: - do { - buf = erealloc(buf, len); - rc = getservbyport_r(htons(port), "tcp", &se_buf, buf, len, &se_res); - len *= 2; - } while (rc == ERANGE && len <= 0xfff); - - if (!rc && se_res) { - scheme = estrdup(se_res->s_name); - } else { - scheme = estrndup("http", lenof("http")); - } - - efree(buf); - break; - -#elif !defined(ZTS) && defined(HAVE_GETSERVBYPORT) - default: - if ((se = getservbyport(htons(port), "tcp")) && se->s_name) { - scheme = estrdup(se->s_name); - } else { - scheme = estrndup("http", lenof("http")); - } - break; -#endif - } - return scheme; -} - static php_url *php_http_url_from_env(php_url *url TSRMLS_DC) { zval *https, *zhost, *zport; @@ -150,7 +62,7 @@ static php_url *php_http_url_from_env(php_url *url TSRMLS_DC) if (https && !strcasecmp(Z_STRVAL_P(https), "ON")) { url->scheme = estrndup("https", lenof("https")); } else { - url->scheme = scheme(url->port); + url->scheme = estrndup("http", lenof("http")); } /* host */ @@ -339,7 +251,6 @@ void php_http_url(int flags, const php_url *old_url, const php_url *new_url, php if (url->port) { if ( ((url->port == 80) && !strcmp(url->scheme, "http")) || ((url->port ==443) && !strcmp(url->scheme, "https")) - || ( url->port == port(url->scheme)) ) { url->port = 0; } -- 2.30.2