]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
added rpython
authorGuido van Rossum <guido@python.org>
Mon, 10 Apr 1995 11:46:03 +0000 (11:46 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 10 Apr 1995 11:46:03 +0000 (11:46 +0000)
Demo/sockets/rpython.py [new file with mode: 0755]
Demo/sockets/rpythond.py [new file with mode: 0755]

diff --git a/Demo/sockets/rpython.py b/Demo/sockets/rpython.py
new file mode 100755 (executable)
index 0000000..9548301
--- /dev/null
@@ -0,0 +1,35 @@
+#! /usr/local/bin/python
+
+# Remote python client.
+# Execute Python commands remotely and send output back.
+
+import sys
+import string
+from socket import *
+
+PORT = 4127
+BUFSIZE = 1024
+
+def main():
+       if len(sys.argv) < 3:
+               print "usage: rpython host command"
+               sys.exit(2)
+       host = sys.argv[1]
+       port = PORT
+       i = string.find(host, ':')
+       if i >= 0:
+               port = string.atoi(port[i+1:])
+               host = host[:i]
+       command = string.join(sys.argv[2:])
+       s = socket(AF_INET, SOCK_STREAM)
+       s.connect((host, port))
+       s.send(command)
+       s.shutdown(1)
+       reply = ''
+       while 1:
+               data = s.recv(BUFSIZE)
+               if not data: break
+               reply = reply + data
+       print reply,
+
+main()
diff --git a/Demo/sockets/rpythond.py b/Demo/sockets/rpythond.py
new file mode 100755 (executable)
index 0000000..f67570b
--- /dev/null
@@ -0,0 +1,52 @@
+#! /usr/local/bin/python
+
+# Remote python server.
+# Execute Python commands remotely and send output back.
+# WARNING: This version has a gaping security hole -- it accepts requests
+# from any host on the Internet!
+
+import sys
+from socket import *
+import StringIO
+import traceback
+
+PORT = 4127
+BUFSIZE = 1024
+
+def main():
+       if len(sys.argv) > 1:
+               port = int(eval(sys.argv[1]))
+       else:
+               port = PORT
+       s = socket(AF_INET, SOCK_STREAM)
+       s.bind('', port)
+       s.listen(1)
+       while 1:
+               conn, (remotehost, remoteport) = s.accept()
+               print 'connected by', remotehost, remoteport
+               request = ''
+               while 1:
+                       data = conn.recv(BUFSIZE)
+                       if not data:
+                               break
+                       request = request + data
+               reply = execute(request)
+               conn.send(reply)
+               conn.close()
+
+def execute(request):
+       stdout = sys.stdout
+       stderr = sys.stderr
+       sys.stdout = sys.stderr = fakefile = StringIO.StringIO()
+       try:
+               try:
+                       exec request in {}, {}
+               except:
+                       print
+                       traceback.print_exc(100)
+       finally:
+               sys.stderr = stderr
+               sys.stdout = stdout
+       return fakefile.getvalue()
+
+main()