From d5ba3cfbaab59272ea8d7c3f6d2562c17cfa357f Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Mon, 1 Jun 2009 06:04:35 +0000 Subject: [PATCH 1/2] * FindObjectWidget.cpp (FindObjectWidget::findNext): fixed bug #2799315 "Find object" cant find object in rules of opened firewall. If scope was set to "policy of the opened firewall", "Find object" function could not find anything. It worked when scope was set to "policy of all firewalls". --- build_num | 2 +- doc/ChangeLog | 6 +++++ src/gui/FindObjectWidget.cpp | 44 ++++++++++++++++++++++++++---------- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/build_num b/build_num index 483cf4cf7..bca5e073d 100644 --- a/build_num +++ b/build_num @@ -1 +1 @@ -#define BUILD_NUM 986 +#define BUILD_NUM 990 diff --git a/doc/ChangeLog b/doc/ChangeLog index 68c54f9f9..b37fe0ce7 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,5 +1,11 @@ 2009-05-31 vadim + * FindObjectWidget.cpp (FindObjectWidget::findNext): fixed bug + #2799315 "Find object" cant find object in rules of opened + firewall. If scope was set to "policy of the opened firewall", + "Find object" function could not find anything. It worked when + scope was set to "policy of all firewalls". + * RuleSetView.cpp (RuleSetView::contextMenu): fixed bug #2799254 "Erratic behavior when rule is removed from the group". If user tried to remove a rule from the middle of a group of rules, the diff --git a/src/gui/FindObjectWidget.cpp b/src/gui/FindObjectWidget.cpp index eb64a3ee0..654d240ba 100644 --- a/src/gui/FindObjectWidget.cpp +++ b/src/gui/FindObjectWidget.cpp @@ -38,7 +38,7 @@ #include "ObjectTreeView.h" #include "RuleSetView.h" #include "ObjectEditor.h" - +#include "ProjectPanel.h" #include "fwbuilder/FWObjectDatabase.h" #include "fwbuilder/FWReference.h" @@ -76,8 +76,10 @@ FindObjectWidget::FindObjectWidget(QWidget*p, const char * n, Qt::WindowFlags f) setObjectName(n); replaceDisable(); - m_widget->srScope->setCurrentIndex(st->getInt(SETTINGS_PATH_PREFIX"/Search/Scope")); + m_widget->srScope->setCurrentIndex( + st->getInt(SETTINGS_PATH_PREFIX"/Search/Scope")); } + void FindObjectWidget::findObject(FWObject *o) { if (fwbdebug) qDebug("FindObjectWidget::findObject"); @@ -117,12 +119,11 @@ void FindObjectWidget::objectInserted() reset(); } - void FindObjectWidget::reset() { lastFound=NULL; lastAttrSearch=""; - treeSeeker=mw->db()->tree_begin(); + treeSeeker = mw->db()->tree_begin(); } @@ -142,7 +143,7 @@ void FindObjectWidget::find() if (m_widget->findAttr->count()>=MAX_SEARCH_ITEMS_COUNT) m_widget->findAttr->removeItem(MAX_SEARCH_ITEMS_COUNT-1); - m_widget->findAttr->insertItem( 0, m_widget->findAttr->lineEdit()->text() ); + m_widget->findAttr->insertItem(0, m_widget->findAttr->lineEdit()->text()); if (fwbdebug) qDebug("FindObjectWidget::find() : m_widget->findAttr->text(0)=%s", @@ -179,6 +180,7 @@ bool FindObjectWidget::matchAttr(libfwbuilder::FWObject *obj) break; } + case 1: // Address { Address *a = Address::cast(obj); @@ -198,6 +200,7 @@ bool FindObjectWidget::matchAttr(libfwbuilder::FWObject *obj) } break; } + case 2: // port if (TCPService::cast(obj)!=NULL || UDPService::cast(obj)!=NULL) { @@ -228,6 +231,7 @@ bool FindObjectWidget::matchAttr(libfwbuilder::FWObject *obj) break; } break; + case 3: // protocol num. if (IPService::cast(obj)!=NULL) { @@ -245,6 +249,7 @@ bool FindObjectWidget::matchAttr(libfwbuilder::FWObject *obj) break; } break; + case 4: // icmp type if (ICMPService::cast(obj)!=NULL) { @@ -277,7 +282,18 @@ void FindObjectWidget::findNext() if (m_widget->findAttr->count()>MAX_SEARCH_ITEMS_COUNT) m_widget->findAttr->removeItem(0); - FWObject *o=NULL; + FWObject *o = NULL; + + // if scope is "policies of opened firewall" then we need to get + // pointer to the currently opened firewall object + RuleSet* current_rule_set = mw->activeProject()->getCurrentRuleSet(); + if (current_rule_set) + selectedFirewall = Firewall::cast(current_rule_set->getParent()); + else + selectedFirewall = NULL; + + if (fwbdebug) + qDebug("selectedFirewall: %p", selectedFirewall); loop: @@ -287,6 +303,9 @@ loop: { o = *treeSeeker; +// if (fwbdebug) +// qDebug("Found object %s (%s)", o->getName().c_str(), o->getTypeName().c_str()); + if( RuleElement::cast(o->getParent())!=NULL) { if (m_widget->srScope->currentIndex()==3) // scope == selected firewalls @@ -296,7 +315,8 @@ loop: continue; } - } else if (m_widget->srScope->currentIndex()==0) continue ; // scope == tree only + } else + if (m_widget->srScope->currentIndex()==0) continue ; // scope == tree only } else { /* if not in rules, then in the tree. */ @@ -526,7 +546,6 @@ FWObject* FindObjectWidget::_replaceCurrent() } bool FindObjectWidget::inSelectedFirewall( RuleElement* r) { - FWObject *f=r; while (f!=NULL && !Firewall::isA(f)) f=f->getParent(); if (f==NULL) return false; @@ -589,8 +608,9 @@ void FindObjectWidget::init() void FindObjectWidget::firewallOpened(Firewall *f) { if (f==NULL) return; - selectedFirewall=f; - m_widget->srScope->setItemText( 3, tr("Policy of firewall '")+f->getName().c_str()+"'" ); + selectedFirewall = f; + m_widget->srScope->setItemText( + 3, tr("Policy of firewall '")+f->getName().c_str()+"'" ); } void FindObjectWidget::findPrev() @@ -605,6 +625,6 @@ void FindObjectWidget::replaceNext() } void FindObjectWidget::scopeChanged() { - st->setValue(SETTINGS_PATH_PREFIX"/Search/Scope",m_widget->srScope->currentIndex ()); - + st->setValue(SETTINGS_PATH_PREFIX"/Search/Scope", + m_widget->srScope->currentIndex ()); } From 1c0c8b20108fb0d697996c4e0e2dd89e687f5349 Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Mon, 1 Jun 2009 14:48:12 +0000 Subject: [PATCH 2/2] 2009-06-01 vadim * newHostDialog.cpp (newHostDialog::selectedInterface): fixed the same error reported in bug #2799163: "crash on correcting an error". The GUI crashed if user tried to add, then delete interfaces in the new firewall wizard. The crash occurred when the last interface was deleted on the page where interfaces can be configured manually. This needed to be fixed in both "new firewall" and "new host" dialogs. --- build_num | 2 +- doc/ChangeLog | 10 ++++++++++ src/gui/newHostDialog.cpp | 17 ++++++++++------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/build_num b/build_num index bca5e073d..a4075c4a0 100644 --- a/build_num +++ b/build_num @@ -1 +1 @@ -#define BUILD_NUM 990 +#define BUILD_NUM 991 diff --git a/doc/ChangeLog b/doc/ChangeLog index b37fe0ce7..9d9e2bf06 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,13 @@ +2009-06-01 vadim + + * newHostDialog.cpp (newHostDialog::selectedInterface): fixed the + same error reported in bug #2799163: "crash on correcting an + error". The GUI crashed if user tried to add, then delete + interfaces in the new firewall wizard. The crash occurred when the + last interface was deleted on the page where interfaces can be + configured manually. This needed to be fixed in both "new + firewall" and "new host" dialogs. + 2009-05-31 vadim * FindObjectWidget.cpp (FindObjectWidget::findNext): fixed bug diff --git a/src/gui/newHostDialog.cpp b/src/gui/newHostDialog.cpp index 60bf2789b..579e3476a 100644 --- a/src/gui/newHostDialog.cpp +++ b/src/gui/newHostDialog.cpp @@ -596,13 +596,16 @@ void newHostDialog::selectedInterface(QTreeWidgetItem*cur,QTreeWidgetItem*) //void newHostDialog::selectedInterface(QTreeWidgetItem *cur) { QTreeWidgetItem *itm = cur; - m_dialog->iface_name->setText( itm->text(0) ); - m_dialog->iface_label->setText( itm->text(1) ); - m_dialog->iface_addr->setText( itm->text(2) ); - m_dialog->iface_netmask->setText( itm->text(3) ); - m_dialog->iface_dyn->setChecked( itm->text(4).indexOf("Dyn")!=-1 ); - m_dialog->iface_unnum->setChecked( itm->text(4).indexOf("Unn")!=-1 ); - m_dialog->iface_physaddr->setText( itm->text(5) ); + if (itm) + { + m_dialog->iface_name->setText( itm->text(0) ); + m_dialog->iface_label->setText( itm->text(1) ); + m_dialog->iface_addr->setText( itm->text(2) ); + m_dialog->iface_netmask->setText( itm->text(3) ); + m_dialog->iface_dyn->setChecked( itm->text(4).indexOf("Dyn")!=-1 ); + m_dialog->iface_unnum->setChecked( itm->text(4).indexOf("Unn")!=-1 ); + m_dialog->iface_physaddr->setText( itm->text(5) ); + } } void newHostDialog::updateInterface()