Report errors from prefork.py

This commit is contained in:
Thomas Nagy 2015-01-16 21:32:58 +01:00
parent 2d43b3416c
commit 59974469fc
No known key found for this signature in database
GPG Key ID: 67A565EDFDF90E64
1 changed files with 24 additions and 18 deletions

View File

@ -63,10 +63,26 @@ class req(SocketServer.StreamRequestHandler):
while 1:
try:
self.process_command()
except KeyboardInterrupt:
break
except Exception as e:
print(e)
break
def send_response(self, ret, out, err, exc):
if out or err or exc:
data = (out, err, exc)
data = cPickle.dumps(data, -1)
else:
data = ''
params = [RES, str(ret), str(len(data))]
# no need for the cookie in the response
self.wfile.write(make_header(params))
if data:
self.wfile.write(data)
def process_command(self):
query = self.rfile.read(HEADER_SIZE)
if not query:
@ -79,12 +95,14 @@ class req(SocketServer.StreamRequestHandler):
# magic cookie
key = query[-20:]
if not safe_compare(key, SHARED_KEY):
print('Invalid key given!')
print('%r %r' % (key, SHARED_KEY))
self.send_response(-1, '', '', 'Invalid key given!')
return
query = query[:-20]
#print "%r" % query
if not re_valid_query.match(query):
self.send_response(-1, '', '', 'Invalid query %r' % query)
raise ValueError('Invalid query %r' % query)
query = query.strip().split(',')
@ -116,24 +134,13 @@ class req(SocketServer.StreamRequestHandler):
ret = p.returncode
else:
ret = subprocess.Popen(cmd, **kw).wait()
except KeyboardInterrupt:
return
except Exception as e:
ret = -1
exc = str(e)
# write the results
if out or err or exc:
data = (out, err, exc)
data = cPickle.dumps(data, -1)
else:
data = ''
params = [RES, str(ret), str(len(data))]
# no need for the cookie in the response
self.wfile.write(make_header(params))
if data:
self.wfile.write(data)
self.send_response(ret, out, err, exc)
def create_server(conn, cls):
#SocketServer.ThreadingTCPServer.allow_reuse_address = True
@ -222,9 +229,8 @@ else:
def read_data(conn, siz):
ret = conn.recv(siz)
if not ret:
print("closed connection?")
#if not ret:
# print("closed connection?")
assert(len(ret) == siz)
return ret