Package: ajaxterm
Version: 0.10-10
Severity: normal
Tags: patch
User: [email protected]
Usertags: origin-ubuntu natty ubuntu-patch
OpenStack is being packaged for Debian. OpenStack ships a patched
ajaxterm. Naturally, we don't want to ship that in the OpenStack Debian
packages, so this is the second of two patches that we need in the
ajaxterm package to support OpenStack.
Add a -T option to terminate ajaxterm itself (different from the
existing timeout code which reaps dead connections). This ensures we
don't leave stale ajaxterm servers around.
Thanks for considering the patch.
-- System Information:
Debian Release: squeeze/sid
APT prefers natty-updates
APT policy: (500, 'natty-updates'), (500, 'natty-security'), (500, 'natty')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.38-7-generic (SMP w/2 CPU cores)
Locale: LANG=da_DK.UTF-8, LC_CTYPE=da_DK.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -Nru ajaxterm-0.10/debian/patches/91_terminate_on_idle.diff ajaxterm-0.10/debian/patches/91_terminate_on_idle.diff
--- ajaxterm-0.10/debian/patches/91_terminate_on_idle.diff 1970-01-01 01:00:00.000000000 +0100
+++ ajaxterm-0.10/debian/patches/91_terminate_on_idle.diff 2011-03-23 15:15:35.000000000 +0100
@@ -0,0 +1,91 @@
+Index: ajaxterm-0.10/ajaxterm.py
+===================================================================
+--- ajaxterm-0.10.orig/ajaxterm.py 2011-03-23 15:13:53.861429744 +0100
++++ ajaxterm-0.10/ajaxterm.py 2011-03-23 15:15:27.491567073 +0100
+@@ -29,6 +29,8 @@
+ from socket import gethostname
+
+
++global g_server
++
+ def debug(str):
+ now = datetime.datetime.now()
+ print "%s - %s" % (now.isoformat(), str)
+@@ -395,7 +397,7 @@
+ class Multiplex:
+ INACTIVE_PROCESS_TIMEOUT=120 # I guess this is the IP max packet lifetime
+
+- def __init__(self,cmd=None,serverport=None):
++ def __init__(self,cmd=None,serverport=None,term_on_idle=0):
+ signal.signal(signal.SIGCHLD, signal.SIG_IGN)
+ self.cmd=cmd
+ self.serverport=serverport
+@@ -403,6 +405,8 @@
+ self.lock=threading.RLock()
+ self.thread=threading.Thread(target=self.loop)
+ self.alive=1
++ self.term_on_idle = term_on_idle
++ self.lastActivity=time.time()
+ # synchronize methods
+ for name in ['create','fds','proc_read','proc_write','dump','die','run']:
+ orig=getattr(self,name)
+@@ -493,6 +497,9 @@
+ while self.run():
+ fds=self.fds()
+ i,o,e=select.select(fds, [], [], 1.0)
++ if self.term_on_idle and time.time() - self.lastActivity > self.term_on_idle:
++ global g_server
++ g_server.shutdown()
+ for fd in i:
+ self.proc_read(fd)
+ if len(i):
+@@ -505,7 +512,7 @@
+ pass
+
+ class AjaxTerm:
+- def __init__(self,cmd=None,index_file='ajaxterm.html',serverport=None,token=None):
++ def __init__(self,cmd=None,index_file='ajaxterm.html',serverport=None,token=None,term_on_idle=0):
+ self.files={}
+ self.token=token
+ for i in ['css','html','js']:
+@@ -514,7 +521,7 @@
+ self.files['index']=file(index_file).read()
+ self.mime = mimetypes.types_map.copy()
+ self.mime['.html']= 'text/html; charset=UTF-8'
+- self.multi = Multiplex(cmd,serverport)
++ self.multi = Multiplex(cmd,serverport,term_on_idle)
+ self.reaper = Reaper(self.multi)
+ self.session = {}
+ self.session_ip = {}
+@@ -565,6 +572,7 @@
+ if k:
+ self.multi.proc_write(term,k)
+ time.sleep(0.002)
++ self.multi.lastActivity = time.time()
+ dump=self.multi.dump(term,c)
+ if isinstance(dump,str):
+ req.write(dump)
+@@ -611,6 +619,7 @@
+ parser.add_option("-u", "--uid", dest="uid", help="Set the daemon's user id")
+ parser.add_option("-s", "--serverport", dest="serverport", help="Use a different port than 22 to connect to the ssh server")
+ parser.add_option("-t", "--token", dest="token", help="Set authorization token")
++ parser.add_option("-T", "--terminate-on-idle", metavar="SEC", action="store", type="int", dest="term_on_idle", help="Terminate if idle for more than SEC seconds (0 means never)")
+ (o, a) = parser.parse_args()
+ if o.daemon:
+ pid=os.fork()
+@@ -636,11 +645,13 @@
+ sys.exit(0)
+ else:
+ print 'AjaxTerm at http://localhost:%s/' % o.port
+- at=AjaxTerm(o.cmd,o.index_file,o.serverport,o.token)
++ at=AjaxTerm(o.cmd,o.index_file,o.serverport,o.token,o.term_on_idle)
+ # f=lambda:os.system('firefox http://localhost:%s/&'%o.port)
+ # qweb.qweb_wsgi_autorun(at,ip='localhost',port=int(o.port),threaded=0,log=o.log,callback_ready=None)
+ try:
+- qweb.QWebWSGIServer(at,ip='localhost',port=int(o.port),threaded=1,log=o.log).serve_forever()
++ global g_server
++ g_server = qweb.QWebWSGIServer(at,ip='localhost',port=int(o.port),threaded=1,log=o.log)
++ g_server.serve_forever()
+ except KeyboardInterrupt,e:
+ sys.excepthook(*sys.exc_info())
+ at.multi.die()
diff -Nru ajaxterm-0.10/debian/patches/series ajaxterm-0.10/debian/patches/series
--- ajaxterm-0.10/debian/patches/series 2011-02-13 21:32:58.000000000 +0100
+++ ajaxterm-0.10/debian/patches/series 2011-03-23 14:02:30.000000000 +0100
@@ -13,3 +13,4 @@
35_fix-sarissa.diff
40_more-ctrl-catches.diff
90_token_based_access_control.diff
+91_terminate_on_idle.diff