Loading modules/proxy/mod_proxy_balancer.c +9 −4 Original line number Diff line number Diff line Loading @@ -534,10 +534,15 @@ static int proxy_balancer_pre_request(proxy_worker **worker, if (!*worker) { runtime = find_best_worker(*balancer, r); if (!runtime) { if ((*balancer)->workers->nelts) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, "proxy: BALANCER: (%s). All workers are in error state", (*balancer)->name); } else { ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, "proxy: BALANCER: (%s). No workers in balancer", (*balancer)->name); } return HTTP_SERVICE_UNAVAILABLE; } if ((*balancer)->sticky && runtime) { Loading modules/proxy/mod_proxy_connect.c +17 −4 Original line number Diff line number Diff line Loading @@ -201,7 +201,7 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, return DECLINED; } else { return HTTP_BAD_GATEWAY; return HTTP_SERVICE_UNAVAILABLE; } } Loading Loading @@ -270,7 +270,8 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, if ((rv = apr_pollset_create(&pollset, 2, r->pool, 0)) != APR_SUCCESS) { apr_socket_close(sock); ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_pollset_create()"); "proxy: CONNECT: error apr_pollset_create();" " check system or user limits"); return HTTP_INTERNAL_SERVER_ERROR; } Loading @@ -280,11 +281,23 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, pollfd.reqevents = APR_POLLIN; pollfd.desc.s = client_socket; pollfd.client_data = NULL; apr_pollset_add(pollset, &pollfd); rv = apr_pollset_add(pollset, &pollfd); if (rv != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_pollset_add();" " check system or user limits"); return HTTP_INTERNAL_SERVER_ERROR; } /* Add the server side to the poll */ pollfd.desc.s = sock; apr_pollset_add(pollset, &pollfd); rv = apr_pollset_add(pollset, &pollfd); if (rv != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_pollset_add();" " check system or user limits"); return HTTP_INTERNAL_SERVER_ERROR; } while (1) { /* Infinite loop until error (one side closes the connection) */ if ((rv = apr_pollset_poll(pollset, -1, &pollcnt, &signalled)) != APR_SUCCESS) { Loading modules/proxy/mod_proxy_http.c +29 −10 Original line number Diff line number Diff line Loading @@ -427,10 +427,15 @@ static int stream_reqbody_cl(apr_pool_t *p, apr_off_t bytes_streamed = 0; if (old_cl_val) { char *endstr; add_cl(p, bucket_alloc, header_brigade, old_cl_val); if (APR_SUCCESS != (status = apr_strtoff(&cl_val, old_cl_val, NULL, 0))) { return HTTP_INTERNAL_SERVER_ERROR; status = apr_strtoff(&cl_val, old_cl_val, &endstr, 10); if (status || *endstr || endstr == old_cl_val || cl_val < 0) { ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, "proxy: could not parse request Content-Length (%s)", old_cl_val); return HTTP_BAD_REQUEST; } } terminate_headers(bucket_alloc, header_brigade); Loading Loading @@ -463,8 +468,13 @@ static int stream_reqbody_cl(apr_pool_t *p, * * Prevents HTTP Response Splitting. */ if (bytes_streamed > cl_val) continue; if (bytes_streamed > cl_val) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "proxy: read more bytes of request body than expected " "(got %" APR_OFF_T_FMT ", expected %" APR_OFF_T_FMT ")", bytes_streamed, cl_val); return HTTP_INTERNAL_SERVER_ERROR; } if (header_brigade) { /* we never sent the header brigade, so go ahead and Loading Loading @@ -733,6 +743,14 @@ int ap_proxy_http_request(apr_pool_t *p, request_rec *r, e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(header_brigade, e); if (conf->preserve_host == 0) { if (ap_strchr_c(uri->hostname, ':')) { /* if literal IPv6 address */ if (uri->port_str && uri->port != DEFAULT_HTTP_PORT) { buf = apr_pstrcat(p, "Host: [", uri->hostname, "]:", uri->port_str, CRLF, NULL); } else { buf = apr_pstrcat(p, "Host: [", uri->hostname, "]", CRLF, NULL); } } else { if (uri->port_str && uri->port != DEFAULT_HTTP_PORT) { buf = apr_pstrcat(p, "Host: ", uri->hostname, ":", uri->port_str, CRLF, NULL); Loading @@ -740,6 +758,7 @@ int ap_proxy_http_request(apr_pool_t *p, request_rec *r, buf = apr_pstrcat(p, "Host: ", uri->hostname, CRLF, NULL); } } } else { /* don't want to use r->hostname, as the incoming header might have a * port attached Loading Loading @@ -947,7 +966,7 @@ int ap_proxy_http_request(apr_pool_t *p, request_rec *r, * encoding has been done by the extensions' handler, and * do not modify add_te_chunked's logic */ if (old_te_val && strcmp(old_te_val, "chunked") != 0) { if (old_te_val && strcasecmp(old_te_val, "chunked") != 0) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, "proxy: %s Transfer-Encoding is not supported", old_te_val); Loading modules/proxy/proxy_util.c +30 −28 Original line number Diff line number Diff line Loading @@ -1785,6 +1785,7 @@ PROXY_DECLARE(void) ap_proxy_initialize_worker_share(proxy_server_conf *conf, worker->name); return; } if (!worker->s) { /* Get scoreboard slot */ if (ap_scoreboard_image) { score = (proxy_worker_stat *) ap_get_scoreboard_lb(worker->id); Loading Loading @@ -1817,6 +1818,7 @@ PROXY_DECLARE(void) ap_proxy_initialize_worker_share(proxy_server_conf *conf, worker->name); return; } } if (worker->route) { strcpy(worker->s->route, worker->route); } Loading Loading
modules/proxy/mod_proxy_balancer.c +9 −4 Original line number Diff line number Diff line Loading @@ -534,10 +534,15 @@ static int proxy_balancer_pre_request(proxy_worker **worker, if (!*worker) { runtime = find_best_worker(*balancer, r); if (!runtime) { if ((*balancer)->workers->nelts) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, "proxy: BALANCER: (%s). All workers are in error state", (*balancer)->name); } else { ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, "proxy: BALANCER: (%s). No workers in balancer", (*balancer)->name); } return HTTP_SERVICE_UNAVAILABLE; } if ((*balancer)->sticky && runtime) { Loading
modules/proxy/mod_proxy_connect.c +17 −4 Original line number Diff line number Diff line Loading @@ -201,7 +201,7 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, return DECLINED; } else { return HTTP_BAD_GATEWAY; return HTTP_SERVICE_UNAVAILABLE; } } Loading Loading @@ -270,7 +270,8 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, if ((rv = apr_pollset_create(&pollset, 2, r->pool, 0)) != APR_SUCCESS) { apr_socket_close(sock); ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_pollset_create()"); "proxy: CONNECT: error apr_pollset_create();" " check system or user limits"); return HTTP_INTERNAL_SERVER_ERROR; } Loading @@ -280,11 +281,23 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, pollfd.reqevents = APR_POLLIN; pollfd.desc.s = client_socket; pollfd.client_data = NULL; apr_pollset_add(pollset, &pollfd); rv = apr_pollset_add(pollset, &pollfd); if (rv != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_pollset_add();" " check system or user limits"); return HTTP_INTERNAL_SERVER_ERROR; } /* Add the server side to the poll */ pollfd.desc.s = sock; apr_pollset_add(pollset, &pollfd); rv = apr_pollset_add(pollset, &pollfd); if (rv != APR_SUCCESS) { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_pollset_add();" " check system or user limits"); return HTTP_INTERNAL_SERVER_ERROR; } while (1) { /* Infinite loop until error (one side closes the connection) */ if ((rv = apr_pollset_poll(pollset, -1, &pollcnt, &signalled)) != APR_SUCCESS) { Loading
modules/proxy/mod_proxy_http.c +29 −10 Original line number Diff line number Diff line Loading @@ -427,10 +427,15 @@ static int stream_reqbody_cl(apr_pool_t *p, apr_off_t bytes_streamed = 0; if (old_cl_val) { char *endstr; add_cl(p, bucket_alloc, header_brigade, old_cl_val); if (APR_SUCCESS != (status = apr_strtoff(&cl_val, old_cl_val, NULL, 0))) { return HTTP_INTERNAL_SERVER_ERROR; status = apr_strtoff(&cl_val, old_cl_val, &endstr, 10); if (status || *endstr || endstr == old_cl_val || cl_val < 0) { ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, "proxy: could not parse request Content-Length (%s)", old_cl_val); return HTTP_BAD_REQUEST; } } terminate_headers(bucket_alloc, header_brigade); Loading Loading @@ -463,8 +468,13 @@ static int stream_reqbody_cl(apr_pool_t *p, * * Prevents HTTP Response Splitting. */ if (bytes_streamed > cl_val) continue; if (bytes_streamed > cl_val) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "proxy: read more bytes of request body than expected " "(got %" APR_OFF_T_FMT ", expected %" APR_OFF_T_FMT ")", bytes_streamed, cl_val); return HTTP_INTERNAL_SERVER_ERROR; } if (header_brigade) { /* we never sent the header brigade, so go ahead and Loading Loading @@ -733,6 +743,14 @@ int ap_proxy_http_request(apr_pool_t *p, request_rec *r, e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc); APR_BRIGADE_INSERT_TAIL(header_brigade, e); if (conf->preserve_host == 0) { if (ap_strchr_c(uri->hostname, ':')) { /* if literal IPv6 address */ if (uri->port_str && uri->port != DEFAULT_HTTP_PORT) { buf = apr_pstrcat(p, "Host: [", uri->hostname, "]:", uri->port_str, CRLF, NULL); } else { buf = apr_pstrcat(p, "Host: [", uri->hostname, "]", CRLF, NULL); } } else { if (uri->port_str && uri->port != DEFAULT_HTTP_PORT) { buf = apr_pstrcat(p, "Host: ", uri->hostname, ":", uri->port_str, CRLF, NULL); Loading @@ -740,6 +758,7 @@ int ap_proxy_http_request(apr_pool_t *p, request_rec *r, buf = apr_pstrcat(p, "Host: ", uri->hostname, CRLF, NULL); } } } else { /* don't want to use r->hostname, as the incoming header might have a * port attached Loading Loading @@ -947,7 +966,7 @@ int ap_proxy_http_request(apr_pool_t *p, request_rec *r, * encoding has been done by the extensions' handler, and * do not modify add_te_chunked's logic */ if (old_te_val && strcmp(old_te_val, "chunked") != 0) { if (old_te_val && strcasecmp(old_te_val, "chunked") != 0) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, "proxy: %s Transfer-Encoding is not supported", old_te_val); Loading
modules/proxy/proxy_util.c +30 −28 Original line number Diff line number Diff line Loading @@ -1785,6 +1785,7 @@ PROXY_DECLARE(void) ap_proxy_initialize_worker_share(proxy_server_conf *conf, worker->name); return; } if (!worker->s) { /* Get scoreboard slot */ if (ap_scoreboard_image) { score = (proxy_worker_stat *) ap_get_scoreboard_lb(worker->id); Loading Loading @@ -1817,6 +1818,7 @@ PROXY_DECLARE(void) ap_proxy_initialize_worker_share(proxy_server_conf *conf, worker->name); return; } } if (worker->route) { strcpy(worker->s->route, worker->route); } Loading