- fix endless loop in http_build_url("..")
authorMichael Wallner <mike@php.net>
Mon, 10 Jul 2006 12:47:22 +0000 (12:47 +0000)
committerMichael Wallner <mike@php.net>
Mon, 10 Jul 2006 12:47:22 +0000 (12:47 +0000)
- check for gethostname, getdomainname, getservbyport, getservbyname in configure

config9.m4
http_url_api.c

index 67d47a0fb707aa7d7c6c7f5b4b8161b123e11c2f..7bbb2c2b587184b49719f4f20300ed6b24091fe4 100644 (file)
@@ -93,10 +93,14 @@ if test "$PHP_HTTP" != "no"; then
                fi
        ])
 
-dnl -------
-dnl HEADERS
-dnl -------
+dnl ----
+dnl STDC
+dnl ----
        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(getservbyname, nsl)
 
 dnl ----
 dnl ZLIB
@@ -112,7 +116,7 @@ dnl ----
                done
                if test -z "$ZLIB_DIR"; then
                        AC_MSG_RESULT([not found])
-                       AC_MSG_WARN([could not find zlib.h])
+                       AC_MSG_ERROR([could not find zlib.h])
                else
                        AC_MSG_RESULT([found in $ZLIB_DIR])
                        AC_MSG_CHECKING([for zlib version >= 1.2.0.4])
@@ -181,19 +185,22 @@ dnl ----
                        AC_MSG_CHECKING([for SSL library used])
                        CURL_SSL_FLAVOUR=
                        for i in $CURL_LIBS; do
-                               if test "$i" = "-lssl" -o "$i" = "-lssl_unversion"; then
-                                       CURL_SSL_FLAVOUR="openssl"
-                                       AC_MSG_RESULT([openssl])
-                                       AC_DEFINE([HTTP_HAVE_OPENSSL], [1], [ ])
-                                       AC_CHECK_HEADERS([openssl/crypto.h])
-                                       break
-                               elif test "$i" = "-lgnutls"; then
-                                       CURL_SSL_FLAVOUR="gnutls"
-                                       AC_MSG_RESULT([gnutls])
-                                       AC_DEFINE([HTTP_HAVE_GNUTLS], [1], [ ])
-                                       AC_CHECK_HEADERS([gcrypt.h])
-                                       break
-                               fi
+                               case $i in
+                                       -lssl* | -lyassl*)
+                                               CURL_SSL_FLAVOUR="openssl"
+                                               AC_MSG_RESULT([openssl])
+                                               AC_DEFINE([HTTP_HAVE_OPENSSL], [1], [ ])
+                                               AC_CHECK_HEADERS([openssl/crypto.h])
+                                               break
+                                       ;;
+                                       -lgnutls*)
+                                               CURL_SSL_FLAVOUR="gnutls"
+                                               AC_MSG_RESULT([gnutls])
+                                               AC_DEFINE([HTTP_HAVE_GNUTLS], [1], [ ])
+                                               AC_CHECK_HEADERS([gcrypt.h])
+                                               break
+                                       ;;
+                               esac
                        done
                        if test -z "$CURL_SSL_FLAVOUR"; then
                                AC_MSG_RESULT([unknown!])
index fb7f0ae74f3581149ea811bb7a27362bf23f0553..9068378fcaebb17302cd81504a76139eeb3155dd 100644 (file)
@@ -32,10 +32,10 @@ static inline char *localhostname(void)
        if (SUCCESS == gethostname(hostname, lenof(hostname))) {
                return estrdup(hostname);
        }
-#elif defined(HAVE_UNISTD_H)
+#elif defined(HAVE_GETHOSTNAME)
        if (SUCCESS == gethostname(hostname, lenof(hostname))) {
+#      if defined(HAVE_GETDOMAINNAME)
                size_t hlen = strlen(hostname);
-               
                if (hlen <= lenof(hostname) - lenof("(none)")) {
                        hostname[hlen++] = '.';
                        if (SUCCESS == getdomainname(&hostname[hlen], lenof(hostname) - hlen)) {
@@ -45,6 +45,10 @@ static inline char *localhostname(void)
                                return estrdup(hostname);
                        }
                }
+#      endif
+               if (strcmp(hostname, "(none)")) {
+                       return estrdup(hostname);
+               }
        }
 #endif
        return estrdup("localhost");
@@ -92,7 +96,7 @@ PHP_HTTP_API char *_http_absolute_url(const char *url TSRMLS_DC)
 /* {{{ void http_build_url(int flags, const php_url *, const php_url *, php_url **, char **, size_t *) */
 PHP_HTTP_API void _http_build_url(int flags, const php_url *old_url, const php_url *new_url, php_url **url_ptr, char **url_str, size_t *url_len TSRMLS_DC)
 {
-#ifdef HTTP_HAVE_NETDB
+#if defined(HAVE_GETSERVBYPORT) || defined(HAVE_GETSERVBYNAME)
        struct servent *se;
 #endif
        php_url *url = ecalloc(1, sizeof(php_url));
@@ -165,14 +169,14 @@ PHP_HTTP_API void _http_build_url(int flags, const php_url *old_url, const php_u
                                url->scheme = estrndup("https", lenof("https"));
                                break;
 
-#ifndef HTTP_HAVE_NETDB
+#ifndef HAVE_GETSERVBYPORT
                        default:
 #endif
                        case 80:
                                url->scheme = estrndup("http", lenof("http"));
                                break;
                        
-#ifdef HTTP_HAVE_NETDB
+#ifdef HAVE_GETSERVBYPORT
                        default:
                                if ((se = getservbyport(htons(url->port), "tcp")) && se->s_name) {
                                        url->scheme = estrdup(se->s_name);
@@ -254,8 +258,12 @@ PHP_HTTP_API void _http_build_url(int flags, const php_url *old_url, const php_u
                                                        }
                                                }
                                                memmove(&ptr[1], pos, end - pos);
+                                               break;
+                                       } else if (!ptr[3]) {
+                                               /* .. at the end */
+                                               ptr[1] = '\0';
                                        }
-                                       break;
+                                       /* fallthrough */
                                
                                default:
                                        /* something else */
@@ -268,7 +276,7 @@ PHP_HTTP_API void _http_build_url(int flags, const php_url *old_url, const php_u
        if (url->port) {
                if (    ((url->port == 80) && !strcmp(url->scheme, "http"))
                        ||      ((url->port ==443) && !strcmp(url->scheme, "https"))
-#ifdef HTTP_HAVE_NETDB
+#ifdef HAVE_GETSERVBYNAME
                        ||      ((se = getservbyname(url->scheme, "tcp")) && se->s_port && 
                                        (url->port == ntohs(se->s_port)))
 #endif