From 3b229be52067b2eca4bc7161990f80f28f5349eb Mon Sep 17 00:00:00 2001 From: Vadim Kurland Date: Fri, 27 May 2011 11:38:29 -0700 Subject: [PATCH] see #2436, #2435 added GUI controls to let user choose host OS and version as part of the PF import process. Using this information to configure firewall object --- src/gui/gui.pro | 4 +- .../IC_FirewallNamePage.cpp | 6 +- .../IC_PlatformWarningPage.cpp | 75 ++++++++++--- .../IC_PlatformWarningPage.h | 2 - .../IC_ProgressPage.cpp | 44 +++++--- .../ImportFirewallConfigurationWizard.h | 15 ++- .../ic_platformwarningpage_q.ui | 106 ++++++++++-------- 7 files changed, 157 insertions(+), 95 deletions(-) diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 66f59e005..8a067109b 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -54,10 +54,10 @@ OTHER_LIBS = ../common/$$BINARY_SUBDIR/libcommon.a \ ../libfwbuilder/src/fwcompiler/$$BINARY_SUBDIR/libfwcompiler.a \ ../libfwbuilder/src/fwbuilder/$$BINARY_SUBDIR/libfwbuilder.a -PRE_TARGETDEPS = $$OTHER_LIBS $$IMPORT_LIB $$FWBPARSER_LIB $$ANTLR_LIBS - STATIC_LIBS += $$OTHER_LIBS +PRE_TARGETDEPS = $$STATIC_LIBS + macx:STATIC_LIBS += -framework \ Carbon STATIC_LIBS += $$LIBS_FWCOMPILER diff --git a/src/libgui/importFirewallConfigurationWizard/IC_FirewallNamePage.cpp b/src/libgui/importFirewallConfigurationWizard/IC_FirewallNamePage.cpp index 534bf10d8..a589fd03b 100644 --- a/src/libgui/importFirewallConfigurationWizard/IC_FirewallNamePage.cpp +++ b/src/libgui/importFirewallConfigurationWizard/IC_FirewallNamePage.cpp @@ -49,12 +49,10 @@ IC_FirewallNamePage::IC_FirewallNamePage(QWidget *parent) : QWizardPage(parent) void IC_FirewallNamePage::initializePage() { QString platform = - dynamic_cast(wizard())-> - getPlatform(); + dynamic_cast(wizard())-> platform; QStringList *buf = - dynamic_cast(wizard())-> - getBufferPtr(); + &(dynamic_cast(wizard())->buffer); qDebug() << "platform=" << platform; diff --git a/src/libgui/importFirewallConfigurationWizard/IC_PlatformWarningPage.cpp b/src/libgui/importFirewallConfigurationWizard/IC_PlatformWarningPage.cpp index 4bfc17eff..a55b49f5d 100644 --- a/src/libgui/importFirewallConfigurationWizard/IC_PlatformWarningPage.cpp +++ b/src/libgui/importFirewallConfigurationWizard/IC_PlatformWarningPage.cpp @@ -29,12 +29,18 @@ #include "PreImport.h" +#include "platforms.h" + #include #include #include #include #include +#include + +using namespace std; + IC_PlatformWarningPage::IC_PlatformWarningPage(QWidget *parent) : QWizardPage(parent) { @@ -43,29 +49,42 @@ IC_PlatformWarningPage::IC_PlatformWarningPage(QWidget *parent) : QWizardPage(pa setField("platform", ""); - m_dialog->voteForFeatureButton->hide(); + // user-chosen host os and version, so far we only show these for PF + registerField("hostOS*", m_dialog->hostOS); + registerField("version*", m_dialog->version); + + m_dialog->hostOSAndVersionFrame->hide(); platformOk = false; } bool IC_PlatformWarningPage::isComplete() const { - return platformOk; + if (!platformOk) return false; + + if (dynamic_cast(wizard())-> + platform == "pf") + { + QString host_os = m_dialog->hostOS->currentText(); + QString version = m_dialog->version->currentText(); + return (! host_os.isEmpty() && ! version.isEmpty()); + } else + return true; } void IC_PlatformWarningPage::initializePage() { QString fileName = field("fileName").toString(); + ImportFirewallConfigurationWizard* wz = dynamic_cast(wizard()); + QFile cf(fileName); if (cf.open(QIODevice::ReadOnly )) { m_dialog->configFileBrowser->clear(); m_dialog->platform->setText(tr("Unknown")); - QStringList *buf = - dynamic_cast(wizard())-> - getBufferPtr(); + QStringList *buf = &(wz->buffer); buf->clear(); QTextStream stream(&cf); @@ -178,16 +197,49 @@ void IC_PlatformWarningPage::initializePage() break; case PreImport::PF: + { m_dialog->platform->setText(tr("pf")); m_dialog->platformSpecificWarning->setText( - tr("Firewall Builder supports import PF " + tr("

