1
0
mirror of https://github.com/fwbuilder/fwbuilder synced 2026-03-25 04:37:22 +01:00

2009-05-27 vadim <vadim@vk.crocodile.org>

* RCSFilePreview.cpp (RCSViewItem::operator<): implemented feature
req. #2796238 "3.0.4 - FEAT REQ: Sort order for RCSFilePreview".
RCS file preview dialog (the one that shows RCS revisions and RCS
log records) can display revisions in the tree or list view style,
controlled by radio-buttons. Style setting is saved in user
preferences and persists from session to session. In both cases
the view can be sorted by revision number or data. Sort column
choice is also saved in preferences. By default program sorts by
date and selects the latest revision.

* ObjectManipulator.cpp (ObjectManipulator::actuallyPasteTo):
fixed bug (no #): the GUI did not allow to copy/paste an address
from one interface to another. This should be possible.
This commit is contained in:
Vadim Kurland 2009-05-27 20:40:51 +00:00
parent 0a191e2fdd
commit 68103fe615
9 changed files with 369 additions and 109 deletions

View File

@ -1 +1 @@
#define BUILD_NUM 968
#define BUILD_NUM 970

View File

@ -1,5 +1,19 @@
2009-05-27 vadim <vadim@vk.crocodile.org>
* RCSFilePreview.cpp (RCSViewItem::operator<): implemented feature
req. #2796238 "3.0.4 - FEAT REQ: Sort order for RCSFilePreview".
RCS file preview dialog (the one that shows RCS revisions and RCS
log records) can display revisions in the tree or list view style,
controlled by radio-buttons. Style setting is saved in user
preferences and persists from session to session. In both cases
the view can be sorted by revision number or data. Sort column
choice is also saved in preferences. By default program sorts by
date and selects the latest revision.
* ObjectManipulator.cpp (ObjectManipulator::actuallyPasteTo):
fixed bug (no #): the GUI did not allow to copy/paste an address
from one interface to another. This should be possible.
* PolicyCompiler_pf_writers.cpp (PrintRule::_printAddr): fixed
bug (no #): policy compiler for pf crashed when dynamic interface
was used in source or destination of a policy rule.

View File

@ -79,6 +79,9 @@ const char* objTooltips = SETTINGS_PATH_PREFIX "/UI/objTooltips";
const char* tooltipDelay = SETTINGS_PATH_PREFIX "/UI/tooltipDelay";
const char* emptyRCSLog = SETTINGS_PATH_PREFIX "/RCS/emptyLog";
const char* rcsFilePreviewStyle = SETTINGS_PATH_PREFIX "/RCS/FilePreviewStyle";
const char* rcsFilePreviewSortColumn = SETTINGS_PATH_PREFIX "/RCS/FilePreviewSortColumn";
const char* dontSaveStdLib = SETTINGS_PATH_PREFIX "/DataFormat/dontSaveStdLib";
const char* WindowGeometrySetpath= SETTINGS_PATH_PREFIX "/Layout/";
const char* screenPositionSetpath= SETTINGS_PATH_PREFIX "/ScreenPos/";
@ -119,7 +122,11 @@ void FWBSettings::init()
ok = contains(appGUID);
if (!ok) setValue(appGUID, QUuid::createUuid().toString() );
// By default sort RCS File preview by date, which is column 1
ok = contains(rcsFilePreviewSortColumn);
if (!ok) setRCSFilePreviewSortColumn(1);
ok = contains(infoStyleSetpath);
if (!ok) setValue(infoStyleSetpath,2);
@ -313,7 +320,6 @@ void FWBSettings::setSaveFileDir( const QString &d )
setValue(sfdirSetpath,d);
}
void FWBSettings::save()
{
if (mw->db()!=NULL)
@ -323,6 +329,26 @@ void FWBSettings::save()
bool FWBSettings::getRCSLogState() { return value( emptyRCSLog ).toBool(); }
void FWBSettings::setRCSLogState(bool f) { setValue( emptyRCSLog , f ); }
int FWBSettings::getRCSFilePreviewStyle()
{
return value(rcsFilePreviewStyle).toInt();
}
void FWBSettings::setRCSFilePreviewStyle(int style)
{
setValue(rcsFilePreviewStyle, style);
}
int FWBSettings::getRCSFilePreviewSortColumn()
{
return value(rcsFilePreviewSortColumn).toInt();
}
void FWBSettings::setRCSFilePreviewSortColumn(int col)
{
setValue(rcsFilePreviewSortColumn, col);
}
bool FWBSettings::getAutoSave() { return value( autoSave ).toBool(); }
void FWBSettings::setAutoSave(bool f) { setValue( autoSave, f); }

View File

@ -105,6 +105,12 @@ class FWBSettings : public QSettings {
bool getRCSLogState();
void setRCSLogState(bool f);
int getRCSFilePreviewStyle();
void setRCSFilePreviewStyle(int style);
int getRCSFilePreviewSortColumn();
void setRCSFilePreviewSortColumn(int col);
bool getAutoSave();
void setAutoSave(bool f);

View File

@ -1747,13 +1747,16 @@ FWObject* ObjectManipulator::actuallyPasteTo(FWObject *target,
}
if ( m_project->isSystem(ta) ||
(Firewall::isA(ta) && RuleSet::cast(obj)!=NULL))
(Firewall::isA(ta) && RuleSet::cast(obj)!=NULL) ||
(Interface::isA(ta) && (IPv4::cast(obj) || IPv6::cast(obj)))
)
{
/* add a copy of the object to system group , or
* add ruleset object to a firewall.
*/
if (fwbdebug) qDebug("Copy object %s (%d) to a system group, firewall or ruleset",
obj->getName().c_str(), obj->getId());
if (fwbdebug)
qDebug("Copy object %s (%d) to a system group, a ruleset to a firewall or an address to an interface",
obj->getName().c_str(), obj->getId());
FWObject *nobj= m_project->db()->create(obj->getTypeName());
assert (nobj!=NULL);
nobj->ref();
@ -1775,7 +1778,7 @@ FWObject* ObjectManipulator::actuallyPasteTo(FWObject *target,
/* check for duplicates. We just won't add an object if it is already there */
int cp_id = obj->getId();
list<FWObject*>::iterator j;
for(j=grp->begin(); j!=grp->end(); ++j)
for (j=grp->begin(); j!=grp->end(); ++j)
{
FWObject *o1=*j;
if(cp_id==o1->getId()) return o1;
@ -1787,6 +1790,7 @@ FWObject* ObjectManipulator::actuallyPasteTo(FWObject *target,
grp->addRef(obj);
}
}
catch(FWException &ex)
{

View File

@ -28,9 +28,11 @@
#include "RCS.h"
#include "RCSFilePreview.h"
#include "FWBSettings.h"
#include "fwbuilder/libfwbuilder-config.h"
#include "fwbuilder/FWException.h"
#include "fwbuilder/XMLTools.h"
#include <QTreeWidget>
#include <qregexp.h>
@ -43,24 +45,18 @@
using namespace std;
using namespace libfwbuilder;
int RCSViewItem::compare(QTreeWidgetItem *itm, int col, bool ) const
bool RCSViewItem::operator<(const QTreeWidgetItem &other) const
{
QString rev1 = text(col);
QString rev2 = itm->text(col);
int col = treeWidget()->sortColumn();
for(int i=1; ; i++)
{
QString v1 = rev1.section(".",i,i);
QString v2 = rev2.section(".",i,i);
if (v1=="" && v2=="") return 0;
if (v1==v2) continue;
if (v1=="" && v2!="") return -1;
if (v1!="" && v2=="") return 1;
if (v1.toInt()>v2.toInt()) return 1;
if (v1.toInt()<v2.toInt()) return -1;
i++;
}
return 0;
QString col_txt_1 = text(col);
QString col_txt_2 = other.text(col);
if (col==0) // column 0 is revision number
return (XMLTools::version_compare(
col_txt_1.toStdString(), col_txt_2.toStdString()) < 0);
return (col_txt_1 < col_txt_2);
}
RCSFilePreview::RCSFilePreview(QWidget *parent): QDialog(parent)
@ -76,10 +72,15 @@ RCSFilePreview::RCSFilePreview(QWidget *parent): QDialog(parent)
SIGNAL( itemActivated( QTreeWidgetItem*, int ) ),
this, SLOT( accept() ) );
if (st->getRCSFilePreviewStyle()==1)
m_widget->list_view->setChecked(true);
else
m_widget->tree_view->setChecked(true);
m_widget->RCSTreeView->setAllColumnsShowFocus( true );
m_widget->RCSTreeView->setSelectionMode(
QAbstractItemView::SingleSelection );
m_widget->RCSTreeView->setSelectionMode(QAbstractItemView::SingleSelection );
m_widget->RCSTreeView->setRootIsDecorated( FALSE );
// m_widget->RCSTreeView->sortByColumn( 0, Qt::AscendingOrder );
if (fwbdebug) qDebug("RCSFilePreview: constructor done");
@ -92,6 +93,7 @@ RCSFilePreview::~RCSFilePreview()
{
if (fwbdebug) qDebug("~RCSFilePreview() rcs=%p", rcs);
// if (rcs!=NULL) delete rcs;
st->setRCSFilePreviewSortColumn(m_widget->RCSTreeView->sortColumn());
}
void RCSFilePreview::openReadOnly()
@ -124,6 +126,11 @@ bool RCSFilePreview::showFileRLog( const QString &filename )
if (fwbdebug) qDebug("RCSFilePreview::showFileRLog filename=%s rcs=%p",
filename.toLocal8Bit().constData(),rcs);
current_file = filename;
m_widget->RCSTreeView->disconnect(
SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
m_widget->RCSTreeView->clear();
if (rcs!=NULL) delete rcs;
@ -150,56 +157,120 @@ bool RCSFilePreview::showFileRLog( const QString &filename )
QList<Revision>::iterator i;
QList<RCSViewItem*> itemList;
QList<RCSViewItem*>::iterator ili;
RCSViewItem* lastItem = NULL;
RCSViewItem* latest_revision_item = NULL;
RCSViewItem* latest_date_item = NULL;
string latest_revision = "1.0";
QString latest_date = "";
for (i=rcs->revisions.begin(); i!=rcs->revisions.end(); ++i)
{
rcsComments[(*i).rev]=(*i).log;
rcsComments[(*i).rev] = (*i).log;
if ((*i).rev.indexOf(QRegExp("^[0-9]+\\.[0-9]+$"))!=-1)
RCSViewItem *itm;
if (st->getRCSFilePreviewStyle()==1)
{
RCSViewItem *itm = new RCSViewItem( rootItm );
itm->setText( 0, (*i).rev );
itm->setText( 1, (*i).date );
itm->setText( 2, (*i).author );
itm->setText( 3, QString(" ")+(*i).locked_by );
// List style
itm = addRevision(*i, rootItm);
itemList.push_back(itm);
lastItem = itm;
}
if ((*i).rev.indexOf(QRegExp("^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+"))!=-1)
} else
{
QString branch_root = (*i).rev.section(".",0,1);
for (ili=itemList.begin(); ili!=itemList.end(); ++ili)
if ((*ili)->text(0) == branch_root)
// tree style
if ((*i).rev.indexOf(QRegExp("^[0-9]+\\.[0-9]+$"))!=-1)
{
itm = addRevision(*i, rootItm);
itemList.push_back(itm);
}
if ((*i).rev.indexOf(QRegExp("^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+"))!=-1)
{
QString branch_root = (*i).rev.section(".",0,1);
for (ili=itemList.begin(); ili!=itemList.end(); ++ili)
{
QTreeWidgetItem *br = *ili;
if (br!=NULL)
if ((*ili)->text(0) == branch_root)
{
RCSViewItem *itm=new RCSViewItem(br);
itm->setText( 0, (*i).rev );
itm->setText( 1, (*i).date );
itm->setText( 2, (*i).author );
itm->setText( 3, QString(" ")+(*i).locked_by );
QTreeWidgetItem *br = *ili;
if (br!=NULL) itm = addRevision((*i), br);
}
}
}
}
string itm_revision = (*i).rev.toStdString();
if (XMLTools::version_compare(itm_revision, latest_revision) > 0)
{
latest_revision = itm_revision;
latest_revision_item = itm;
}
// This relies on the date string in the rcslog output
// being in sortable format. This is so for the "C" or "en_US"
// locale, but I am not sure about other locales.
if ((*i).date > latest_date)
{
latest_date = (*i).date;
latest_date_item = itm;
}
}
m_widget->RCSTreeView->scrollToItem( lastItem );
m_widget->RCSTreeView->expandAll();
// m_widget->RCSTreeView->sortByColumn(0, Qt::AscendingOrder);
m_widget->RCSTreeView->sortByColumn(st->getRCSFilePreviewSortColumn(),
Qt::AscendingOrder);
// connect signal before setting current item so that
// selectedRevision gets control and updates rcs log panel
connect( m_widget->RCSTreeView,
SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
this, SLOT(selectedRevision(QTreeWidgetItem*)));
RCSViewItem* show_item = NULL;
if (m_widget->RCSTreeView->sortColumn()==0 && latest_revision_item)
show_item = latest_revision_item;
if (m_widget->RCSTreeView->sortColumn()==1 && latest_date_item)
show_item = latest_date_item;
if (show_item)
{
show_item->setSelected(true);
m_widget->RCSTreeView->expandItem(show_item->parent());
m_widget->RCSTreeView->setCurrentItem(show_item);
m_widget->RCSTreeView->scrollToItem(show_item);
}
// resize after parent of the current item was expanded
m_widget->RCSTreeView->resizeColumnToContents ( 0 );
m_widget->RCSTreeView->resizeColumnToContents ( 1 );
lastItem->setSelected( true );
m_widget->RCSTreeView->setCurrentItem( lastItem );
return true;
}
RCSViewItem* RCSFilePreview::addRevision(Revision &rev,
QTreeWidgetItem *parent_item)
{
RCSViewItem *itm = new RCSViewItem(parent_item);
itm->setText(0, rev.rev);
itm->setText(1, rev.date);
itm->setText(2, rev.author);
itm->setText(3, QString(" ") + rev.locked_by);
return itm;
}
void RCSFilePreview::switchToTreeView()
{
st->setRCSFilePreviewStyle(0); // 0 for backward compatibility
if (!current_file.isEmpty()) showFileRLog(current_file);
}
void RCSFilePreview::switchToListView()
{
st->setRCSFilePreviewStyle(1);
if (!current_file.isEmpty()) showFileRLog(current_file);
}
RCS* RCSFilePreview::getSelectedRev()
{
@ -209,6 +280,10 @@ RCS* RCSFilePreview::getSelectedRev()
}
void RCSFilePreview::closeEvent(QCloseEvent *event)
{
if (fwbdebug)
qDebug("RCSFilePreview::closeEvent");
st->setRCSFilePreviewSortColumn(m_widget->RCSTreeView->sortColumn());
QDialog::closeEvent(event);
}

View File

@ -41,8 +41,8 @@ class RCSViewItem : public QTreeWidgetItem {
RCSViewItem(QTreeWidget *parent) : QTreeWidgetItem(parent) {}
RCSViewItem(QTreeWidgetItem *parent) : QTreeWidgetItem(parent) {}
virtual int compare(QTreeWidgetItem *i, int col, bool ascending) const;
virtual bool operator<(const QTreeWidgetItem &other) const;
};
class RCSFilePreview : public QDialog
@ -54,18 +54,25 @@ class RCSFilePreview : public QDialog
QString current_file;
std::map<QString,QString> rcsComments;
bool RO;
RCSViewItem* addRevision(Revision &rev, QTreeWidgetItem *parent_item);
public:
RCSFilePreview(QWidget *parent);
~RCSFilePreview();
RCS* getSelectedRev();
bool showFileRLog( const QString &filename );
public slots:
virtual void openReadOnly();
virtual void selectedRevision(QTreeWidgetItem *itm);
virtual void openFile();
virtual void openReadOnly();
virtual void selectedRevision(QTreeWidgetItem *itm);
virtual void openFile();
virtual void switchToTreeView();
virtual void switchToListView();
virtual void closeEvent(QCloseEvent *event);
};

View File

@ -30,8 +30,8 @@
<property name="modal" >
<bool>true</bool>
</property>
<layout class="QVBoxLayout" >
<item>
<layout class="QGridLayout" name="gridLayout_2" >
<item row="0" column="1" >
<widget class="QTreeWidget" name="RCSTreeView" >
<property name="minimumSize" >
<size>
@ -51,6 +51,9 @@
<property name="alternatingRowColors" >
<bool>false</bool>
</property>
<property name="sortingEnabled" >
<bool>true</bool>
</property>
<property name="allColumnsShowFocus" >
<bool>true</bool>
</property>
@ -76,7 +79,46 @@
</column>
</widget>
</item>
<item>
<item rowspan="2" row="1" column="0" colspan="2" >
<widget class="QFrame" name="frame" >
<property name="frameShape" >
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow" >
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<widget class="QRadioButton" name="tree_view" >
<property name="text" >
<string>Tree View</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QRadioButton" name="list_view" >
<property name="text" >
<string>List View</string>
</property>
</widget>
</item>
<item row="0" column="2" >
<spacer name="horizontalSpacer" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
<width>267</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="2" column="1" >
<widget class="Line" name="line2" >
<property name="frameShape" >
<enum>QFrame::HLine</enum>
@ -89,7 +131,7 @@
</property>
</widget>
</item>
<item>
<item row="3" column="1" >
<layout class="QHBoxLayout" >
<property name="spacing" >
<number>0</number>
@ -140,7 +182,7 @@
</item>
</layout>
</item>
<item>
<item row="4" column="1" >
<layout class="QHBoxLayout" >
<item>
<spacer>
@ -150,7 +192,7 @@
<property name="sizeType" >
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" >
<property name="sizeHint" stdset="0" >
<size>
<width>111</width>
<height>30</height>
@ -210,7 +252,6 @@
<tabstop>comment</tabstop>
<tabstop>openButton</tabstop>
</tabstops>
<includes/>
<resources/>
<connections>
<connection>
@ -229,22 +270,6 @@
</hint>
</hints>
</connection>
<connection>
<sender>RCSTreeView</sender>
<signal>currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)</signal>
<receiver>RCSFilePreview_q</receiver>
<slot>selectedRevision(QTreeWidgetItem*)</slot>
<hints>
<hint type="sourcelabel" >
<x>20</x>
<y>20</y>
</hint>
<hint type="destinationlabel" >
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>openButton</sender>
<signal>clicked()</signal>
@ -261,5 +286,41 @@
</hint>
</hints>
</connection>
<connection>
<sender>tree_view</sender>
<signal>clicked()</signal>
<receiver>RCSFilePreview_q</receiver>
<slot>switchToTreeView()</slot>
<hints>
<hint type="sourcelabel" >
<x>66</x>
<y>301</y>
</hint>
<hint type="destinationlabel" >
<x>253</x>
<y>243</y>
</hint>
</hints>
</connection>
<connection>
<sender>list_view</sender>
<signal>clicked()</signal>
<receiver>RCSFilePreview_q</receiver>
<slot>switchToListView()</slot>
<hints>
<hint type="sourcelabel" >
<x>160</x>
<y>301</y>
</hint>
<hint type="destinationlabel" >
<x>253</x>
<y>243</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>switchToTreeView()</slot>
<slot>switchToListView()</slot>
</slots>
</ui>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE FWObjectDatabase SYSTEM "fwbuilder.dtd">
<FWObjectDatabase xmlns="http://www.fwbuilder.org/1.0/" version="10" lastModified="1242536814" id="root">
<FWObjectDatabase xmlns="http://www.fwbuilder.org/1.0/" version="10" lastModified="1243445686" id="root">
<Library id="sysid99" name="Deleted Objects" comment="" ro="False">
<ICMP6Service id="idE0C27650" code="0" type="1" name="ipv6 dest unreachable" comment="No route to destination" ro="False"/>
<IPv4 id="id41D295E2" name="firewall30:ppp.200*:ip" comment="" ro="False" address="192.168.1.1" netmask="255.255.255.0"/>
@ -810,6 +810,7 @@
<ObjectRef ref="id178392X48026"/>
<IPv6 id="id197751X48026" name="firewall-ipv6-5:eth0:ipv6" comment="" ro="False" address="fe80::21d:9ff:fe8b:8e94" netmask="64"/>
<IPv6 id="id178394X48026" name="firewall-ipv6-6:eth1:ip6" comment="" ro="False" address="fe80::21d:9ff:fe8b:8e94" netmask="64"/>
<IPv6 id="id42754X3791" name="ipv4-ipv6-host-1:eth0:ip6" comment="" ro="False" address="e80::21d:9ff:fe8b:8e94" netmask="64"/>
<ObjectRef ref="sysid0"/>
</Library>
<Library id="syslib001" color="#d2ffd0" name="User" comment="User defined objects" ro="False">
@ -1641,6 +1642,32 @@
<Option name="use_mac_addr_filter">False</Option>
</HostOptions>
</Host>
<Host id="id42703X3768" name="ipv4-ipv6-host" comment="" ro="False">
<Interface id="id42705X3768" bridgeport="False" dyn="False" label="" security_level="0" unnum="False" unprotected="False" name="eth0" comment="" ro="False">
<IPv4 id="id42706X3768" name="ipv4-ipv6-host:eth0:ip" comment="" ro="False" address="192.168.1.1" netmask="255.255.255.0"/>
<IPv6 id="id42708X3768" name="ipv4-ipv6-host:eth0:ipv6" comment="" ro="False" address="e80::21d:9ff:fe8b:8e94" netmask="64"/>
</Interface>
<Management address="0.0.0.0">
<SNMPManagement enabled="False" snmp_read_community="" snmp_write_community=""/>
<FWBDManagement enabled="False" identity="" port="-1"/>
<PolicyInstallScript arguments="" command="" enabled="False"/>
</Management>
<HostOptions/>
</Host>
<Host id="id42750X3791" name="ipv4-ipv6-host-1" comment="" ro="False">
<Interface id="id42752X3791" bridgeport="False" dyn="False" label="" security_level="0" unnum="False" unprotected="False" name="eth0" comment="" ro="False">
<IPv4 id="id42753X3791" name="ipv4-ipv6-host-1:eth0:ip" comment="" ro="False" address="192.168.1.1" netmask="255.255.255.0"/>
</Interface>
<Interface id="id100840X3791" bridgeport="False" dyn="False" label="" security_level="0" unnum="False" unprotected="False" name="eth1" comment="" ro="False">
<IPv6 id="id158924X3791" name="ipv4-ipv6-host-1:eth1:ipv6" comment="" ro="False" address="e80::21d:9ff:fe8b:8e94" netmask="64"/>
</Interface>
<Management address="0.0.0.0">
<SNMPManagement enabled="False" snmp_read_community="" snmp_write_community=""/>
<FWBDManagement enabled="False" identity="" port="-1"/>
<PolicyInstallScript arguments="" command="" enabled="False"/>
</Management>
<HostOptions/>
</Host>
</ObjectGroup>
<ObjectGroup id="stdid03_1" name="Networks" comment="" ro="False">
<Network id="net-Internal_net" name="Internal_net" comment="" ro="False" address="192.168.1.0" netmask="255.255.255.0"/>
@ -36064,7 +36091,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="verify_interfaces">True</Option>
</FirewallOptions>
</Firewall>
<Firewall id="id55972X87590" host_OS="linux24" inactive="False" lastCompiled="1230445064" lastInstalled="0" lastModified="1230444846" platform="iptables" version="" name="firewall-ipv6-2" comment="Using ULOG globally, but ipv6 rules&#10;should fall back to LOG because&#10;there is no ULOG for ip6tables yet&#10;Bug 2141911&#10;" ro="False">
<Firewall id="id55972X87590" host_OS="linux24" inactive="False" lastCompiled="1243445720" lastInstalled="0" lastModified="1243445707" platform="iptables" version="" name="firewall-ipv6-2" comment="Using ULOG globally, but ipv6 rules&#10;should fall back to LOG because&#10;there is no ULOG for ip6tables yet&#10;Bug 2141911&#10;" ro="False">
<NAT id="id56353X87590" name="NAT" comment="" ro="False" ipv4_rule_set="False" ipv6_rule_set="False" top_rule_set="True"/>
<Policy id="id56087X87590" name="Policy" comment="" ro="False" ipv4_rule_set="True" ipv6_rule_set="True" top_rule_set="True">
<PolicyRule id="id56088X87590" disabled="False" group="" log="False" position="0" action="Accept" direction="Both" comment="this rule shadows the next.&#10;Note that we add command line&#10;flag -xt to the compiler">
@ -36227,7 +36254,47 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56184X87590" disabled="False" log="True" position="8" action="Accept" direction="Both" comment="">
<PolicyRule id="id62066X3768" disabled="False" group="" log="False" position="8" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
<Dst neg="False">
<ObjectRef ref="id42703X3768"/>
</Dst>
<Srv neg="False">
<ServiceRef ref="sysid1"/>
</Srv>
<Itf neg="False">
<ObjectRef ref="sysid0"/>
</Itf>
<When neg="False">
<IntervalRef ref="sysid2"/>
</When>
<PolicyRuleOptions>
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id178305X3791" disabled="False" group="" log="False" position="9" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
<Dst neg="False">
<ObjectRef ref="id42750X3791"/>
</Dst>
<Srv neg="False">
<ServiceRef ref="sysid1"/>
</Srv>
<Itf neg="False">
<ObjectRef ref="sysid0"/>
</Itf>
<When neg="False">
<IntervalRef ref="sysid2"/>
</When>
<PolicyRuleOptions>
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56184X87590" disabled="False" log="True" position="10" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="id4834B9206131"/>
</Src>
@ -36247,7 +36314,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56196X87590" disabled="False" log="True" position="9" action="Accept" direction="Both" comment="">
<PolicyRule id="id56196X87590" disabled="False" log="True" position="11" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="id4834A2238571"/>
</Src>
@ -36267,7 +36334,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56208X87590" disabled="False" log="True" position="10" action="Accept" direction="Both" comment="">
<PolicyRule id="id56208X87590" disabled="False" log="True" position="12" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="id4834A2278571"/>
</Src>
@ -36287,7 +36354,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56220X87590" disabled="False" log="False" position="11" action="Accept" direction="Both" comment="">
<PolicyRule id="id56220X87590" disabled="False" log="False" position="13" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="id56355X87590"/>
</Src>
@ -36307,7 +36374,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56232X87590" disabled="False" log="False" position="12" action="Accept" direction="Both" comment="">
<PolicyRule id="id56232X87590" disabled="False" log="False" position="14" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="id56359X87590"/>
</Src>
@ -36327,7 +36394,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56244X87590" disabled="False" log="False" position="13" action="Accept" direction="Both" comment="">
<PolicyRule id="id56244X87590" disabled="False" log="False" position="15" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36347,7 +36414,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56256X87590" disabled="False" log="False" position="14" action="Accept" direction="Both" comment="">
<PolicyRule id="id56256X87590" disabled="False" log="False" position="16" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36367,7 +36434,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56268X87590" disabled="False" log="False" position="15" action="Accept" direction="Both" comment="">
<PolicyRule id="id56268X87590" disabled="False" log="False" position="17" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36387,7 +36454,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56280X87590" disabled="False" log="False" position="16" action="Accept" direction="Both" comment="">
<PolicyRule id="id56280X87590" disabled="False" log="False" position="18" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36407,7 +36474,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56292X87590" disabled="False" log="False" position="17" action="Accept" direction="Both" comment="">
<PolicyRule id="id56292X87590" disabled="False" log="False" position="19" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36428,7 +36495,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56305X87590" disabled="False" group="" log="False" position="18" action="Accept" direction="Both" comment="INPUT, OUTPUT, FORWARD">
<PolicyRule id="id56305X87590" disabled="False" group="" log="False" position="20" action="Accept" direction="Both" comment="INPUT, OUTPUT, FORWARD">
<Src neg="False">
<ObjectRef ref="id86936X27543"/>
</Src>
@ -36448,7 +36515,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56317X87590" disabled="False" group="" log="False" position="19" action="Accept" direction="Both" comment="INPUT, OUTPUT, FORWARD">
<PolicyRule id="id56317X87590" disabled="False" group="" log="False" position="21" action="Accept" direction="Both" comment="INPUT, OUTPUT, FORWARD">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36468,7 +36535,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56365X87590" disabled="False" group="" log="False" position="20" action="Accept" direction="Outbound" comment="for bug 2047082&#10;&#10;">
<PolicyRule id="id56365X87590" disabled="False" group="" log="False" position="22" action="Accept" direction="Outbound" comment="for bug 2047082&#10;&#10;">
<Src neg="False">
<ObjectRef ref="id55972X87590"/>
</Src>
@ -36488,7 +36555,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56329X87590" disabled="False" group="" log="False" position="21" action="Accept" direction="Both" comment="">
<PolicyRule id="id56329X87590" disabled="False" group="" log="False" position="23" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36508,7 +36575,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56341X87590" disabled="False" group="" log="True" position="22" action="Deny" direction="Both" comment="">
<PolicyRule id="id56341X87590" disabled="False" group="" log="True" position="24" action="Deny" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36528,7 +36595,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">True</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56382X87590" disabled="False" group="" log="False" position="23" action="Accept" direction="Both" comment="INPUT, OUTPUT, FORWARD">
<PolicyRule id="id56382X87590" disabled="False" group="" log="False" position="25" action="Accept" direction="Both" comment="INPUT, OUTPUT, FORWARD">
<Src neg="False">
<ObjectRef ref="id4834B9206131"/>
</Src>
@ -36548,7 +36615,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56399X87590" disabled="False" group="" log="False" position="24" action="Accept" direction="Both" comment="INPUT, OUTPUT, FORWARD">
<PolicyRule id="id56399X87590" disabled="False" group="" log="False" position="26" action="Accept" direction="Both" comment="INPUT, OUTPUT, FORWARD">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36568,7 +36635,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56416X87590" disabled="False" group="" log="False" position="25" action="Accept" direction="Both" comment="">
<PolicyRule id="id56416X87590" disabled="False" group="" log="False" position="27" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36588,7 +36655,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56433X87590" disabled="False" group="" log="False" position="26" action="Accept" direction="Inbound" comment="">
<PolicyRule id="id56433X87590" disabled="False" group="" log="False" position="28" action="Accept" direction="Inbound" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36608,7 +36675,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56450X87590" disabled="False" group="" log="False" position="27" action="Accept" direction="Both" comment="">
<PolicyRule id="id56450X87590" disabled="False" group="" log="False" position="29" action="Accept" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36628,7 +36695,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id56467X87590" disabled="False" group="" log="False" position="28" action="Accept" direction="Outbound" comment="">
<PolicyRule id="id56467X87590" disabled="False" group="" log="False" position="30" action="Accept" direction="Outbound" comment="">
<Src neg="False">
<ObjectRef ref="id56355X87590"/>
</Src>
@ -36648,7 +36715,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">False</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id77330X29621" disabled="False" group="" log="True" position="29" action="Deny" direction="Both" comment="test for bug 2463048 &#10;&quot;custom services should have IPv4/v6 setting&quot;&#10;&#10;rule should compile for ipv6 b/c custom service&#10;object &quot;ipv6 source route&quot; is configured as &quot;ipv6&quot;&#10;&#10;">
<PolicyRule id="id77330X29621" disabled="False" group="" log="True" position="31" action="Deny" direction="Both" comment="test for bug 2463048 &#10;&quot;custom services should have IPv4/v6 setting&quot;&#10;&#10;rule should compile for ipv6 b/c custom service&#10;object &quot;ipv6 source route&quot; is configured as &quot;ipv6&quot;&#10;&#10;">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>
@ -36668,7 +36735,7 @@ echo '%FWBPROMPT%'; sh /tmp/%FWSCRIPT%
<Option name="stateless">True</Option>
</PolicyRuleOptions>
</PolicyRule>
<PolicyRule id="id111075X88392" disabled="False" group="" log="True" position="30" action="Deny" direction="Both" comment="">
<PolicyRule id="id111075X88392" disabled="False" group="" log="True" position="32" action="Deny" direction="Both" comment="">
<Src neg="False">
<ObjectRef ref="sysid0"/>
</Src>