SAAS-1132: Improve safety of XML parsing for listener stats

This commit is contained in:
Albert Santoni 2015-11-09 19:32:56 -05:00
parent c85944785b
commit bb05fa996a
2 changed files with 5 additions and 4 deletions

View file

@ -1,6 +1,6 @@
from threading import Thread from threading import Thread
import urllib2 import urllib2
import xml.dom.minidom import defusedxml.minidom
import base64 import base64
from datetime import datetime from datetime import datetime
import traceback import traceback
@ -64,7 +64,7 @@ class ListenerStat(Thread):
else: else:
url = 'http://%(host)s:%(port)s/admin/stats.xml' % ip url = 'http://%(host)s:%(port)s/admin/stats.xml' % ip
document = self.get_stream_server_xml(ip, url) document = self.get_stream_server_xml(ip, url)
dom = xml.dom.minidom.parseString(document) dom = defusedxml.minidom.parseString(document)
sources = dom.getElementsByTagName("source") sources = dom.getElementsByTagName("source")
mount_stats = None mount_stats = None
@ -87,7 +87,7 @@ class ListenerStat(Thread):
def get_shoutcast_stats(self, ip): def get_shoutcast_stats(self, ip):
url = 'http://%(host)s:%(port)s/admin.cgi?sid=1&mode=viewxml' % ip url = 'http://%(host)s:%(port)s/admin.cgi?sid=1&mode=viewxml' % ip
document = self.get_stream_server_xml(ip, url, is_shoutcast=True) document = self.get_stream_server_xml(ip, url, is_shoutcast=True)
dom = xml.dom.minidom.parseString(document) dom = defusedxml.parseString(document)
current_listeners = dom.getElementsByTagName("CURRENTLISTENERS") current_listeners = dom.getElementsByTagName("CURRENTLISTENERS")
timestamp = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") timestamp = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")

View file

@ -58,7 +58,8 @@ setup(name='airtime-playout',
'pyinotify', 'pyinotify',
'pytz', 'pytz',
'requests', 'requests',
'wsgiref' 'wsgiref',
'defusedxml'
], ],
zip_safe=False, zip_safe=False,
data_files=data_files) data_files=data_files)