You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ic...@apache.org on 2016/03/14 11:46:31 UTC
svn commit: r1734909 - in /httpd/test/mod_h2/trunk: mh2fuzz/h2c_util.c
mh2fuzz/mh2f_fuzzer.c test/test.sh test/test_common.sh test/test_header.sh
Author: icing
Date: Mon Mar 14 10:46:31 2016
New Revision: 1734909
URL: http://svn.apache.org/viewvc?rev=1734909&view=rev
Log:
test case for proxied request without :authority header
Added:
httpd/test/mod_h2/trunk/test/test_header.sh
Modified:
httpd/test/mod_h2/trunk/mh2fuzz/h2c_util.c
httpd/test/mod_h2/trunk/mh2fuzz/mh2f_fuzzer.c
httpd/test/mod_h2/trunk/test/test.sh
httpd/test/mod_h2/trunk/test/test_common.sh
Modified: httpd/test/mod_h2/trunk/mh2fuzz/h2c_util.c
URL: http://svn.apache.org/viewvc/httpd/test/mod_h2/trunk/mh2fuzz/h2c_util.c?rev=1734909&r1=1734908&r2=1734909&view=diff
==============================================================================
--- httpd/test/mod_h2/trunk/mh2fuzz/h2c_util.c (original)
+++ httpd/test/mod_h2/trunk/mh2fuzz/h2c_util.c Mon Mar 14 10:46:31 2016
@@ -47,8 +47,8 @@ static int count_header(void *ctx, const
return 1;
}
-#define NV_ADD_LIT_CS(nv, k, v) add_header(nv, k, sizeof(k) - 1, v, strlen(v))
-#define NV_ADD_CS_CS(nv, k, v) add_header(nv, k, strlen(k), v, strlen(v))
+#define NV_ADD_LIT_CS(nv, k, v) v? add_header(nv, k, sizeof(k) - 1, v, strlen(v)):0
+#define NV_ADD_CS_CS(nv, k, v) v? add_header(nv, k, strlen(k), v, strlen(v)):0
static int add_header(h2c_ngheader *ngh,
const char *key, size_t key_len,
Modified: httpd/test/mod_h2/trunk/mh2fuzz/mh2f_fuzzer.c
URL: http://svn.apache.org/viewvc/httpd/test/mod_h2/trunk/mh2fuzz/mh2f_fuzzer.c?rev=1734909&r1=1734908&r2=1734909&view=diff
==============================================================================
--- httpd/test/mod_h2/trunk/mh2fuzz/mh2f_fuzzer.c (original)
+++ httpd/test/mod_h2/trunk/mh2fuzz/mh2f_fuzzer.c Mon Mar 14 10:46:31 2016
@@ -287,6 +287,39 @@ static h2c_session_obs *ds_create(const
return &f->obs;
}
+/*******************************************************************************
+ * Use Host: header instead of :authority to simulate proxied requests,
+ * see RFC 7540 ch. 8.1.2.3
+ ******************************************************************************/
+ typedef struct fuzzer_hh {
+ h2c_session_obs obs;
+} fuzzer_hh;
+
+static void hh_submit(h2c_session *s, h2c_stream *stream, h2c_request *r,
+ h2c_session_obs *obs)
+{
+ fuzzer_hh *f = obs->ctx;
+
+ if (s->c->verbose > 1) {
+ fprintf(stderr, "h2c_conn(%ld-%d): submit :authority as Host\n",
+ s->c->id, stream->id);
+ }
+ h2c_request_headers_set(r, "Host", r->authority);
+ r->authority = NULL;
+}
+
+static h2c_session_obs *hh_create(const char *name, apr_pool_t *p)
+{
+ fuzzer_ds *f;
+ size_t prelen = sizeof("host-header")-1;
+
+ f = apr_pcalloc(p, sizeof(*f));
+ f->name = apr_pstrdup(p, name);
+ f->obs.ctx = f;
+ f->obs.before_submit = hh_submit;
+
+ return &f->obs;
+}
/*******************************************************************************
* fuzzing factory
@@ -314,5 +347,8 @@ struct h2c_session_obs *mh2f_session_fuz
if (HAS_PREFIX("submit-delay", name)) {
return ds_create(name, p);
}
+ if (HAS_PREFIX("host-header", name)) {
+ return hh_create(name, p);
+ }
return NULL;
}
Modified: httpd/test/mod_h2/trunk/test/test.sh
URL: http://svn.apache.org/viewvc/httpd/test/mod_h2/trunk/test/test.sh?rev=1734909&r1=1734908&r2=1734909&view=diff
==============================================================================
--- httpd/test/mod_h2/trunk/test/test.sh (original)
+++ httpd/test/mod_h2/trunk/test/test.sh Mon Mar 14 10:46:31 2016
@@ -47,6 +47,7 @@ $SHELL "$TEST_DIR"/test_curl_get.sh $
$SHELL "$TEST_DIR"/test_curl_post.sh $HTTPS_AUTH &&
$SHELL "$TEST_DIR"/test_vars.sh $HTTPS_AUTH &&
$SHELL "$TEST_DIR"/test_window_update.sh $HTTP_AUTH_2 &&
+$SHELL "$TEST_DIR"/test_header.sh $HTTPS_AUTH &&
$SHELL "$TEST_DIR"/test_push.sh $HTTPS_AUTH &&
$SHELL "$TEST_DIR"/test_trailer.sh $HTTPS_AUTH &&
$SHELL "$TEST_DIR"/test_nghttp_get.sh $HTTPS_AUTH/proxy alpn "HTTP/1.1" &&
@@ -65,6 +66,7 @@ $SHELL "$TEST_DIR"/test_nghttp_get.sh $
$SHELL "$TEST_DIR"/test_nghttp_post.sh $HTTP_AUTH &&
$SHELL "$TEST_DIR"/test_curl_get.sh $HTTP_AUTH &&
$SHELL "$TEST_DIR"/test_curl_post.sh $HTTP_AUTH &&
+$SHELL "$TEST_DIR"/test_header.sh $HTTP_AUTH &&
$SHELL "$TEST_DIR"/test_push.sh $HTTP_AUTH &&
$SHELL "$TEST_DIR"/test_trailer.sh $HTTP_AUTH &&
$SHELL "$TEST_DIR"/test_nghttp_get.sh $HTTP_AUTH direct &&
Modified: httpd/test/mod_h2/trunk/test/test_common.sh
URL: http://svn.apache.org/viewvc/httpd/test/mod_h2/trunk/test/test_common.sh?rev=1734909&r1=1734908&r2=1734909&view=diff
==============================================================================
--- httpd/test/mod_h2/trunk/test/test_common.sh (original)
+++ httpd/test/mod_h2/trunk/test/test_common.sh Mon Mar 14 10:46:31 2016
@@ -505,6 +505,19 @@ curl_check_altsvc() {
echo ok.
}
+mh2fuzz_check_results() {
+ local DOC="$1"; shift;
+ local MSG="$1"; shift;
+ rm -rf $TMP/*
+ mkdir -p $TMP
+ cat > $TMP/expected
+ echo -n " * mh2fuzz /$DOC: $MSG..."
+ ${MH2FUZZ} -v "$@" $URL_PREFIX/$DOC > $TMP/output 2>&1 || fail
+ fgrep '(2/3/4/5/0xx)' < $TMP/output > $TMP/results
+ diff -u $TMP/expected $TMP/results || fail "$(cat $TMP/output)"
+ echo ok.
+}
+
mh2fuzz_check_frames() {
local DOC="$1"; shift;
local MSG="$1"; shift;
Added: httpd/test/mod_h2/trunk/test/test_header.sh
URL: http://svn.apache.org/viewvc/httpd/test/mod_h2/trunk/test/test_header.sh?rev=1734909&view=auto
==============================================================================
--- httpd/test/mod_h2/trunk/test/test_header.sh (added)
+++ httpd/test/mod_h2/trunk/test/test_header.sh Mon Mar 14 10:46:31 2016
@@ -0,0 +1,29 @@
+#!/bin/bash
+# Copyright 2015 greenbytes GmbH (https://www.greenbytes.de)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+source $(dirname $0)/test_common.sh
+echo "test headers: $@"
+
+################################################################################
+# check header handling
+################################################################################
+
+
+URL_PREFIX="$1"
+
+mh2fuzz_check_results / "request with Host, but no :authority..." -f host-header <<EOF
+1/0/0/0/0 (2/3/4/5/0xx)
+EOF