(proxy_server_conf *) ap_get_module_config(sconf, &proxy_module);
struct noproxy_entry *npent = (struct noproxy_entry *) conf->noproxies->elts;
struct nocache_entry *ncent = (struct nocache_entry *) conf->nocaches->elts;
+ apr_sockaddr_t *localsa;
/* stuff for PASV mode */
unsigned int presult, h0, h1, h2, h3, p0, p1;
if (parms != NULL)
*(parms++) = '\0';
- if ((apr_create_tcp_socket(&sock, r->pool)) != APR_SUCCESS) {
+ if ((apr_create_socket(&sock, APR_INET, SOCK_STREAM, r->pool)) != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
"proxy: error creating socket");
return HTTP_INTERNAL_SERVER_ERROR;
}
/* try to set up PASV data connection first */
- if ((apr_create_tcp_socket(&dsock, r->pool)) != APR_SUCCESS) {
+ if ((apr_create_socket(&dsock, APR_INET, SOCK_STREAM, r->pool)) != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
"proxy: error creating PASV socket");
ap_bclose(f);
}
if (!pasvmode) { /* set up data connection */
- if ((apr_create_tcp_socket(&dsock, r->pool)) != APR_SUCCESS) {
+ if ((apr_create_socket(&dsock, APR_INET, SOCK_STREAM, r->pool)) != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
"proxy: error creating socket");
ap_bclose(f);
}
apr_get_port(&npport, APR_LOCAL, sock);
apr_get_ipaddr(&npaddr, APR_LOCAL, sock);
- apr_set_port(dsock, APR_LOCAL, npport);
- apr_set_ipaddr(dsock, APR_LOCAL, npaddr);
if (apr_setsocketopt(dsock, APR_SO_REUSEADDR, one) != APR_SUCCESS) {
#ifndef _OSD_POSIX /* BS2000 has this option "always on" */
#endif /*_OSD_POSIX*/
}
- if (apr_bind(dsock) != APR_SUCCESS) {
+ if (apr_getaddrinfo(&localsa, npaddr, APR_INET, npport, 0, r->pool)
+ != APR_SUCCESS) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+ "proxy: error creating local socket address");
+ ap_bclose(f);
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ if (apr_bind(dsock, localsa) != APR_SUCCESS) {
char buff[22];
apr_snprintf(buff, sizeof(buff), "%s:%d", npaddr, npport);
apr_status_t stat;
apr_port_t port;
char *ipaddr;
+ apr_sockaddr_t *localsa;
apr_get_port(&port, APR_LOCAL, s);
apr_get_ipaddr(&ipaddr, APR_LOCAL, s);
apr_snprintf(addr, sizeof(addr), "address %s port %u", ipaddr,
(unsigned) port);
+ stat = apr_getaddrinfo(&localsa, ipaddr, APR_INET, port, 0, p);
+ if (stat != APR_SUCCESS) {
+ ap_log_error(APLOG_MARK, APLOG_CRIT, stat, NULL,
+ "make_sock: for %s/%hu, apr_getaddrinfo() failed",
+ ipaddr, port);
+ apr_close_socket(s);
+ return stat;
+ }
+
stat = apr_setsocketopt(s, APR_SO_REUSEADDR, one);
if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
ap_log_error(APLOG_MARK, APLOG_CRIT, stat, NULL,
ap_sock_disable_nagle(s);
#endif
- if ((stat = apr_bind(s)) != APR_SUCCESS) {
+ if ((stat = apr_bind(s, localsa)) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_CRIT, stat, NULL,
"make_sock: could not bind to %s", addr);
apr_close_socket(s);
/* this has to survive restarts */
new = apr_palloc(process->pool, sizeof(ap_listen_rec));
new->active = 0;
- if ((status = apr_create_tcp_socket(&new->sd, process->pool)) != APR_SUCCESS) {
+ if ((status = apr_create_socket(&new->sd, APR_INET, SOCK_STREAM,
+ process->pool)) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_CRIT, status, NULL,
"make_sock: failed to get a socket for %s", addr);
return;
char *cp;
char buffer[RFC1413_MAXDATA + 1];
int buflen;
- apr_sockaddr_t *destsa;
+ apr_sockaddr_t *localsa, *destsa;
/*
* Bind the local and remote ends of the query socket to the same
* addresses from the query socket.
*/
- apr_set_port(sock, APR_LOCAL, ANY_PORT);
- apr_set_ipaddr(sock, APR_LOCAL, local_ip);
+ if ((status = apr_getaddrinfo(&localsa, local_ip, APR_INET, 0, 0, p))
+ != APR_SUCCESS) {
+ /* This should not fail since we have a numeric address string
+ * as the host. */
+ ap_log_error(APLOG_MARK, APLOG_CRIT, status, srv,
+ "rfc1413: apr_getaddrinfo() failed");
+ return -1;
+ }
- if ((status = apr_bind(sock)) != APR_SUCCESS) {
+ if ((status = apr_bind(sock, localsa)) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_CRIT, status, srv,
"bind: rfc1413: Error binding to local port");
return -1;
result = FROM_UNKNOWN;
- if ((status = apr_create_tcp_socket(&sock, conn->pool)) != APR_SUCCESS) {
+ if ((status = apr_create_socket(&sock, APR_INET, SOCK_STREAM,
+ conn->pool)) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_CRIT, status, srv,
"socket: rfc1413: error creating socket");
conn->remote_logname = result;