Browse Source

Forward also POST data to CGI pages

bel 10 years ago
parent
commit
180e45fdfc
2 changed files with 23 additions and 18 deletions
  1. 20 17
      src/civetweb.c
  2. 3 1
      test/windows.cgi.cmd

+ 20 - 17
src/civetweb.c

@@ -1174,16 +1174,16 @@ static int mg_vsnprintf(struct mg_connection *conn, char *buf, size_t buflen,
     if (buflen == 0)
         return 0;
 
-    #ifdef __clang__
-    #pragma clang diagnostic push
-    #pragma clang diagnostic ignored "Wformat-nonliteral"
-    /* Using fmt as a non-literal is intended here, since it is mostly called indirectly by mg_snprintf */
-    #endif
-
-    n = vsnprintf(buf, buflen, fmt, ap);
-
-    #ifdef __clang__
-    #pragma clang diagnostic pop
+    #ifdef __clang__
+    #pragma clang diagnostic push
+    #pragma clang diagnostic ignored "Wformat-nonliteral"
+    /* Using fmt as a non-literal is intended here, since it is mostly called indirectly by mg_snprintf */
+    #endif
+
+    n = vsnprintf(buf, buflen, fmt, ap);
+
+    #ifdef __clang__
+    #pragma clang diagnostic pop
     #endif
 
     if (n < 0) {
@@ -4493,9 +4493,8 @@ static int is_valid_http_method(const char *method)
     return !strcmp(method, "GET") || !strcmp(method, "POST") ||
            !strcmp(method, "HEAD") || !strcmp(method, "CONNECT") ||
            !strcmp(method, "PUT") || !strcmp(method, "DELETE") ||
-           !strcmp(method, "OPTIONS") || !strcmp(method, "PROPFIND")
-           || !strcmp(method, "MKCOL")
-           ;
+           !strcmp(method, "OPTIONS") || !strcmp(method, "PROPFIND") ||
+           !strcmp(method, "MKCOL");
 }
 
 /* Parse HTTP request, fill in mg_request_info structure.
@@ -4947,10 +4946,14 @@ static void handle_cgi_request(struct mg_connection *conn, const char *prog)
     setbuf(out, NULL);
     fout.fp = out;
 
-    /* Send POST data to the CGI process if needed */
-    if (!strcmp(conn->request_info.request_method, "POST") &&
-        !forward_body_data(conn, in, INVALID_SOCKET, NULL)) {
-        goto done;
+    /* Send POST or PUT data to the CGI process if needed */
+    if (!mg_strcasecmp(conn->request_info.request_method, "POST") ||
+        !mg_strcasecmp(conn->request_info.request_method, "PUT")) {
+        /* This is a POST/PUT request */
+        if (!forward_body_data(conn, in, INVALID_SOCKET, NULL)) {
+            /* Error sending the body data */
+            goto done;
+        }
     }
 
     /* Close so child gets an EOF. */

+ 3 - 1
test/windows.cgi.cmd

@@ -2,4 +2,6 @@
 echo HTTP/1.1 200 OK
 echo Connection: close
 echo.
-echo CGI test
+echo CGI test:
+echo.
+set