diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2019-02-17 10:44:06 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2019-02-17 10:44:11 +0000 |
commit | 2b2a8da3a2fb2a56422baf1d6588fc46852c8b5c (patch) | |
tree | 7436efffef09650093067e701b1b9d1bb956f1f5 /cgi-bin | |
parent | 04f1d255d72466724468a876cfff46f73f560a9c (diff) | |
download | netsurf-test-2b2a8da3a2fb2a56422baf1d6588fc46852c8b5c.tar.gz netsurf-test-2b2a8da3a2fb2a56422baf1d6588fc46852c8b5c.tar.bz2 |
Initial env.cgi
Diffstat (limited to 'cgi-bin')
-rwxr-xr-x | cgi-bin/env.cgi | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/cgi-bin/env.cgi b/cgi-bin/env.cgi new file mode 100755 index 0000000..ffd6785 --- /dev/null +++ b/cgi-bin/env.cgi @@ -0,0 +1,65 @@ +#!/usr/bin/python3 + +import cgi +import cgitb +import os +import sys +import io + +cgitb.enable() + +print("Content-Type: text/plain") +print("") + +permitted_env = set([ + "DOCUMENT_ROOT", + "QUERY_STRING", + "GATEWAY_INTERFACE", +]) + +permitted_prefix = [ + "HTTP", + "REQUEST_", + "SERVER_", + "REMOTE_", + "SCRIPT_", + "PATH_", + "AUTH_", + "CONTENT_", +] + +for k in sorted(os.environ.keys()): + if k in permitted_env or any((k.startswith(p) for p in permitted_prefix)): + print("ENV:{}:{}".format(k, os.environ[k])) + +if "QUERY_STRING" in os.environ: + qs = cgi.parse_qs(os.getenv("QUERY_STRING")) + for k, vs in qs.items(): + for i, v in enumerate(vs): + if len(vs) > 1: + idx = "[{}]".format(i) + else: + idx = "" + print("QS:{}{}:{}".format(k, idx, v)) + +stdin_content = sys.stdin.buffer.read() + +print("STDIN:START") +sys.stdout.flush() +sys.stdout.buffer.write(stdin_content) +print("STDIN:END") + +valid_post_types = [ + "application/x-www-form-urlencoded", + "multipart/form-data", +] + +if os.environ.get("CONTENT_TYPE", "") in valid_post_types: + stdin_io = io.BytesIO(stdin_content) + fields = cgi.parse(stdin_io) + for k in sorted(fields.keys()): + print("POST:{}:{}".format(k, fields[k])) + +print("END") + + |