OXIESEC PANEL
- Current Dir:
/
/
usr
/
lib
/
python2.7
Server IP: 10.0.0.4
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
11/20/2022 06:48:07 AM
rwxr-xr-x
📄
BaseHTTPServer.py
22.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
BaseHTTPServer.pyc
21.17 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
Bastion.py
5.61 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
Bastion.pyc
6.47 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
CGIHTTPServer.py
12.78 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
CGIHTTPServer.pyc
10.73 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
ConfigParser.py
27.1 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ConfigParser.pyc
24.51 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
Cookie.py
25.92 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
Cookie.pyc
22.05 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
DocXMLRPCServer.py
10.52 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
DocXMLRPCServer.pyc
9.92 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
HTMLParser.py
16.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
HTMLParser.pyc
13.34 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
LICENSE.txt
12.47 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
MimeWriter.py
6.33 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
MimeWriter.pyc
7.17 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
Queue.py
8.38 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
Queue.pyc
9.15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
SimpleHTTPServer.py
7.81 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
SimpleHTTPServer.pyc
7.8 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
SimpleXMLRPCServer.py
25.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
SimpleXMLRPCServer.pyc
22.26 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
SocketServer.py
23.39 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
SocketServer.pyc
23.41 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
StringIO.py
10.41 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
StringIO.pyc
11.17 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
UserDict.py
6.89 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
UserDict.pyc
9.4 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
UserList.py
3.56 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
UserList.pyc
6.36 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
UserString.py
9.46 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
UserString.pyc
14.38 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_LWPCookieJar.py
6.4 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_LWPCookieJar.pyc
5.29 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_MozillaCookieJar.py
5.66 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_MozillaCookieJar.pyc
4.35 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
__future__.py
4.28 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
__future__.pyc
4.11 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
__phello__.foo.py
64 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
__phello__.foo.pyc
123 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
_abcoll.py
18.18 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_abcoll.pyc
24.88 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_osx_support.py
18.65 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_osx_support.pyc
11.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_pyio.py
68 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_pyio.pyc
62.84 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_strptime.py
20.24 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_strptime.pyc
14.78 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_sysconfigdata.py
126 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
_sysconfigdata.pyc
279 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
_threading_local.py
7.09 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_threading_local.pyc
6.21 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
_weakrefset.py
5.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
_weakrefset.pyc
9.36 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
abc.py
6.98 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
abc.pyc
5.98 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
aifc.py
33.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
aifc.pyc
29.6 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
antigravity.py
60 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
antigravity.pyc
201 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
anydbm.py
2.6 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
anydbm.pyc
2.73 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
argparse.egg-info
217 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
argparse.py
87.14 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
argparse.pyc
62.56 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
ast.py
11.53 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ast.pyc
12.59 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
asynchat.py
11.31 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
asynchat.pyc
8.54 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
asyncore.py
20.45 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
asyncore.pyc
18.33 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
atexit.py
1.67 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
atexit.pyc
2.14 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
audiodev.py
7.42 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
audiodev.pyc
8.22 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
base64.py
11.53 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
base64.pyc
11 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
bdb.py
21.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
bdb.pyc
18.53 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
binhex.py
14.35 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
binhex.pyc
15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
bisect.py
2.53 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
bisect.pyc
2.99 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
bsddb
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📄
cProfile.py
6.42 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
cProfile.pyc
6.22 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
calendar.py
22.84 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
calendar.pyc
27.1 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
cgi.py
34.96 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
cgi.pyc
32.21 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
cgitb.py
11.89 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
cgitb.pyc
11.82 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
chunk.py
5.29 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
chunk.pyc
5.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
cmd.py
14.67 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
cmd.pyc
13.67 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
code.py
9.95 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
code.pyc
10.06 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
codecs.py
35.3 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
codecs.pyc
35.78 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
codeop.py
5.86 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
codeop.pyc
6.42 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
collections.py
27.15 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
collections.pyc
25.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
colorsys.py
3.6 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
colorsys.pyc
3.88 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
commands.py
2.49 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
commands.pyc
2.4 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
compileall.py
7.58 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
compileall.pyc
6.84 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
compiler
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📁
config-x86_64-linux-gnu
-
07/15/2022 06:13:38 AM
rwxr-xr-x
📄
contextlib.py
4.32 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
contextlib.pyc
4.33 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
cookielib.py
63.9 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
cookielib.pyc
53.21 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
copy.py
11.26 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
copy.pyc
11.83 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
copy_reg.py
6.81 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
copy_reg.pyc
5.02 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
csv.py
16.32 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
csv.pyc
13.13 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
ctypes
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📁
curses
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📄
dbhash.py
498 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
dbhash.pyc
714 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
decimal.py
216.73 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
decimal.pyc
167.62 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
difflib.py
80.4 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
difflib.pyc
60.34 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
dircache.py
1.1 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dircache.pyc
1.53 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
dis.py
6.35 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dis.pyc
6.07 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
dist-packages
-
07/15/2022 06:13:39 AM
rwxr-xr-x
📁
distutils
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
doctest.py
102.63 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
doctest.pyc
81.44 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
dumbdbm.py
8.93 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dumbdbm.pyc
6.55 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
dummy_thread.py
4.31 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dummy_thread.pyc
5.24 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
dummy_threading.py
2.74 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
dummy_threading.pyc
1.25 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
email
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📁
encodings
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📁
ensurepip
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
filecmp.py
9.36 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
filecmp.pyc
9.36 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
fileinput.py
13.42 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
fileinput.pyc
14.1 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
fnmatch.py
3.24 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
fnmatch.pyc
3.52 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
formatter.py
14.56 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
formatter.pyc
18.58 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
fpformat.py
4.62 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
fpformat.pyc
4.58 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
fractions.py
21.87 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
fractions.pyc
19.17 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
ftplib.py
37.65 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ftplib.pyc
33.99 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
functools.py
4.69 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
functools.pyc
6.42 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
genericpath.py
3.13 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
genericpath.pyc
3.41 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
getopt.py
7.15 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
getopt.pyc
6.48 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
getpass.py
5.43 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
getpass.pyc
4.62 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
gettext.py
22.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
gettext.pyc
17.58 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
glob.py
3.04 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
glob.pyc
2.86 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
gzip.py
18.58 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
gzip.pyc
14.82 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
hashlib.py
7.66 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
hashlib.pyc
6.73 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
heapq.py
17.87 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
heapq.pyc
14.19 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
hmac.py
4.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
hmac.pyc
4.42 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
hotshot
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
htmlentitydefs.py
17.63 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
htmlentitydefs.pyc
6.22 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
htmllib.py
12.57 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
htmllib.pyc
19.66 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
httplib.py
51.72 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
httplib.pyc
37.22 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
ihooks.py
18.54 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ihooks.pyc
20.74 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
imaplib.py
47.23 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
imaplib.pyc
43.77 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
imghdr.py
3.46 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
imghdr.pyc
4.69 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
importlib
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
imputil.py
25.16 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
imputil.pyc
15.18 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
inspect.py
42 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
inspect.pyc
39.15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
io.py
3.24 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
io.pyc
3.5 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
json
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
keyword.py
1.95 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
keyword.pyc
2.05 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
lib-dynload
-
07/15/2022 06:13:39 AM
rwxr-xr-x
📁
lib-tk
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📁
lib2to3
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
linecache.py
3.93 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
linecache.pyc
3.18 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
locale.py
100.43 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
locale.pyc
55.21 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
logging
-
07/15/2022 06:13:40 AM
rwxr-xr-x
📄
macpath.py
6.14 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
macpath.pyc
7.46 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
macurl2path.py
2.67 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
macurl2path.pyc
2.18 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mailbox.py
79.34 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mailbox.pyc
74.49 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mailcap.py
8.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mailcap.pyc
7.74 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
markupbase.py
14.3 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
markupbase.pyc
9.02 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
md5.py
358 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
md5.pyc
376 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
mhlib.py
32.65 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mhlib.pyc
32.83 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mimetools.py
7 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mimetools.pyc
7.97 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mimetypes.py
20.54 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mimetypes.pyc
18.02 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
mimify.py
14.67 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
mimify.pyc
11.69 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
modulefinder.py
23.89 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
modulefinder.pyc
18.61 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
multifile.py
4.71 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
multifile.pyc
5.26 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
multiprocessing
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
mutex.py
1.83 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
mutex.pyc
2.44 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
netrc.py
5.75 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
netrc.pyc
4.59 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
new.py
610 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
new.pyc
860 bytes
07/15/2022 06:13:41 AM
rw-r--r--
📄
nntplib.py
20.97 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
nntplib.pyc
20.46 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
ntpath.py
18.97 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ntpath.pyc
12.78 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
nturl2path.py
2.36 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
nturl2path.pyc
1.77 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
numbers.py
10.08 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
numbers.pyc
13.56 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
opcode.py
5.35 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
opcode.pyc
5.99 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
optparse.py
59.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
optparse.pyc
52.36 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
os.py
25.3 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
os.pyc
24.98 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
os2emxpath.py
4.53 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
os2emxpath.pyc
4.4 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pdb.doc
7.73 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pdb.py
45.02 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
pdb.pyc
42.42 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pickle.py
44.42 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pickle.pyc
37.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
pickletools.py
72.78 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pickletools.pyc
55.63 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pipes.py
9.36 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pipes.pyc
9.06 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pkgutil.py
19.77 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pkgutil.pyc
18.45 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
plat-x86_64-linux-gnu
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
platform.py
52.52 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
platform.pyc
37.65 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
plistlib.py
14.83 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
plistlib.pyc
18.67 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
popen2.py
8.22 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
popen2.pyc
8.78 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
poplib.py
12.52 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
poplib.pyc
12.97 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
posixfile.py
7.82 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
posixfile.pyc
7.45 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
posixpath.py
13.96 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
posixpath.pyc
11.15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
pprint.py
11.5 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pprint.pyc
9.92 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
profile.py
22.25 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
profile.pyc
15.99 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pstats.py
26.09 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pstats.pyc
24.31 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pty.py
4.94 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pty.pyc
4.83 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
py_compile.py
6.14 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
py_compile.pyc
6.46 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
pyclbr.py
13.07 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
pyclbr.pyc
9.4 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
pydoc.py
93.9 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
pydoc.pyc
90.23 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
pydoc_data
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
quopri.py
6.8 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
quopri.pyc
6.4 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
random.py
31.7 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
random.pyc
25.02 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
re.py
13.11 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
re.pyc
13.06 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
repr.py
4.2 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
repr.pyc
5.23 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
rexec.py
19.68 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
rexec.pyc
23.13 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
rfc822.py
32.76 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
rfc822.pyc
30.95 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
rlcompleter.py
5.85 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
rlcompleter.pyc
5.92 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
robotparser.py
7.51 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
robotparser.pyc
7.77 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
runpy.py
10.82 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
runpy.pyc
8.56 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sched.py
4.97 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sched.pyc
4.86 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sets.py
18.6 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sets.pyc
16.39 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sgmllib.py
17.46 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sgmllib.pyc
14.98 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sha.py
393 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
sha.pyc
419 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
shelve.py
7.99 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
shelve.pyc
9.96 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
shlex.py
10.9 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
shlex.pyc
7.36 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
shutil.py
19.41 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
shutil.pyc
18.75 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
site.py
19.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
site.pyc
19.08 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sitecustomize.py
155 bytes
07/20/2020 03:37:01 PM
rw-r--r--
📄
sitecustomize.pyc
232 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
smtpd.py
18.11 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
smtpd.pyc
15.45 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
smtplib.py
31.38 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
smtplib.pyc
29.49 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sndhdr.py
5.83 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sndhdr.pyc
7.16 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
socket.py
20.13 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
socket.pyc
15.71 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
sqlite3
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
sre.py
384 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
sre.pyc
517 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
sre_compile.py
19.36 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sre_compile.pyc
12.24 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sre_constants.py
7.03 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sre_constants.pyc
6.04 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sre_parse.py
29.98 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sre_parse.pyc
20.59 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
ssl.py
36.58 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
ssl.pyc
31.29 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
stat.py
1.8 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
stat.pyc
2.67 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
statvfs.py
898 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
statvfs.pyc
618 bytes
07/15/2022 06:13:41 AM
rw-r--r--
📄
string.py
21.04 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
string.pyc
19.88 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
stringold.py
12.16 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
stringold.pyc
12.2 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
stringprep.py
13.21 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
stringprep.pyc
14.11 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
struct.py
82 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
struct.pyc
237 bytes
07/15/2022 06:13:40 AM
rw-r--r--
📄
subprocess.py
49.34 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
subprocess.pyc
31.53 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
sunau.py
16.82 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sunau.pyc
17.87 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sunaudio.py
1.37 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sunaudio.pyc
1.93 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
symbol.py
2.01 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
symbol.pyc
2.95 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
symtable.py
7.26 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
symtable.pyc
11.41 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
sysconfig.py
24.9 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
sysconfig.pyc
18.37 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
tabnanny.py
11.07 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
tabnanny.pyc
8.01 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
tarfile.py
88.53 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
tarfile.pyc
74.07 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
telnetlib.py
26.4 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
telnetlib.pyc
22.55 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
tempfile.py
19.09 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
tempfile.pyc
19.76 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
test
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
textwrap.py
16.88 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
textwrap.pyc
11.79 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
this.py
1002 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
this.pyc
1.19 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
threading.py
46.01 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
threading.pyc
41.42 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
timeit.py
12.49 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
timeit.pyc
11.87 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
toaiff.py
3.07 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
toaiff.pyc
3.03 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
token.py
2.85 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
token.pyc
3.72 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
tokenize.py
17.07 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
tokenize.pyc
14.13 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
trace.py
29.19 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
trace.pyc
22.19 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
traceback.py
11.02 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
traceback.pyc
11.37 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
tty.py
879 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
tty.pyc
1.28 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
types.py
2.04 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
types.pyc
2.65 KB
07/15/2022 06:13:40 AM
rw-r--r--
📁
unittest
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
urllib.py
58.68 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
urllib.pyc
49.75 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
urllib2.py
51.57 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
urllib2.pyc
45.92 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
urlparse.py
16.6 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
urlparse.pyc
15.42 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
user.py
1.59 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
user.pyc
1.68 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
uu.py
6.4 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
uu.pyc
4.2 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
uuid.py
22.63 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
uuid.pyc
22.56 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
warnings.py
14.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
warnings.pyc
13.15 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
wave.py
18.15 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
wave.pyc
19.44 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
weakref.py
14.48 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
weakref.pyc
15.95 KB
07/15/2022 06:13:40 AM
rw-r--r--
📄
webbrowser.py
22.19 KB
07/01/2022 03:56:32 PM
rwxr-xr-x
📄
webbrowser.pyc
19.2 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
whichdb.py
3.3 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
whichdb.pyc
2.18 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
wsgiref
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
wsgiref.egg-info
187 bytes
07/01/2022 03:56:32 PM
rw-r--r--
📄
xdrlib.py
5.93 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
xdrlib.pyc
9.59 KB
07/15/2022 06:13:41 AM
rw-r--r--
📁
xml
-
07/15/2022 06:13:41 AM
rwxr-xr-x
📄
xmllib.py
34.05 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
xmllib.pyc
26.11 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
xmlrpclib.py
50.91 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
xmlrpclib.pyc
42.8 KB
07/15/2022 06:13:41 AM
rw-r--r--
📄
zipfile.py
58.08 KB
07/01/2022 03:56:32 PM
rw-r--r--
📄
zipfile.pyc
41.03 KB
07/15/2022 06:13:41 AM
rw-r--r--
Editing: CGIHTTPServer.py
Close
"""CGI-savvy HTTP Server. This module builds on SimpleHTTPServer by implementing GET and POST requests to cgi-bin scripts. If the os.fork() function is not present (e.g. on Windows), os.popen2() is used as a fallback, with slightly altered semantics; if that function is not present either (e.g. on Macintosh), only Python scripts are supported, and they are executed by the current process. In all cases, the implementation is intentionally naive -- all requests are executed sychronously. SECURITY WARNING: DON'T USE THIS CODE UNLESS YOU ARE INSIDE A FIREWALL -- it may execute arbitrary Python code or external programs. Note that status code 200 is sent prior to execution of a CGI script, so scripts cannot send other status codes such as 302 (redirect). """ __version__ = "0.4" __all__ = ["CGIHTTPRequestHandler"] import os import sys import urllib import BaseHTTPServer import SimpleHTTPServer import select import copy class CGIHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): """Complete HTTP server with GET, HEAD and POST commands. GET and HEAD also support running CGI scripts. The POST command is *only* implemented for CGI scripts. """ # Determine platform specifics have_fork = hasattr(os, 'fork') have_popen2 = hasattr(os, 'popen2') have_popen3 = hasattr(os, 'popen3') # Make rfile unbuffered -- we need to read one line and then pass # the rest to a subprocess, so we can't use buffered input. rbufsize = 0 def do_POST(self): """Serve a POST request. This is only implemented for CGI scripts. """ if self.is_cgi(): self.run_cgi() else: self.send_error(501, "Can only POST to CGI scripts") def send_head(self): """Version of send_head that support CGI scripts""" if self.is_cgi(): return self.run_cgi() else: return SimpleHTTPServer.SimpleHTTPRequestHandler.send_head(self) def is_cgi(self): """Test whether self.path corresponds to a CGI script. Returns True and updates the cgi_info attribute to the tuple (dir, rest) if self.path requires running a CGI script. Returns False otherwise. If any exception is raised, the caller should assume that self.path was rejected as invalid and act accordingly. The default implementation tests whether the normalized url path begins with one of the strings in self.cgi_directories (and the next character is a '/' or the end of the string). """ collapsed_path = _url_collapse_path(self.path) dir_sep = collapsed_path.find('/', 1) head, tail = collapsed_path[:dir_sep], collapsed_path[dir_sep+1:] if head in self.cgi_directories: self.cgi_info = head, tail return True return False cgi_directories = ['/cgi-bin', '/htbin'] def is_executable(self, path): """Test whether argument path is an executable file.""" return executable(path) def is_python(self, path): """Test whether argument path is a Python script.""" head, tail = os.path.splitext(path) return tail.lower() in (".py", ".pyw") def run_cgi(self): """Execute a CGI script.""" dir, rest = self.cgi_info path = dir + '/' + rest i = path.find('/', len(dir)+1) while i >= 0: nextdir = path[:i] nextrest = path[i+1:] scriptdir = self.translate_path(nextdir) if os.path.isdir(scriptdir): dir, rest = nextdir, nextrest i = path.find('/', len(dir)+1) else: break # find an explicit query string, if present. rest, _, query = rest.partition('?') # dissect the part after the directory name into a script name & # a possible additional path, to be stored in PATH_INFO. i = rest.find('/') if i >= 0: script, rest = rest[:i], rest[i:] else: script, rest = rest, '' scriptname = dir + '/' + script scriptfile = self.translate_path(scriptname) if not os.path.exists(scriptfile): self.send_error(404, "No such CGI script (%r)" % scriptname) return if not os.path.isfile(scriptfile): self.send_error(403, "CGI script is not a plain file (%r)" % scriptname) return ispy = self.is_python(scriptname) if not ispy: if not (self.have_fork or self.have_popen2 or self.have_popen3): self.send_error(403, "CGI script is not a Python script (%r)" % scriptname) return if not self.is_executable(scriptfile): self.send_error(403, "CGI script is not executable (%r)" % scriptname) return # Reference: http://hoohoo.ncsa.uiuc.edu/cgi/env.html # XXX Much of the following could be prepared ahead of time! env = copy.deepcopy(os.environ) env['SERVER_SOFTWARE'] = self.version_string() env['SERVER_NAME'] = self.server.server_name env['GATEWAY_INTERFACE'] = 'CGI/1.1' env['SERVER_PROTOCOL'] = self.protocol_version env['SERVER_PORT'] = str(self.server.server_port) env['REQUEST_METHOD'] = self.command uqrest = urllib.unquote(rest) env['PATH_INFO'] = uqrest env['PATH_TRANSLATED'] = self.translate_path(uqrest) env['SCRIPT_NAME'] = scriptname if query: env['QUERY_STRING'] = query host = self.address_string() if host != self.client_address[0]: env['REMOTE_HOST'] = host env['REMOTE_ADDR'] = self.client_address[0] authorization = self.headers.getheader("authorization") if authorization: authorization = authorization.split() if len(authorization) == 2: import base64, binascii env['AUTH_TYPE'] = authorization[0] if authorization[0].lower() == "basic": try: authorization = base64.decodestring(authorization[1]) except binascii.Error: pass else: authorization = authorization.split(':') if len(authorization) == 2: env['REMOTE_USER'] = authorization[0] # XXX REMOTE_IDENT if self.headers.typeheader is None: env['CONTENT_TYPE'] = self.headers.type else: env['CONTENT_TYPE'] = self.headers.typeheader length = self.headers.getheader('content-length') if length: env['CONTENT_LENGTH'] = length referer = self.headers.getheader('referer') if referer: env['HTTP_REFERER'] = referer accept = [] for line in self.headers.getallmatchingheaders('accept'): if line[:1] in "\t\n\r ": accept.append(line.strip()) else: accept = accept + line[7:].split(',') env['HTTP_ACCEPT'] = ','.join(accept) ua = self.headers.getheader('user-agent') if ua: env['HTTP_USER_AGENT'] = ua co = filter(None, self.headers.getheaders('cookie')) if co: env['HTTP_COOKIE'] = ', '.join(co) # XXX Other HTTP_* headers # Since we're setting the env in the parent, provide empty # values to override previously set values for k in ('QUERY_STRING', 'REMOTE_HOST', 'CONTENT_LENGTH', 'HTTP_USER_AGENT', 'HTTP_COOKIE', 'HTTP_REFERER'): env.setdefault(k, "") self.send_response(200, "Script output follows") decoded_query = query.replace('+', ' ') if self.have_fork: # Unix -- fork as we should args = [script] if '=' not in decoded_query: args.append(decoded_query) nobody = nobody_uid() self.wfile.flush() # Always flush before forking pid = os.fork() if pid != 0: # Parent pid, sts = os.waitpid(pid, 0) # throw away additional data [see bug #427345] while select.select([self.rfile], [], [], 0)[0]: if not self.rfile.read(1): break if sts: self.log_error("CGI script exit status %#x", sts) return # Child try: try: os.setuid(nobody) except os.error: pass os.dup2(self.rfile.fileno(), 0) os.dup2(self.wfile.fileno(), 1) os.execve(scriptfile, args, env) except: self.server.handle_error(self.request, self.client_address) os._exit(127) else: # Non Unix - use subprocess import subprocess cmdline = [scriptfile] if self.is_python(scriptfile): interp = sys.executable if interp.lower().endswith("w.exe"): # On Windows, use python.exe, not pythonw.exe interp = interp[:-5] + interp[-4:] cmdline = [interp, '-u'] + cmdline if '=' not in query: cmdline.append(query) self.log_message("command: %s", subprocess.list2cmdline(cmdline)) try: nbytes = int(length) except (TypeError, ValueError): nbytes = 0 p = subprocess.Popen(cmdline, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, env = env ) if self.command.lower() == "post" and nbytes > 0: data = self.rfile.read(nbytes) else: data = None # throw away additional data [see bug #427345] while select.select([self.rfile._sock], [], [], 0)[0]: if not self.rfile._sock.recv(1): break stdout, stderr = p.communicate(data) self.wfile.write(stdout) if stderr: self.log_error('%s', stderr) p.stderr.close() p.stdout.close() status = p.returncode if status: self.log_error("CGI script exit status %#x", status) else: self.log_message("CGI script exited OK") def _url_collapse_path(path): """ Given a URL path, remove extra '/'s and '.' path elements and collapse any '..' references and returns a colllapsed path. Implements something akin to RFC-2396 5.2 step 6 to parse relative paths. The utility of this function is limited to is_cgi method and helps preventing some security attacks. Returns: The reconstituted URL, which will always start with a '/'. Raises: IndexError if too many '..' occur within the path. """ # Query component should not be involved. path, _, query = path.partition('?') path = urllib.unquote(path) # Similar to os.path.split(os.path.normpath(path)) but specific to URL # path semantics rather than local operating system semantics. path_parts = path.split('/') head_parts = [] for part in path_parts[:-1]: if part == '..': head_parts.pop() # IndexError if more '..' than prior parts elif part and part != '.': head_parts.append( part ) if path_parts: tail_part = path_parts.pop() if tail_part: if tail_part == '..': head_parts.pop() tail_part = '' elif tail_part == '.': tail_part = '' else: tail_part = '' if query: tail_part = '?'.join((tail_part, query)) splitpath = ('/' + '/'.join(head_parts), tail_part) collapsed_path = "/".join(splitpath) return collapsed_path nobody = None def nobody_uid(): """Internal routine to get nobody's uid""" global nobody if nobody: return nobody try: import pwd except ImportError: return -1 try: nobody = pwd.getpwnam('nobody')[2] except KeyError: nobody = 1 + max(map(lambda x: x[2], pwd.getpwall())) return nobody def executable(path): """Test for executable file.""" try: st = os.stat(path) except os.error: return False return st.st_mode & 0111 != 0 def test(HandlerClass = CGIHTTPRequestHandler, ServerClass = BaseHTTPServer.HTTPServer): SimpleHTTPServer.test(HandlerClass, ServerClass) if __name__ == '__main__': test()