The traceback I get from both my fwb data files are similar. The last one I ran with the version you sent me is below:
Traceback (most recent call last): File "./fw_report.py", line 533, in ? f.decode_service_groups(o) File "./fw_report.py", line 251, in decode_service_groups self.decode_svc_grp(g) File "./fw_report.py", line 239, in decode_svc_grp self.decode_svc_group_members(l) File "./fw_report.py", line 225, in decode_svc_group_members print """ KeyError: u'id3AECF776' Luke Kenneth Casson Leighton wrote: > jeremy, > > i am running - have been running - with 2.0.7. > > make sure you have an appropriate version of python, 2.2 and 2.3 should > do it. > > also make sure you have, or recommend to people to have, > the python xml libraries installed: > > [EMAIL PROTECTED]:~$ dpkg -l > f > vi f > /[EMAIL PROTECTED]:~$ vi f > [EMAIL PROTECTED]:~$ grep python f | grep xml > ii python2.2-xml 0.8.3-4 > XML tools for Python (2.2.x) > ii python2.2-xmlbase 2.2.3-8 > XML support included in Python (v2.2) > ii python2.3-xml 0.8.3-4 > XML tools for Python (2.3.x) > > > you do not explain what traceback is "failing to complete" - a copy of > that traceback would have been helpful, i can only guess what the > problem is, therefore. > > my guess is that you do not have python-xml installed. > > latest version attached: there was something i had to update, can't > remember what it was... > > l. > > On Wed, Sep 28, 2005 at 12:46:50PM -0700, Jeremy T. Bouse wrote: > >> I am currently working on the 2.0.9 packaging of fwbuilder. If you >>want to make sure that the script supports atleast 2.0.7 which is >>currently in testing I would be willing to consider including in the >>examples directory and adding a note in the README.Debian regarding it >>with the 2.0.9 upload if you can get back in time. I did find that when >>I ran it against a couple of my .fwb files it failed to complete >>properly and threw a traceback. >> >> Also include as an attachment rather than inline next time so I can >>just download rather than cut and paste. >> >> Regards, >> Jeremy >> >>Luke Kenneth Casson Leighton wrote: >> >> >>>Package: fwbuilder >>>Version: 2.0.3-2 >>>Severity: normal >>> >>> >>>attached is a joyously useful program that makes up for the lack of >>>print reporting in fwbuilder. >>> >>>it's a dog, it's hacked, it works. i wouldn't recommend making python a >>>dependency because of it, but i _would_ recommend dumping it in the >>>/usr/share/doc/fwbuilder/examples directory and referencing it in the >>>README. >>> >>>or makin a separate apt-get install package for it (with a dep on >>>python) >>> >>>l. >>> >>>#!/usr/bin/env python >>> >> >>>from xml.dom.minidom import parseString, parse >> >>> >>>class fw: >>> >>> def __init__(self): >>> >>> self.hosts = {} >>> self.descriptions = {} >>> >>> def print_comment(self, c): >>> print '<pre>' >>> for l in c.split("\\n"): >>> while l: >>> bp = l.find(' ', 50) >>> if bp < 50: bp = 50 >>> if len(l) >= 50: >>> end = l.rfind(' ') >>> if end <= 50: >>> bp = end >>> print "%s" % l[:bp] >>> l = l[bp:] >>> print '</pre>' >>> >>> >>> def decode_address_ranges(self, i): >>> adrs = [] >>> print '<table class="tabledataindent">' >>> for a in i: >>> print '<tr class="tablerow" valign="top">' >>> self.descriptions[a.getAttribute('id')] = >>> a.getAttribute('name') >>> print """ >>> <td> %s: </td> >>> <td> %s </td> >>> <td> %s </td> >>> """ % \ >>> (a.getAttribute('name'), >>> a.getAttribute('start_address'), >>> a.getAttribute('end_address')) >>> >>> comment = a.getAttribute('comment') >>> if comment: >>> print '</tr>' >>> print '<tr class="tablerow" valign="top">' >>> print '<td> </td>' >>> print '<td colspan="2">' >>> self.print_comment(comment) >>> print '</td>' >>> print '</tr>' >>> print '</table>' >>> >>> def decode_ipv4(self, i): >>> adrs = [] >>> print '<table class="tabledataindent">' >>> for a in i: >>> self.descriptions[a.getAttribute('id')] = >>> a.getAttribute('name') >>> print '<tr class="tablerow" valign="top">' >>> print "<td>%s: </td> <td>%s/%s</td>" % \ >>> (a.getAttribute('name'), >>> a.getAttribute('address'), >>> a.getAttribute('netmask')) >>> print "</tr>" >>> comment = a.getAttribute('comment') >>> if comment: >>> print '</tr>' >>> print '<tr class="tablerow" valign="top">' >>> print '<td> </td>' >>> print '<td colspan="2">' >>> self.print_comment(comment) >>> print '</td>' >>> print '</tr>' >>> print '</table>' >>> >>> def decode_interface(self, i): >>> self.descriptions[i.getAttribute('id')] = >>> i.getAttribute('name') >>> >>> print '<tr class="tablerow" valign="top">' >>> print "<td>Interface: %-8s </td> <td> %s </td>" % \ >>> (i.getAttribute('name'), i.getAttribute('label')) >>> print "<td>" >>> self.decode_ipv4(i.getElementsByTagName('IPv4')) >>> print "</td>" >>> print "</tr>" >>> >>> def get_desc(self, id): >>> if type(id) is not list: >>> id = [id] >>> l = [] >>> for i in id: >>> l.append(self.descriptions.get(i, "<unknown: %s>" % >>> str(i))) >>> return '<br />'.join(l) >>> >>> def decode_host(self, h): >>> self.descriptions[h.getAttribute('id')] = >>> h.getAttribute('name') >>> >>> print "<td>" >>> >>> print '<table class="tabledata">' >>> print '<tr class="tablerow" valign="top"><td>' >>> print "Hostname: <br /> %s" % h.getAttribute('name') >>> print "</td></tr>" >>> print '</table>' >>> >>> print "</td>" >>> >>> print "<td>" >>> >>> print '<table class="tabledata">' >>> for i in h.getElementsByTagName('Interface'): >>> self.decode_interface(i) >>> print '</table>' >>> >>> print "</td>" >>> >>> def decode_hosts(self, o): >>> >>> print '<table class="tabledataindent">' >>> hl = o.getElementsByTagName('Host') >>> for h in hl: >>> print '<tr class="tablerow" valign="top">' >>> self.decode_host(h) >>> print '</tr>' >>> print '</table>' >>> >>> def decode_svc_icmp(self, t): >>> >>> self.descriptions[t.getAttribute('id')] = >>> t.getAttribute('name') >>> print """ >>> <tr class="section"> >>> >>> <td class="name"> Name: %-10s </td> >>> <td class="item"> Code: %s </td> >>> <td class="item"> Type: %s </td> >>> </tr> >>> """ % \ >>> (t.getAttribute('name'), >>> t.getAttribute('code'), >>> t.getAttribute('type')) >>> >>> def decode_svc_tcp(self, t): >>> >>> self.descriptions[t.getAttribute('id')] = >>> t.getAttribute('name') >>> >>> start = int(t.getAttribute('dst_range_start')) >>> end = int(t.getAttribute('dst_range_end')) >>> >>> if start == end: >>> dest = '%d' % start >>> else: >>> dest = '%d-%d' % (start, end) >>> >>> print """ >>> <tr class="section"> >>> >>> <td class="name"> Name: %-10s </td> >>> <td class="item"> Dest: %s </td> >>> </tr> >>> """ % \ >>> (t.getAttribute('name'), dest) >>> >>> def print_heading(self, sh): >>> >>> print '<table class="heading">' >>> print '<tr><td>' >>> print sh >>> print '</td></tr>' >>> print '</table>' >>> >>> def print_subheading(self, sh, comment=''): >>> >>> print '<table>' >>> print '<tr><td>' >>> >>> print '<table class="subheading">' >>> print '<tr><td>' >>> print sh >>> print '</td></tr>' >>> print '</table>' >>> >>> print '</td></tr>' >>> >>> print '<tr>' >>> print '<td>' >>> print '<div class="subindented">' >>> self.print_comment(comment) >>> print '</div>' >>> print '</td>' >>> print '</tr>' >>> >>> print '</table>' >>> >>> >>> def decode_svc_group_members(self, i): >>> >>> print '<table class="tabledataindent">' >>> for a in i: >>> print '<tr class="tablerow" valign="top">' >>> print """ >>> <td> %s </td> >>> """ % self.descriptions[a] >>> print '</tr>' >>> print '</table>' >>> >>> def decode_svc_grp(self, h): >>> self.descriptions[h.getAttribute('id')] = >>> h.getAttribute('name') >>> self.print_subheading("Service Group: %s" % >>> h.getAttribute('name'), >>> h.getAttribute('comment')) >>> print '<div class="indented">' >>> l = [] >>> for n in h.getElementsByTagName('ServiceRef'): >>> l.append(n.getAttribute('ref')) >>> self.decode_svc_group_members(l) >>> print '</div>' >>> >>> def decode_service_groups(self, o): >>> >>> ts = o.getElementsByTagName('ServiceGroup') >>> self.print_subheading("Service Groups") >>> print '<div class="subindented">' >>> for t in ts: >>> n = t.getAttribute('name') >>> if n == 'Groups': >>> for g in >>> t.getElementsByTagName('ServiceGroup'): >>> self.decode_svc_grp(g) >>> print '</div>' >>> >>> def decode_services(self, o): >>> >>> ts = o.getElementsByTagName('UDPService') >>> self.print_subheading("UDP Services") >>> print '<table class="tabledataindent">' >>> for t in ts: >>> self.decode_svc_tcp(t) >>> print '</table>' >>> >>> ts = o.getElementsByTagName('TCPService') >>> self.print_subheading("TCP Services") >>> print '<table class="tabledataindent">' >>> for t in ts: >>> self.decode_svc_tcp(t) >>> print '</table>' >>> >>> ts = o.getElementsByTagName('ICMPService') >>> self.print_subheading("ICMP Services") >>> print '<table class="tabledataindent">' >>> for t in ts: >>> self.decode_svc_icmp(t) >>> print '</table>' >>> >>> def get_srvref(self, c, ref): >>> r = c.getElementsByTagName(ref) >>> ans = [] >>> for n in r[0].getElementsByTagName('ServiceRef'): >>> ans.append(n.getAttribute('ref')) >>> return ans >>> >>> def get_ref(self, c, ref): >>> r = c.getElementsByTagName(ref) >>> ans = [] >>> for n in r[0].getElementsByTagName('ObjectRef'): >>> ans.append(n.getAttribute('ref')) >>> return ans >>> >>> def decode_policyrule(self, nr): >>> >>> print '<tr class="tablerow" valign="top">' >>> >>> print '<td> %s </td>' % nr.getAttribute('action') >>> >>> comment = nr.getAttribute('comment') >>> print '<td>' >>> self.print_comment(comment) >>> print '</td>' >>> >>> src = self.get_ref(nr, 'Src') >>> dst = self.get_ref(nr, 'Dst') >>> srv = self.get_srvref(nr, 'Srv') >>> >>> print """<td> >>> >>> <table class="tabledata"> >>> <tr class="tablerow" valign="top"> <td> Src: >>> </td> <td> %s </td> </tr> >>> <tr class="tablerow" valign="top"> <td> >>> Dest: </td> <td> %s </td> </tr> >>> <tr class="tablerow" valign="top"> <td> >>> Service: </td> <td> %s </td> </tr> >>> </table> >>> </td> >>> """ % \ >>> (self.get_desc(src), >>> self.get_desc(dst), >>> self.get_desc(srv)) >>> >>> print '</tr>' >>> >>> def decode_natrule(self, nr): >>> >>> print '<tr class="tablerow" valign="top">' >>> >>> comment = nr.getAttribute('comment') >>> print '<td>' >>> self.print_comment(comment) >>> print '</td>' >>> >>> osrc = self.get_ref(nr, 'OSrc') >>> odst = self.get_ref(nr, 'ODst') >>> osrv = self.get_srvref(nr, 'OSrv') >>> tsrc = self.get_ref(nr, 'TSrc') >>> tdst = self.get_ref(nr, 'TDst') >>> tsrv = self.get_srvref(nr, 'TSrv') >>> >>> print """ >>> <td> >>> <table class="tabledata"> >>> <tr class="tablerow" valign="top"> <td> Original >>> Src: </td> <td> %s </td> </tr> >>> <tr class="tablerow" valign="top"> <td> Original >>> Dest: </td> <td> %s </td> </tr> >>> <tr class="tablerow" valign="top"> <td> Original >>> Service: </td> <td> %s </td> </tr> >>> </table> >>> </td> >>> """ % \ >>> (self.get_desc(osrc), >>> self.get_desc(odst), >>> self.get_desc(osrv)) >>> >>> print """ >>> <td> >>> >>> <table class="tabledata"> >>> <tr class="tablerow" valign="top"> <td> Target Src: >>> </td> <td> %s </td> </tr> >>> <tr class="tablerow" valign="top"> <td> Target Dest: >>> </td> <td> %s </td> </tr> >>> <tr class="tablerow" valign="top"> <td> Target >>> Service: </td> <td> %s </td> </tr> >>> </table> >>> </td> >>> """ % \ >>> (self.get_desc(tsrc), >>> self.get_desc(tdst), >>> self.get_desc(tsrv)) >>> >>> print '</tr>' >>> >>> def decode_fw_interface(self, n): >>> self.print_subheading("Interface: %s" % >>> n.getAttribute('name'), >>> n.getAttribute('comment')) >>> >>> print '<table class="tabledataindent">' >>> for pr in n.getElementsByTagName('PolicyRule'): >>> self.decode_policyrule(pr) >>> print '</table>' >>> >>> def decode_policy(self, n): >>> self.print_subheading("Policy:") >>> print '<table class="tabledataindent">' >>> for nr in n.getElementsByTagName('PolicyRule'): >>> self.decode_policyrule(nr) >>> print '</table>' >>> >>> def decode_nat(self, n): >>> self.print_subheading("NAT:") >>> print '<table class="tabledataindent">' >>> for nr in n.getElementsByTagName('NATRule'): >>> self.decode_natrule(nr) >>> print '</table>' >>> >>> def decode_group_members(self, i): >>> >>> print '<table class="tabledataindent">' >>> for a in i: >>> print '<tr class="tablerow" valign="top">' >>> print """ >>> <td> %s </td> >>> """ % self.descriptions[a] >>> print '</tr>' >>> print '</table>' >>> >>> def decode_group(self, h): >>> self.descriptions[h.getAttribute('id')] = >>> h.getAttribute('name') >>> self.print_subheading("Group: %s" % h.getAttribute('name'), >>> h.getAttribute('comment')) >>> print '<div class="indented">' >>> l = [] >>> for n in h.getElementsByTagName('ObjectRef'): >>> l.append(n.getAttribute('ref')) >>> self.decode_group_members(l) >>> print '</div>' >>> >>> def decode_groups(self, h): >>> print '<div class="indented">' >>> for n in h.getElementsByTagName('ObjectGroup'): >>> self.decode_group(n) >>> print '</div>' >>> >>> def decode_firewall(self, h): >>> self.print_subheading("Firewall: %s" % >>> h.getAttribute('name')) >>> print '<div class="indented">' >>> for n in h.getElementsByTagName('Interface'): >>> self.decode_interface(n) >>> for n in h.getElementsByTagName('Policy'): >>> self.decode_policy(n) >>> for n in h.getElementsByTagName('NAT'): >>> self.decode_nat(n) >>> for n in h.getElementsByTagName('Interface'): >>> self.decode_fw_interface(n) >>> print '</div>' >>> >>> def decode_firewalls(self, o): >>> >>> hl = o.getElementsByTagName('Firewall') >>> for fw in hl: >>> self.decode_firewall(fw) >>> >>>if __name__ == '__main__': >>> >>> from sys import argv >>> >>> fd = open(argv[1], "r") >>> doc = parse(fd) >>> >>> f = fw() >>> >>> print "<html>" >>> print """ >>><style type="text/css"> >>>.tabledataindent >>>{ >>> color: #000000; >>> background: #aaffaa; >>> border-color: #000000 #999999 #999999 #000000; >>> border-style: solid; >>> border-top-width: 1px; >>> border-right-width: 1px; >>> border-bottom-width: 1px; >>> border-left-width: 1px; >>> margin-left: 40px; >>>} >>>.tablerow >>>{ >>> color: #000000; >>> background: #ccffcc; >>> border-color: #000000 #999999 #999999 #000000; >>> border-style: solid; >>> border-top-width: 1px; >>> border-right-width: 1px; >>> border-bottom-width: 1px; >>> border-left-width: 1px; >>>} >>>.tabledata >>>{ >>> color: #000000; >>> background: #ccffcc; >>>} >>>.heading >>>{ >>> font-size: 20; >>> font-family: Verdana, Arial, Helvetica, sans-serif; >>> color: #000000; >>> background: #aaaaff; >>> margin-top: 40px; >>> margin-bottom: 10px; >>> border-style: solid; >>> border-top-width: 1px; >>> border-right-width: 1px; >>> border-bottom-width: 1px; >>> border-left-width: 1px; >>>} >>>.subheading >>>{ >>> font-size: 15; >>> font-family: Verdana, Arial, Helvetica, sans-serif; >>> color: #000000; >>> background: #ccccff; >>> margin-top: 15px; >>> margin-left: 20px; >>> margin-right: 20px; >>> border-style: solid; >>> border-top-width: 1px; >>> border-right-width: 1px; >>> border-bottom-width: 1px; >>> border-left-width: 1px; >>>} >>>.indented >>>{ >>> margin-left: 40px; >>>} >>>.subindented >>>{ >>> margin-left: 20px; >>> margin-bottom: 10px; >>>} >>></style> >>> """ >>> print "<body>" >>> >>> lib = doc.getElementsByTagName('Library') >>> f.descriptions['sysid0'] = 'Any Network' >>> f.descriptions['sysid1'] = 'Any IP Service' >>> >>> svcs = doc.getElementsByTagName('ServiceGroup') >>> >>> for o in svcs: >>> n = o.getAttribute('name') >>> if n == 'Services': >>> f.print_heading(n) >>> f.decode_services(o) >>> >>> for o in svcs: >>> n = o.getAttribute('name') >>> if n == 'Services': >>> f.decode_service_groups(o) >>> >>> objs = doc.getElementsByTagName('ObjectGroup') >>> >>> for o in objs: >>> n = o.getAttribute('name') >>> >>> if n == 'Hosts': >>> f.print_heading(n) >>> f.decode_hosts(o) >>> >>> if n == 'Address Ranges': >>> f.print_heading(n) >>> >>> f.decode_address_ranges(o.getElementsByTagName('AddressRange')) >>> >>> if n == 'Addresses': >>> f.print_heading(n) >>> f.decode_ipv4(o.getElementsByTagName('IPv4')) >>> print >>> >>> for o in objs: >>> n = o.getAttribute('name') >>> if n == 'Groups': >>> f.print_heading(n) >>> f.decode_groups(o) >>> print >>> >>> for o in objs: >>> n = o.getAttribute('name') >>> if n == 'Firewalls': >>> f.print_heading(n) >>> f.decode_firewalls(o) >>> print >>> >>> print "</body>" >>> print "</html>" >>>-- System Information: >>>Debian Release: testing/unstable >>>Architecture: i386 >>>Kernel: Linux highfield 2.6.11-1-686 #1 Fri May 20 07:34:54 UTC 2005 i686 >>>Locale: LANG=C, LC_CTYPE=C >>> >>>Versions of packages fwbuilder depends on: >>>ii fwbuilder-common 2.0.3-2 Firewall administration tool >>>GUI ( >>>ii fwbuilder-linux [fwbuild 2.0.3-2 Firewall Builder policy >>>compiler(s >>>ii libc6 2.3.2.ds1-21 GNU C Library: Shared >>>libraries an >>>ii libfwbuilder6 2.0.3-1 Firewall Builder API library >>>ii libgcc1 1:3.5-0pre1 GCC support library >>>ii libqt3c102-mt 3:3.3.4-3 Qt GUI Library (Threaded >>>runtime v >>>ii libsnmp5 5.1.2-6 NET SNMP (Simple Network >>>Managemen >>>ii libssl0.9.7 0.9.7c-5 SSL shared libraries >>>ii libstdc++5 1:3.3.4-11 The GNU Standard C++ Library >>>v3 >>>ii libwrap0 7.6-ipv6.1-3 Wietse Venema's TCP wrappers >>>libra >>>ii libx11-6 4.3.0.dfsg.1-6 X Window System protocol >>>client li >>>ii libxext6 4.3.0.dfsg.1-6 X Window System miscellaneous >>>exte >>>ii libxml2 2.6.16-7 GNOME XML library >>>ii libxslt1.1 1.1.12-8 XSLT processing library - >>>runtime ii xlibs 4.3.0.dfsg.1-11 X Keyboard Extension >>>(XKB) configu >>>ii zlib1g 1:1.2.1-3 compression library - runtime >>> >>>-- no debconf information >>> >>> >>> >>> > > -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]