PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- *) mod_proxy_wstunnel: Avoid an empty response by failing with 502 (Bad
- Gateway) when no response is ever received from the backend.
- trunk patch: http://svn.apache.org/r1669299
- 2.4.x patch: http://people.apache.org/~covener/patches/httpd-2.4.x-wstunel-noreply.diff
- +1 covener, ylavic, trawick
-
*) mod_ssl: Fix possible crash when loading server certificate constraints.
PR 57694.
trunk patch: http://svn.apache.org/r1666297
static apr_status_t proxy_wstunnel_transfer(request_rec *r, conn_rec *c_i, conn_rec *c_o,
- apr_bucket_brigade *bb, char *name)
+ apr_bucket_brigade *bb, char *name, int *sent)
{
apr_status_t rv;
#ifdef DEBUGGING
"read %" APR_OFF_T_FMT
" bytes from %s", len, name);
#endif
+ if (sent) {
+ *sent = 1;
+ }
rv = ap_pass_brigade(c_o->output_filters, bb);
if (rv == APR_SUCCESS) {
ap_fflush(c_o->output_filters, bb);
char *old_te_val = NULL;
apr_bucket_brigade *bb = apr_brigade_create(p, c->bucket_alloc);
apr_socket_t *client_socket = ap_get_conn_socket(c);
- int done = 0;
+ int done = 0, replied = 0;
header_brigade = apr_brigade_create(p, backconn->bucket_alloc);
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02446)
"sock was readable");
done |= proxy_wstunnel_transfer(r, backconn, c, bb,
- "sock") != APR_SUCCESS;
+ "sock", NULL) != APR_SUCCESS;
}
else if (pollevent & APR_POLLERR) {
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02447)
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02448)
"client was readable");
done |= proxy_wstunnel_transfer(r, c, backconn, bb,
- "client") != APR_SUCCESS;
+ "client", &replied) != APR_SUCCESS;
}
else if (pollevent & APR_POLLERR) {
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02607)
ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r,
"finished with poll() - cleaning up");
+ if (!replied) {
+ return HTTP_BAD_GATEWAY;
+ }
+ else {
+ return OK;
+ }
+
return OK;
}