Package: ajaxterm
Version: 0.10-10
Severity: normal
Tags: patch
User: ubuntu-de...@lists.ubuntu.com
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

Reply via email to