X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=jbsockets.c;h=d601fb2d5ba5de8d6d624fdbb4b27619617639c6;hp=74a3e43e94741e97be9d2a4f19bf6985d3133b02;hb=4c7a629c82d606ac774892e8113c078d16619597;hpb=e960d924ca9abc7e98f490b61dd5f65a189e6ff7 diff --git a/jbsockets.c b/jbsockets.c index 74a3e43e..d601fb2d 100644 --- a/jbsockets.c +++ b/jbsockets.c @@ -1,4 +1,4 @@ -const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.45 2007/09/30 16:59:22 fabiankeil Exp $"; +const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.47 2008/03/26 18:07:07 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $ @@ -35,6 +35,14 @@ const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.45 2007/09/30 16:59:22 fabian * * Revisions : * $Log: jbsockets.c,v $ + * Revision 1.47 2008/03/26 18:07:07 fabiankeil + * Add hostname directive. Closes PR#1918189. + * + * Revision 1.46 2008/03/21 11:13:57 fabiankeil + * Only gather host information if it's actually needed. + * Also move the code out of accept_connection() so it's less likely + * to delay other incoming connections if the host is misconfigured. + * * Revision 1.45 2007/09/30 16:59:22 fabiankeil * Set the maximum listen() backlog to 128. Apparently SOMAXCONN is * neither high enough, nor a hard limit on mingw32. Again for BR#1795281. @@ -724,7 +732,8 @@ int bind_port(const char *hostnam, int portnum, jb_socket *pfd) * 2 : ip_address = Pointer to return the pointer to * the ip address string. * 3 : hostname = Pointer to return the pointer to - * the hostname. + * the hostname or NULL if the caller + * isn't interested in it. * * Returns : void. * @@ -750,12 +759,24 @@ void get_host_information(jb_socket afd, char **ip_address, char **hostname) #endif /* def HAVE_GETHOSTBYADDR_R_(8|7|5)_ARGS */ s_length = sizeof(server); - *hostname = NULL; + if (NULL != hostname) + { + *hostname = NULL; + } *ip_address = NULL; if (!getsockname(afd, (struct sockaddr *) &server, &s_length)) { *ip_address = strdup(inet_ntoa(server.sin_addr)); + + if (NULL == hostname) + { + /* + * We're done here, the caller isn't + * interested in knowing the hostname. + */ + return; + } #if defined(HAVE_GETHOSTBYADDR_R_8_ARGS) gethostbyaddr_r((const char *)&server.sin_addr, sizeof(server.sin_addr), AF_INET, @@ -777,10 +798,10 @@ void get_host_information(jb_socket afd, char **ip_address, char **hostname) host = NULL; } #elif FEATURE_PTHREAD - pthread_mutex_lock(&resolver_mutex); + privoxy_mutex_lock(&resolver_mutex); host = gethostbyaddr((const char *)&server.sin_addr, sizeof(server.sin_addr), AF_INET); - pthread_mutex_unlock(&resolver_mutex); + privoxy_mutex_unlock(&resolver_mutex); #else host = gethostbyaddr((const char *)&server.sin_addr, sizeof(server.sin_addr), AF_INET); @@ -923,7 +944,7 @@ unsigned long resolve_hostname_to_ip(const char *host) hostp = NULL; } #elif FEATURE_PTHREAD - pthread_mutex_lock(&resolver_mutex); + privoxy_mutex_lock(&resolver_mutex); while (NULL == (hostp = gethostbyname(host)) && (h_errno == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES)) { @@ -931,7 +952,7 @@ unsigned long resolve_hostname_to_ip(const char *host) "Timeout #%u while trying to resolve %s. Trying again.", dns_retries, host); } - pthread_mutex_unlock(&resolver_mutex); + privoxy_mutex_unlock(&resolver_mutex); #else while (NULL == (hostp = gethostbyname(host)) && (h_errno == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES))