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