#! /usr/bin/env 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()
