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]