From: Fabian K. <fab...@us...> - 2014-02-10 14:42:20
|
Update of /cvsroot/ijbswa/current In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv16846 Modified Files: parsers.c Log Message: Properly deal with Keep-Alive headers with timeout= parameters If the timeout still can't be parsed, use the configured timeout instead of preventing the client from keeping the connection alive. Should fix #3615312/#870 reported by Bernard Guillot. Index: parsers.c =================================================================== RCS file: /cvsroot/ijbswa/current/parsers.c,v retrieving revision 1.282 retrieving revision 1.283 diff -C2 -d -r1.282 -r1.283 *** parsers.c 24 Dec 2013 13:34:45 -0000 1.282 --- parsers.c 10 Feb 2014 14:42:18 -0000 1.283 *************** *** 1736,1740 **** { unsigned int keep_alive_timeout; ! const char *timeout_position = strstr(*header, ": "); if (!(csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)) --- 1736,1740 ---- { unsigned int keep_alive_timeout; ! char *timeout_position; if (!(csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)) *************** *** 1746,1772 **** } if ((NULL == timeout_position) || (1 != sscanf(timeout_position, ": %u", &keep_alive_timeout))) { ! log_error(LOG_LEVEL_ERROR, "Couldn't parse: %s", *header); ! } ! else ! { ! if (keep_alive_timeout < csp->config->keep_alive_timeout) ! { ! log_error(LOG_LEVEL_HEADER, ! "Reducing keep-alive timeout from %u to %u.", ! csp->config->keep_alive_timeout, keep_alive_timeout); ! csp->server_connection.keep_alive_timeout = keep_alive_timeout; ! } ! else { - /* XXX: Is this log worthy? */ log_error(LOG_LEVEL_HEADER, ! "Client keep-alive timeout is %u. Sticking with %u.", ! keep_alive_timeout, csp->config->keep_alive_timeout); } } return JB_ERR_OK; } --- 1746,1782 ---- } + /* Check for parameter-less format "Keep-Alive: 100" */ + timeout_position = strstr(*header, ": "); if ((NULL == timeout_position) || (1 != sscanf(timeout_position, ": %u", &keep_alive_timeout))) { ! /* Assume parameter format "Keep-Alive: timeout=100" */ ! timeout_position = strstr(*header, "timeout="); ! if ((NULL == timeout_position) ! || (1 != sscanf(timeout_position, "timeout=%u", &keep_alive_timeout))) { log_error(LOG_LEVEL_HEADER, ! "Couldn't parse: '%s'. Using default timeout %u", ! *header, csp->config->keep_alive_timeout); ! ! return JB_ERR_OK; } } + if (keep_alive_timeout < csp->config->keep_alive_timeout) + { + log_error(LOG_LEVEL_HEADER, + "Reducing keep-alive timeout from %u to %u.", + csp->config->keep_alive_timeout, keep_alive_timeout); + csp->server_connection.keep_alive_timeout = keep_alive_timeout; + } + else + { + /* XXX: Is this log worthy? */ + log_error(LOG_LEVEL_HEADER, + "Client keep-alive timeout is %u. Sticking with %u.", + keep_alive_timeout, csp->config->keep_alive_timeout); + } + return JB_ERR_OK; } |