Firewall Builder supports import PF " "configuration from a pf.conf file. Tables will be imported " "as object groups and their names will be preserved. " "Macros are expanded in place and not imported as " "objects. Import of anchors is not supported at this time." + "

" + "

PF version in Firewall Builder corresponds to its " + "versions in OpenBSD. If you run FreeBSD 8.2 or earlier, " + "choose \"3.9\"." + "

" )); + platformOk = true; + + // populate host OS items using standard function from platforms.cpp + // but add an empty item on top and make it current + setHostOS(m_dialog->hostOS, "pf", ""); + m_dialog->hostOS->insertItem(0, ""); + m_dialog->hostOS->setCurrentIndex(0); + + for (int i=0; ihostOS->count(); ++i) + { + wz->host_os_list.append(m_dialog->hostOS->itemText(i)); + } + + // populate versions using standard function from platforms.cpp + // and add empty item on top + list vl; + getVersionsForPlatform("pf", vl); + vl.push_front(QStringPair("", QObject::tr(""))); + + for (list::iterator i1=vl.begin(); i1!=vl.end(); i1++) + { + m_dialog->version->addItem( i1->second ); + wz->version_list.append(i1->first); + } + + m_dialog->hostOSAndVersionFrame->show(); break; + } case PreImport::PF_REVERSE: m_dialog->platform->setText(tr("pf")); @@ -208,18 +260,9 @@ void IC_PlatformWarningPage::initializePage() break; } - QString platform_string = pi.getPlatformAsString(); - - dynamic_cast(wizard())-> - setPlatform(platform_string); + wz->platform = pi.getPlatformAsString(); } emit completeChanged(); } -void IC_PlatformWarningPage::voteForFeature() -{ - QString url("http://www.fwbuilder.org/4.0/surveys/pf_import_registration.html"); - QDesktopServices::openUrl(QUrl(url, QUrl::StrictMode)); -} - diff --git a/src/libgui/importFirewallConfigurationWizard/IC_PlatformWarningPage.h b/src/libgui/importFirewallConfigurationWizard/IC_PlatformWarningPage.h index 16f253cc5..6f2954076 100644 --- a/src/libgui/importFirewallConfigurationWizard/IC_PlatformWarningPage.h +++ b/src/libgui/importFirewallConfigurationWizard/IC_PlatformWarningPage.h @@ -42,8 +42,6 @@ public: virtual void initializePage(); virtual bool isComplete() const; -public slots: - void voteForFeature(); }; #endif // IC_PLATFORMWARNINGPAGE_H diff --git a/src/libgui/importFirewallConfigurationWizard/IC_ProgressPage.cpp b/src/libgui/importFirewallConfigurationWizard/IC_ProgressPage.cpp index 7e3ed662c..a54438858 100644 --- a/src/libgui/importFirewallConfigurationWizard/IC_ProgressPage.cpp +++ b/src/libgui/importFirewallConfigurationWizard/IC_ProgressPage.cpp @@ -83,12 +83,10 @@ int IC_ProgressPage::nextId() const { if (fwbdebug_ic) qDebug() << "IC_ProgressPage::nextId()"; - QString platform = - dynamic_cast(wizard())-> - getPlatform(); + ImportFirewallConfigurationWizard* wz = dynamic_cast(wizard()); - Firewall *fw = - dynamic_cast(wizard())->getFirewall(); + QString platform = wz->platform; + Firewall *fw = wz->getFirewall(); // Move on to the next page only if firewall object has been created // and the next page only makes sense for pix and fwsm @@ -138,19 +136,16 @@ void IC_ProgressPage::initializePage() m_dialog->errors_count_display->setText("0"); m_dialog->warnings_count_display->setText("0"); - QString platform = - dynamic_cast(wizard())-> - getPlatform(); + ImportFirewallConfigurationWizard* wz = dynamic_cast(wizard()); + + QString platform = wz->platform; QString firewallName = field("firewallName").toString(); bool deduplicate = field("deduplicate").toBool(); - QStringList *buffer = - dynamic_cast(wizard())-> - getBufferPtr(); + QStringList *buffer = &(wz->buffer); QString fileName = field("fileName").toString(); - Library *lib = dynamic_cast( - wizard())->currentLib(); + Library *lib = wz->currentLib(); importer = new ImporterThread(this, lib, *buffer, platform, firewallName, fileName, @@ -180,17 +175,32 @@ void IC_ProgressPage::importerFinished() Firewall *fw = importer->getFirewallObject(); qApp->processEvents(); // to flush the log - dynamic_cast(wizard())->setFirewall(fw); + ImportFirewallConfigurationWizard* wz = dynamic_cast(wizard()); - QString platform = - dynamic_cast(wizard())-> - getPlatform(); + wz->setFirewall(fw); + + QString platform = wz->platform; if (fw) // fw can be NULL if import was uncussessful { QString fwName = field("firewallName").toString(); fw->setName(fwName.toUtf8().constData()); + // lists host_os_list and version_list are used-chosen host os and version. + // We ask user to choose these only for PF, so for other platforms + // these lists are going to be empty. + if ( wz->host_os_list.size() > 0 && wz->version_list.size() > 0) + { + int host_os_idx = field("hostOS").toInt(); + int version_idx = field("version").toInt(); + + QString hostOS = wz->host_os_list.at( host_os_idx ); + QString version = wz->version_list.at( version_idx ); + + if ( ! hostOS.isEmpty()) fw->setStr("hostOS", hostOS.toStdString()); + if ( ! version.isEmpty()) fw->setStr("version", version.toStdString()); + } + setFinalPage(false); // this triggers call to nextId() } else diff --git a/src/libgui/importFirewallConfigurationWizard/ImportFirewallConfigurationWizard.h b/src/libgui/importFirewallConfigurationWizard/ImportFirewallConfigurationWizard.h index bfdb52b6d..3e5c5f7f7 100644 --- a/src/libgui/importFirewallConfigurationWizard/ImportFirewallConfigurationWizard.h +++ b/src/libgui/importFirewallConfigurationWizard/ImportFirewallConfigurationWizard.h @@ -34,11 +34,21 @@ namespace libfwbuilder class Library; }; +class IC_FirewallNamePage; +class IC_PlatformWarningPage; +class IC_ProgressPage; class ImportFirewallConfigurationWizard : public QWizard { + friend class IC_FirewallNamePage; + friend class IC_PlatformWarningPage; + friend class IC_ProgressPage; + Q_OBJECT; + QString platform; + QList host_os_list; + QList version_list; QStringList buffer; libfwbuilder::Firewall *fw; libfwbuilder::FWObjectDatabase *db_orig; @@ -53,11 +63,6 @@ public: libfwbuilder::FWObjectDatabase *db); virtual ~ImportFirewallConfigurationWizard(); - QString getPlatform() { return platform; } - void setPlatform(const QString &s) { platform = s; } - - QStringList* getBufferPtr() { return &buffer; } - libfwbuilder::Firewall* getFirewall() { return fw; } void setFirewall(libfwbuilder::Firewall* _fw) { fw = _fw; } diff --git a/src/libgui/importFirewallConfigurationWizard/ic_platformwarningpage_q.ui b/src/libgui/importFirewallConfigurationWizard/ic_platformwarningpage_q.ui index 18bfa95c1..be954939c 100644 --- a/src/libgui/importFirewallConfigurationWizard/ic_platformwarningpage_q.ui +++ b/src/libgui/importFirewallConfigurationWizard/ic_platformwarningpage_q.ui @@ -6,16 +6,16 @@ 0 0 - 512 - 527 + 631 + 710 WizardPage - + - + @@ -26,48 +26,76 @@ - - - - Vote for PF import feature (opens web browser) - - - - - - - Qt::Horizontal - - - - 188 - 20 - - - - - + Firewall Platform: - + TextLabel - + Qt::Horizontal - 318 + 388 + 20 + + + + + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + + + Host OS: + + + + + + + + + + Version: + + + + + + + + + + + + + Qt::Horizontal + + + + 258 20 @@ -81,25 +109,5 @@ - - - voteForFeatureButton - clicked() - IC_PlatformWarningPage_q - voteForFeature() - - - 150 - 47 - - - 255 - 263 - - - - - - voteForFeature() - +