Browse Source

[multiple] use light_btst() for hdr existence chk

master
Glenn Strauss 12 months ago
parent
commit
4d6d1e790a
  1. 25
      src/http-header-glue.c
  2. 2
      src/mod_cgi.c
  3. 3
      src/mod_deflate.c
  4. 2
      src/mod_extforward.c
  5. 3
      src/mod_webdav.c
  6. 3
      src/response.c

25
src/http-header-glue.c

@ -186,10 +186,9 @@ int http_response_handle_cachable(request_st * const r, const buffer * const mti
CONST_STR_LEN("If-None-Match")))) {
/*(weak etag comparison must not be used for ranged requests)*/
int range_request =
(r->conf.range_requests
&& (200 == r->http_status || 0 == r->http_status)
&& NULL != http_header_request_get(r, HTTP_HEADER_RANGE,
CONST_STR_LEN("Range")));
(light_btst(r->rqst_htags, HTTP_HEADER_RANGE)
&& r->conf.range_requests
&& (200 == r->http_status || 0 == r->http_status));
if (etag_is_equal(&r->physical.etag, vb->ptr, !range_request)) {
if (http_method_get_or_head(r->http_method)) {
r->http_status = 304;
@ -582,8 +581,7 @@ void http_response_send_file (request_st * const r, buffer * const path) {
/* set response content-type, if not set already */
if (NULL == http_header_response_get(r, HTTP_HEADER_CONTENT_TYPE,
CONST_STR_LEN("Content-Type"))) {
if (!light_btst(r->resp_htags, HTTP_HEADER_CONTENT_TYPE)) {
const buffer *content_type = stat_cache_content_type_get(sce, r);
if (buffer_string_is_empty(content_type)) {
/* we are setting application/octet-stream, but also announce that
@ -611,15 +609,13 @@ void http_response_send_file (request_st * const r, buffer * const path) {
}
if (allow_caching) {
const buffer *etag = (0 != r->conf.etag_flags)
? stat_cache_etag_get(sce, r->conf.etag_flags)
: NULL;
if (!buffer_string_is_empty(etag)) {
if (NULL == http_header_response_get(r, HTTP_HEADER_ETAG,
CONST_STR_LEN("ETag"))) {
if (!light_btst(r->resp_htags, HTTP_HEADER_ETAG)
&& 0 != r->conf.etag_flags) {
const buffer *etag =
stat_cache_etag_get(sce, r->conf.etag_flags);
if (!buffer_string_is_empty(etag)) {
/* generate e-tag */
etag_mutate(&r->physical.etag, etag);
http_header_response_set(r, HTTP_HEADER_ETAG,
CONST_STR_LEN("ETag"),
CONST_BUF_LEN(&r->physical.etag));
@ -656,8 +652,7 @@ void http_response_send_file (request_st * const r, buffer * const path) {
&& (200 == r->http_status || 0 == r->http_status)
&& NULL != (vb = http_header_request_get(r, HTTP_HEADER_RANGE,
CONST_STR_LEN("Range")))
&& NULL == http_header_response_get(r, HTTP_HEADER_CONTENT_ENCODING,
CONST_STR_LEN("Content-Encoding"))) {
&& !light_btst(r->resp_htags, HTTP_HEADER_CONTENT_ENCODING)) {
const buffer *range = vb;
int do_range_request = 1;
/* check if we have a conditional GET */

2
src/mod_cgi.c

@ -906,7 +906,7 @@ URIHANDLER_FUNC(cgi_is_handled) {
hctx->conf.upgrade =
hctx->conf.upgrade
&& r->http_version == HTTP_VERSION_1_1
&& NULL != http_header_request_get(r, HTTP_HEADER_UPGRADE, CONST_STR_LEN("Upgrade"));
&& light_btst(r->rqst_htags, HTTP_HEADER_UPGRADE);
hctx->opts.fdfmt = S_IFIFO;
hctx->opts.backend = BACKEND_CGI;
hctx->opts.authorizer = 0;

3
src/mod_deflate.c

@ -1532,8 +1532,7 @@ REQUEST_FUNC(mod_deflate_handle_response_start) {
&& r->write_queue.first->type == FILE_CHUNK
&& r->write_queue.first->file.start == 0
&& !r->write_queue.first->file.is_temp
&& !http_header_response_get(r, HTTP_HEADER_RANGE,
CONST_STR_LEN("Range"))) {
&& !light_btst(r->resp_htags, HTTP_HEADER_RANGE)) {
tb = mod_deflate_cache_file_name(r, p->conf.cache_dir, vb);
/*(checked earlier and skipped if Transfer-Encoding had been set)*/
stat_cache_entry *sce = stat_cache_get_entry(tb);

2
src/mod_extforward.c

@ -1020,7 +1020,7 @@ static handler_t mod_extforward_Forwarded (request_st * const r, plugin_data * c
#if 0
if ((p->conf.opts & PROXY_FORWARDED_CREATE_XFF)
&& NULL == http_header_request_get(r, HTTP_HEADER_X_FORWARDED_FOR, CONST_STR_LEN("X-Forwarded-For"))) {
&& !light_btst(r->rqst_htags, HTTP_HEADER_X_FORWARDED_FOR)) {
/* create X-Forwarded-For if not present
* (and at least original connecting IP is a trusted proxy) */
buffer *xff = r->tmp_buf;

3
src/mod_webdav.c

@ -4303,8 +4303,7 @@ mod_webdav_put_0 (request_st * const r, const plugin_config * const pconf)
static handler_t
mod_webdav_put_prep (request_st * const r, const plugin_config * const pconf)
{
if (NULL != http_header_request_get(r, HTTP_HEADER_CONTENT_RANGE,
CONST_STR_LEN("Content-Range"))) {
if (light_btst(r->rqst_htags, HTTP_HEADER_CONTENT_RANGE)) {
if (pconf->opts & MOD_WEBDAV_UNSAFE_PARTIAL_PUT_COMPAT)
return HANDLER_GO_ON;
/* [RFC7231] 4.3.4 PUT

3
src/response.c

@ -197,8 +197,7 @@ static handler_t http_response_physical_path_check(request_st * const r) {
/* file name to be read was too long. return 404 */
case ENOENT:
if (r->http_method == HTTP_METHOD_OPTIONS
&& NULL != http_header_response_get(r, HTTP_HEADER_ALLOW,
CONST_STR_LEN("Allow"))) {
&& light_btst(r->resp_htags, HTTP_HEADER_ALLOW)) {
r->http_status = 200;
return HANDLER_FINISHED;
}

Loading…
Cancel
Save