From: Graham Leggett Date: Mon, 14 Sep 2009 19:43:02 +0000 (+0000) Subject: Backport from trunk: X-Git-Tag: 2.2.14~51 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab7366a926f375a2143427daf014f35b829a71b6;p=thirdparty%2Fapache%2Fhttpd.git Backport from trunk: Add support for HTTP PUT to ab. Submitted by: Jeff Barnes git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@814805 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 4e0d9c7de4d..60bc295324e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@  -*- coding: utf-8 -*- Changes with Apache 2.2.14 + *) Add support for HTTP PUT to ab. [Jeff Barnes ] + *) mod_ssl: Fix SSL_*_DN_UID variables to use the 'userID' attribute type. PR 45107. [Michael Ströder , Peter Sylvester ] diff --git a/STATUS b/STATUS index be0831b9a26..c0e1f261741 100644 --- a/STATUS +++ b/STATUS @@ -89,12 +89,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * ab: Add support for HTTP PUT to ab. - Trunk Patch: http://svn.apache.org/viewvc?rev=811806&view=rev - http://svn.apache.org/viewvc?rev=811869&view=rev - 2.2.x Patch: http://people.apache.org/~minfrin/ab.diff - +1: minfrin, covener, poirier - * htcacheclean: 19 ways to fail, 1 error message. Fixed. Trunk Patch: http://svn.apache.org/viewvc?view=rev&revision=814091 +1: covener, poirier diff --git a/docs/manual/programs/ab.xml b/docs/manual/programs/ab.xml index 5161cf5df7f..518c925adc0 100644 --- a/docs/manual/programs/ab.xml +++ b/docs/manual/programs/ab.xml @@ -57,6 +57,7 @@ [ -S ] [ -t timelimit ] [ -T content-type ] + [ -u PUT-file ] [ -v verbosity] [ -V ] [ -w ] @@ -163,10 +164,13 @@ fixed total amount of time. Per default there is no timelimit.
-T content-type
-
Content-type header to use for POST data, eg. +
Content-type header to use for POST/PUT data, eg. application/x-www-form-urlencoded. Default: text/plain.
+
-u PUT-file
+
File containing data to PUT. Remember to also set -T.
+
-v verbosity
Set verbosity level - 4 and above prints information on headers, 3 and above prints response codes (404, 200, etc.), diff --git a/support/ab.c b/support/ab.c index 9626e017b8f..4f7d290173d 100644 --- a/support/ab.c +++ b/support/ab.c @@ -763,8 +763,10 @@ static void output_results(int sig) if (keepalive) printf("Keep-Alive requests: %d\n", doneka); printf("Total transferred: %" APR_INT64_T_FMT " bytes\n", totalread); - if (posting > 0) + if (posting == 1) printf("Total POSTed: %" APR_INT64_T_FMT "\n", totalposted); + if (posting == 2) + printf("Total PUT: %" APR_INT64_T_FMT "\n", totalposted); printf("HTML transferred: %" APR_INT64_T_FMT " bytes\n", totalbread); /* avoid divide by zero */ @@ -1048,10 +1050,14 @@ static void output_html_results(void) printf("Total transferred:" "%" APR_INT64_T_FMT " bytes\n", trstring, tdstring, tdstring, totalread); - if (posting > 0) + if (posting == 1) printf("Total POSTed:" "%" APR_INT64_T_FMT "\n", trstring, tdstring, tdstring, totalposted); + if (posting == 2) + printf("Total PUT:" + "%" APR_INT64_T_FMT "\n", + trstring, tdstring, tdstring, totalposted); printf("HTML transferred:" "%" APR_INT64_T_FMT " bytes\n", trstring, tdstring, tdstring, totalbread); @@ -1606,12 +1612,13 @@ static void test(void) } else { snprintf_res = apr_snprintf(request, sizeof(_request), - "POST %s HTTP/1.0\r\n" + "%s %s HTTP/1.0\r\n" "%s" "%s" "%s" "Content-length: %" APR_SIZE_T_FMT "\r\n" "Content-type: %s\r\n" "%s" "\r\n", + (posting == 1) ? "POST" : "PUT", (isproxy) ? fullurl : path, keepalive ? "Connection: Keep-Alive\r\n" : "", cookie, auth, @@ -1623,14 +1630,15 @@ static void test(void) } if (verbosity >= 2) - printf("INFO: POST header == \n---\n%s\n---\n", request); + printf("INFO: %s header == \n---\n%s\n---\n", + (posting == 2) ? "PUT" : "POST", request); reqlen = strlen(request); /* * Combine headers and (optional) post file into one contineous buffer */ - if (posting == 1) { + if (posting >= 1) { char *buff = malloc(postlen + reqlen + 1); if (!buff) { fprintf(stderr, "error creating request buffer: out of memory\n"); @@ -1831,6 +1839,7 @@ static void usage(const char *progname) fprintf(stderr, " -t timelimit Seconds to max. wait for responses\n"); fprintf(stderr, " -b windowsize Size of TCP send/receive buffer, in bytes\n"); fprintf(stderr, " -p postfile File containing data to POST. Remember also to set -T\n"); + fprintf(stderr, " -u putfile File containing data to PUT. Remember also to set -T\n"); fprintf(stderr, " -T content-type Content-type header for POSTing, eg.\n"); fprintf(stderr, " 'application/x-www-form-urlencoded'\n"); fprintf(stderr, " Default is 'text/plain'\n"); @@ -2022,7 +2031,7 @@ int main(int argc, const char * const argv[]) #endif apr_getopt_init(&opt, cntxt, argc, argv); - while ((status = apr_getopt(opt, "n:c:t:b:T:p:v:rkVhwix:y:z:C:H:P:A:g:X:de:Sq" + while ((status = apr_getopt(opt, "n:c:t:b:T:p:u:v:rkVhwix:y:z:C:H:P:A:g:X:de:Sq" #ifdef USE_SSL "Z:f:" #endif @@ -2047,8 +2056,8 @@ int main(int argc, const char * const argv[]) windowsize = atoi(optarg); break; case 'i': - if (posting == 1) - err("Cannot mix POST and HEAD\n"); + if (posting > 0) + err("Cannot mix POST/PUT and HEAD\n"); posting = -1; break; case 'g': @@ -2073,6 +2082,16 @@ int main(int argc, const char * const argv[]) exit(r); } break; + case 'u': + if (posting != 0) + err("Cannot mix PUT and HEAD\n"); + if (0 == (r = open_postfile(optarg))) { + posting = 2; + } + else if (postdata) { + exit(r); + } + break; case 'r': recverrok = 1; break;