diff options
Diffstat (limited to 'test/modules/http2/htdocs')
-rw-r--r-- | test/modules/http2/htdocs/cgi/echo.py | 3 | ||||
-rw-r--r-- | test/modules/http2/htdocs/cgi/echohd.py | 24 | ||||
-rw-r--r-- | test/modules/http2/htdocs/cgi/env.py | 35 | ||||
-rw-r--r-- | test/modules/http2/htdocs/cgi/hecho.py | 29 | ||||
-rw-r--r-- | test/modules/http2/htdocs/cgi/mnot164.py | 31 | ||||
-rw-r--r-- | test/modules/http2/htdocs/cgi/necho.py | 40 | ||||
-rw-r--r-- | test/modules/http2/htdocs/cgi/upload.py | 62 |
7 files changed, 156 insertions, 68 deletions
diff --git a/test/modules/http2/htdocs/cgi/echo.py b/test/modules/http2/htdocs/cgi/echo.py index 58d811c42d..c9083e1d53 100644 --- a/test/modules/http2/htdocs/cgi/echo.py +++ b/test/modules/http2/htdocs/cgi/echo.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 -import sys, cgi, os +import os, sys +import multipart status = '200 Ok' diff --git a/test/modules/http2/htdocs/cgi/echohd.py b/test/modules/http2/htdocs/cgi/echohd.py index 371ae8b0f7..2a138cd844 100644 --- a/test/modules/http2/htdocs/cgi/echohd.py +++ b/test/modules/http2/htdocs/cgi/echohd.py @@ -1,11 +1,25 @@ #!/usr/bin/env python3 -import cgi, os -import cgitb; cgitb.enable() +import os, sys +import multipart +from urllib import parse -status = '200 Ok' -form = cgi.FieldStorage() -name = form.getvalue('name') +def get_request_params(): + oforms = {} + if "REQUEST_URI" in os.environ: + qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query) + for name, values in qforms.items(): + oforms[name] = values[0] + myenv = os.environ.copy() + myenv['wsgi.input'] = sys.stdin.buffer + mforms, ofiles = multipart.parse_form_data(environ=myenv) + for name, item in mforms.items(): + oforms[name] = item + return oforms, ofiles + + +forms, files = get_request_params() +name = forms['name'] if 'name' in forms else None if name: print("Status: 200") diff --git a/test/modules/http2/htdocs/cgi/env.py b/test/modules/http2/htdocs/cgi/env.py index 5c9c0b1adb..3af576496a 100644 --- a/test/modules/http2/htdocs/cgi/env.py +++ b/test/modules/http2/htdocs/cgi/env.py @@ -1,28 +1,45 @@ #!/usr/bin/env python3 -import cgi, os -import cgitb; cgitb.enable() +import os, sys +import multipart +from urllib import parse + + +def get_request_params(): + oforms = {} + if "REQUEST_URI" in os.environ: + qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query) + for name, values in qforms.items(): + oforms[name] = values[0] + myenv = os.environ.copy() + myenv['wsgi.input'] = sys.stdin.buffer + mforms, ofiles = multipart.parse_form_data(environ=myenv) + for name, item in mforms.items(): + oforms[name] = item + return oforms, ofiles + + +forms, files = get_request_params() status = '200 Ok' try: - form = cgi.FieldStorage() - input = form['name'] + ename = forms['name'] # Test if the file was uploaded - if input.value is not None: - val = os.environ[input.value] if input.value in os.environ else "" + if ename is not None: + val = os.environ[ename] if ename in os.environ else "" print("Status: 200") print("""\ Content-Type: text/plain\n""") - print("{0}={1}".format(input.value, val)) + print(f"{ename}={val}") else: print("Status: 400 Parameter Missing") print("""\ Content-Type: text/html\n <html><body> - <p>No name was specified: %s</p> - </body></html>""" % (count.value)) + <p>No name was specified: name</p> + </body></html>""") except KeyError: print("Status: 200 Ok") diff --git a/test/modules/http2/htdocs/cgi/hecho.py b/test/modules/http2/htdocs/cgi/hecho.py index 5c1f79a302..fb9e330b60 100644 --- a/test/modules/http2/htdocs/cgi/hecho.py +++ b/test/modules/http2/htdocs/cgi/hecho.py @@ -1,18 +1,35 @@ #!/usr/bin/env python3 -import cgi, os -import cgitb; cgitb.enable() +import os, sys +import multipart +from urllib import parse + + +def get_request_params(): + oforms = {} + if "REQUEST_URI" in os.environ: + qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query) + for name, values in qforms.items(): + oforms[name] = values[0] + myenv = os.environ.copy() + myenv['wsgi.input'] = sys.stdin.buffer + mforms, ofiles = multipart.parse_form_data(environ=myenv) + for name, item in mforms.items(): + oforms[name] = item + return oforms, ofiles + + +forms, files = get_request_params() status = '200 Ok' try: - form = cgi.FieldStorage() - + # A nested FieldStorage instance holds the file - name = form['name'].value + name = forms['name'] value = '' try: - value = form['value'].value + value = forms['value'] except KeyError: value = os.environ.get("HTTP_"+name, "unset") diff --git a/test/modules/http2/htdocs/cgi/mnot164.py b/test/modules/http2/htdocs/cgi/mnot164.py index 0e5d107246..c29ccc185b 100644 --- a/test/modules/http2/htdocs/cgi/mnot164.py +++ b/test/modules/http2/htdocs/cgi/mnot164.py @@ -1,19 +1,26 @@ #!/usr/bin/env python3 +import os, sys +import multipart +from urllib import parse -import cgi -import cgitb; cgitb.enable() -import os -import sys -try: - form = cgi.FieldStorage() - count = form['count'].value - text = form['text'].value -except KeyError: - text="a" - count=77784 +def get_request_params(): + oforms = {} + if "REQUEST_URI" in os.environ: + qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query) + for name, values in qforms.items(): + oforms[name] = values[0] + myenv = os.environ.copy() + myenv['wsgi.input'] = sys.stdin.buffer + mforms, ofiles = multipart.parse_form_data(environ=myenv) + for name, item in mforms.items(): + oforms[name] = item + return oforms, ofiles -count = int(count) + +forms, files = get_request_params() +text = forms['text'] if 'text' in forms else "a" +count = int(forms['count']) if 'count' in forms else 77784 print("Status: 200 OK") print("Content-Type: text/html") diff --git a/test/modules/http2/htdocs/cgi/necho.py b/test/modules/http2/htdocs/cgi/necho.py index b9249b8969..78e2aad302 100644 --- a/test/modules/http2/htdocs/cgi/necho.py +++ b/test/modules/http2/htdocs/cgi/necho.py @@ -1,33 +1,49 @@ #!/usr/bin/env python3 -import cgi, os import time -import cgitb; cgitb.enable() +import os, sys +import multipart +from urllib import parse + +def get_request_params(): + oforms = {} + if "REQUEST_URI" in os.environ: + qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query) + for name, values in qforms.items(): + oforms[name] = values[0] + myenv = os.environ.copy() + myenv['wsgi.input'] = sys.stdin.buffer + mforms, ofiles = multipart.parse_form_data(environ=myenv) + for name, item in mforms.items(): + oforms[name] = item + return oforms, ofiles + + +forms, files = get_request_params() status = '200 Ok' try: - form = cgi.FieldStorage() - count = form['count'] - text = form['text'] + count = forms['count'] + text = forms['text'] - waitsec = float(form['wait1'].value) if 'wait1' in form else 0.0 + waitsec = float(forms['wait1']) if 'wait1' in forms else 0.0 if waitsec > 0: time.sleep(waitsec) - if int(count.value): + if int(count): print("Status: 200") print("""\ Content-Type: text/plain\n""") - waitsec = float(form['wait2'].value) if 'wait2' in form else 0.0 + waitsec = float(forms['wait2']) if 'wait2' in forms else 0.0 if waitsec > 0: time.sleep(waitsec) i = 0; - for i in range(0, int(count.value)): - print("%s" % (text.value)) + for i in range(0, int(count)): + print("%s" % (text)) - waitsec = float(form['wait3'].value) if 'wait3' in form else 0.0 + waitsec = float(forms['wait3']) if 'wait3' in forms else 0.0 if waitsec > 0: time.sleep(waitsec) @@ -37,7 +53,7 @@ Content-Type: text/plain\n""") Content-Type: text/html\n <html><body> <p>No count was specified: %s</p> - </body></html>""" % (count.value)) + </body></html>""" % (count)) except KeyError: print("Status: 200 Ok") diff --git a/test/modules/http2/htdocs/cgi/upload.py b/test/modules/http2/htdocs/cgi/upload.py index 2c8d63aa10..59fbb5866d 100644 --- a/test/modules/http2/htdocs/cgi/upload.py +++ b/test/modules/http2/htdocs/cgi/upload.py @@ -1,42 +1,58 @@ #!/usr/bin/env python3 -import cgi, os -import cgitb -cgitb.enable() +import os +import sys +import multipart +from urllib import parse -status = '200 Ok' -try: # Windows needs stdio set for binary mode. +try: # Windows needs stdio set for binary mode. import msvcrt - msvcrt.setmode (0, os.O_BINARY) # stdin = 0 - msvcrt.setmode (1, os.O_BINARY) # stdout = 1 + + msvcrt.setmode(0, os.O_BINARY) # stdin = 0 + msvcrt.setmode(1, os.O_BINARY) # stdout = 1 except ImportError: pass -form = cgi.FieldStorage() +def get_request_params(): + oforms = {} + if "REQUEST_URI" in os.environ: + qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query) + for name, values in qforms.items(): + oforms[name] = values[0] + myenv = os.environ.copy() + myenv['wsgi.input'] = sys.stdin.buffer + mforms, ofiles = multipart.parse_form_data(environ=myenv) + for name, item in mforms.items(): + oforms[name] = item + return oforms, ofiles + + +forms, files = get_request_params() + +status = '200 Ok' # Test if the file was uploaded -if 'file' in form: - fileitem = form['file'] +if 'file' in files: + fitem = files['file'] # strip leading path from file name to avoid directory traversal attacks - fn = os.path.basename(fileitem.filename) - f = open(('%s/files/%s' % (os.environ["DOCUMENT_ROOT"], fn)), 'wb'); - f.write(fileitem.file.read()) - f.close() - message = "The file %s was uploaded successfully" % (fn) + fname = fitem.filename + fpath = f'{os.environ["DOCUMENT_ROOT"]}/files/{fname}' + fitem.save_as(fpath) + message = "The file %s was uploaded successfully" % (fname) print("Status: 201 Created") print("Content-Type: text/html") - print("Location: %s://%s/files/%s" % (os.environ["REQUEST_SCHEME"], os.environ["HTTP_HOST"], fn)) + print("Location: %s://%s/files/%s" % (os.environ["REQUEST_SCHEME"], os.environ["HTTP_HOST"], fname)) print("") print("<html><body><p>%s</p></body></html>" % (message)) - -elif 'remove' in form: - remove = form['remove'].value + +elif 'remove' in forms: + remove = forms['remove'] try: - fn = os.path.basename(remove) - os.remove('./files/' + fn) - message = 'The file "' + fn + '" was removed successfully' + fname = os.path.basename(remove) + os.remove('./files/' + fname) + message = 'The file "' + fname + '" was removed successfully' except OSError as e: - message = 'Error removing ' + fn + ': ' + e.strerror + message = 'Error removing ' + fname + ': ' + e.strerror status = '404 File Not Found' print("Status: %s" % (status)) print(""" |