Commit c14843e0 authored by Jeff Trawick's avatar Jeff Trawick
Browse files

API routines ap_pgethostbyname() and ap_pduphostent() are no longer

available.  Use apr_getaddrinfo() instead.

The ap_pduphostent() code was moved to modules/proxy/proxy_util.c for
now since that is the only caller.  When the proxy's use of the
resolver is APR-ized this won't be needed anymore.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@87399 13f79535-47bb-0310-9956-ffa450edef68
parent b8ee7d11
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -182,11 +182,11 @@ EXPORTS



	ap_pduphostent



	ap_pgethostbyname




	ap_pregcomp
+4 −0
Original line number Diff line number Diff line
Changes with Apache 2.0b1

  *) API routines ap_pgethostbyname() and ap_pduphostent() are no longer
     available.  Use apr_getaddrinfo() instead.  [Jeff Trawick]

  *) Get "NameVirtualHost *" working in 2.0.  [Ryan Bloom]

  *) Return HTTP_RANGE_NOT_SATISFIABLE if the every range requested starts
+0 −20
Original line number Diff line number Diff line
@@ -157,26 +157,6 @@ AP_DECLARE(apr_port_t) ap_default_port_for_scheme(const char *scheme_str);
 */
AP_DECLARE(apr_port_t) ap_default_port_for_request(const request_rec *r);

/**
 * Create a copy of a "struct hostent" record; it was presumably returned
 * from a call to gethostbyname() and lives in static storage.
 * By creating a copy we can tuck it away for later use.
 * @param p Pool to allocate out of
 * @param hp hostent to duplicate
 * @deffunc struct hostent * ap_pduphostent(apr_pool_t *p, const struct hostent *hp)
 */ 
AP_DECLARE(struct hostent *) ap_pduphostent(apr_pool_t *p, const struct hostent *hp);

/**
 * resolve hostname, if successful return an ALLOCATED COPY OF the hostent 
 * structure, intended to be stored and used later.
 * @param p The pool to allocate out of
 * @param hostname The hostname to resolve
 * @return The allocated hostent structure
 * @deffunc struct hostent * ap_pgethostbyname(apr_pool_t *p, const char *hostname)
 */
AP_DECLARE(struct hostent *) ap_pgethostbyname(apr_pool_t *p, const char *hostname);

/**
 * Unparse a uri_components structure to an URI string.  Optionally suppress 
 * the password for security reasons.
+2 −2
Original line number Diff line number Diff line
@@ -182,11 +182,11 @@ EXPORTS



	ap_pduphostent



	ap_pgethostbyname




	ap_pregcomp
+53 −1
Original line number Diff line number Diff line
@@ -1024,6 +1024,58 @@ static int proxy_match_domainname(struct dirconn_entry *This, request_rec *r)
	&& strncasecmp(&host[h_len - d_len], This->name, d_len) == 0;
}

/* Create a copy of a "struct hostent" record; it was presumably returned
 * from a call to gethostbyname() and lives in static storage.
 * By creating a copy we can tuck it away for later use.
 */
static struct hostent * pduphostent(apr_pool_t *p, const struct hostent *hp)
{
    struct hostent *newent;
    char	  **ptrs;
    char	  **aliases;
    struct in_addr *addrs;
    int		   i = 0, j = 0;

    if (hp == NULL)
	return NULL;

    /* Count number of alias entries */
    if (hp->h_aliases != NULL)
	for (; hp->h_aliases[j] != NULL; ++j)
	    continue;

    /* Count number of in_addr entries */
    if (hp->h_addr_list != NULL)
	for (; hp->h_addr_list[i] != NULL; ++i)
	    continue;

    /* Allocate hostent structure, alias ptrs, addr ptrs, addrs */
    newent = (struct hostent *) apr_palloc(p, sizeof(*hp));
    aliases = (char **) apr_palloc(p, (j+1) * sizeof(char*));
    ptrs = (char **) apr_palloc(p, (i+1) * sizeof(char*));
    addrs  = (struct in_addr *) apr_palloc(p, (i+1) * sizeof(struct in_addr));

    *newent = *hp;
    newent->h_name = apr_pstrdup(p, hp->h_name);
    newent->h_aliases = aliases;
    newent->h_addr_list = (char**) ptrs;

    /* Copy Alias Names: */
    for (j = 0; hp->h_aliases[j] != NULL; ++j) {
       aliases[j] = apr_pstrdup(p, hp->h_aliases[j]);
    }
    aliases[j] = NULL;

    /* Copy address entries */
    for (i = 0; hp->h_addr_list[i] != NULL; ++i) {
	ptrs[i] = (char*) &addrs[i];
	addrs[i] = *(struct in_addr *) hp->h_addr_list[i];
    }
    ptrs[i] = NULL;

    return newent;
}

/* Return TRUE if addr represents a host name */
int ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p)
{
@@ -1049,7 +1101,7 @@ int ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p)
    if (addr[i] != '\0' || ap_proxy_host2addr(addr, &host) != NULL)
	return 0;

    This->hostentry = ap_pduphostent (p, &host);
    This->hostentry = pduphostent (p, &host);

    /* Strip trailing dots */
    for (i = strlen(addr) - 1; i > 0 && addr[i] == '.'; --i)
Loading