/*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /* Author: Christian Hubinger , (C) 2001 */ #include "kmfinstallerplugin.h" // TQt includes #include #include #include #include #include // KDE includes #include #include #include #include #include #include #include #include #include #include #include // Project includes #include "../core/kmfconfig.h" #include "../core/kmfdoc.h" #include "../core/kmfprotocol.h" #include "../core/kmfrulesetdoc.h" #include "../core/kmftarget.h" #include "../core/kmftargetconfig.h" #include "../core/kmfnetwork.h" #include "../core/kmfiptdoc.h" #include "../core/kmferror.h" #include "../core/kmferrorhandler.h" #include "../core/kmfgenericdoc.h" #include "../core/kmfpluginfactory.h" #include "../core/kmfcompilerinterface.h" #include "../core/kmfinstallerinterface.h" #include "../core/kprocesswrapper.h" #include "../core/xmlnames.h" #include "../kmfwidgets/kmfmainwindow.h" #include "../kmfwidgets/kmfprocout.h" #include "../kmfwidgets/kmfselectactivetarget.h" #include "linux/kmfiptinstaller.h" namespace KMF { KMFInstallerPlugin::KMFInstallerPlugin( TQObject *parent, const char *name ) : KMFPlugin( parent, name ) { m_docType = -1; KMFMainWindow* app = 0; app = dynamic_cast( parent ); if ( ! app ) { KMessageBox::error( 0, "Oops wrong parent class found for kmfinstallerplugin!!!" ); } m_doc = app->network()->currentDoc(); // m_installerPlugin = 0; m_execWidget = 0; m_actionStopFw = new TDEAction( i18n( "&Reset IPTables" ), "decrypted", 0, this, TQ_SLOT( slotStopFirewall() ), actionCollection(), "reset_iptables" ); m_actionRunFw = new TDEAction( i18n( "Run Fir&ewall" ), "encrypted", 0, this, TQ_SLOT( slotStartFirewall() ), actionCollection(), "run_firewall" ); m_actionPreviewScript = new TDEAction( i18n( "&Preview Script" ), "mime_txt", 0 , this, TQ_SLOT( slotShowScript() ), actionCollection(), "preview_script" ); m_generateInstallPackage = new TDEAction( i18n( "&Generate Linux Installation Package" ), "fileexport", 0 , this, TQ_SLOT( slotGenerateInstallerPackage() ), actionCollection(), "generate_install_package" ); m_actionShowConfig = new TDEAction( i18n( "Show &All Tables" ), "messagebox_info", 0 , this, TQ_SLOT( slotShowConfig() ), actionCollection(), "show_ipt_config" ); m_actionShowFilter = new TDEAction( i18n( "Show &Filter Table" ), "messagebox_info", 0 , this, TQ_SLOT( slotShowFilter() ), actionCollection(), "show_filter" ); m_actionShowNat = new TDEAction( i18n( "Show &Nat Table" ), "messagebox_info", 0 , this, TQ_SLOT( slotShowNat() ), actionCollection(), "show_nat" ); m_actionShowMangle = new TDEAction( i18n( "Show &Mangle Table" ), "messagebox_info", 0 , this, TQ_SLOT( slotShowMangle() ), actionCollection(), "show_mangle" ); m_actionMenu = new TDEActionMenu( i18n( "Show IPTables Configuration" ), "messagebox_info", this , "show_menu" ); m_actionMenu->insert( m_actionShowConfig ); m_actionMenu->insert( m_actionShowFilter ); m_actionMenu->insert( m_actionShowNat ); m_actionMenu->insert( m_actionShowMangle ); m_actionMenu->setDelayed( false ); m_actionMenu->setStickyMenu( true ); actionCollection() ->insert( m_actionMenu ); m_actionInstallFW = new TDEAction( i18n( "&Install Firewall" ), "go-down", 0 , this, TQ_SLOT( slotInstallFW() ), actionCollection(), "install_firewall" ); m_actionUninstallFW = new TDEAction( i18n( "&Uninstall Firewall" ), "go-up", 0 , this, TQ_SLOT( slotUninstallFW() ), actionCollection(), "uninstall_firewall" ); setXMLFile( "kmfinstallerpluginui.rc" ); slotEnableActions( false ); connect( app,TQ_SIGNAL( sigEnableActions( bool ) ), this, TQ_SLOT( slotEnableActions(bool ) ) ); kdDebug() << "KMFInstallerPlugin: Finished Initialisationn " << endl; } KMFInstallerPlugin::~KMFInstallerPlugin() {} bool KMFInstallerPlugin::isConfigValid() { bool configValid = false; if ( rulesetDoc() ) { configValid = rulesetDoc()->target()->config()->isValid(); if ( ! configValid ) { if( KMessageBox::questionYesNo ( 0, i18n( "

Do you want KMyFirewall to try to auto configure %1 settings

" ).arg( rulesetDoc()->target()->toFriendlyString() ), i18n( "Auto Configure Target" ), KStdGuiItem::yes(), KStdGuiItem::no() ) == KMessageBox::Yes ) { KMFError* err = rulesetDoc()->target()->tryAutoConfiguration(); KMFErrorHandler* errH = new KMFErrorHandler( "Target Autoconfiguration" ); errH->showError( err ); if ( ! rulesetDoc()->target()->config()->isValid() ) { KMessageBox::error( TDEApplication::kApplication()->mainWidget(), i18n("

Auto Confguration of: %1 could not determinate all needed setting. You'll need to configure the mmissing settings.

").arg( rulesetDoc()->target()->toFriendlyString() ) ); } else { KMessageBox::information( TDEApplication::kApplication()->mainWidget(), i18n("

Auto Confguration of: %1 finished successfully.

").arg( rulesetDoc()->target()->toFriendlyString() ) ); } configValid = rulesetDoc()->target()->config()->isValid(); delete errH; delete err; } } } return configValid; } KMFProcOut* KMFInstallerPlugin::execWidget() { if ( m_execWidget ) return m_execWidget; kdDebug() << "Need to create new execWidget." << endl; m_execWidget = new KMFProcOut( (KMFMainWindow*) parent(), "KMFProcOut" ); return m_execWidget; } void KMFInstallerPlugin::generateInstallerPackage( KMFTarget* tg ) { if ( ! isConfigValid() ) { const TQString & msg = i18n( "The curemnt target configurations seems to be invalid" ); const TQString& cap = i18n("Invalid Configuration"); KMessageBox::error( 0, msg, cap ); return; } if ( rulesetDoc() ) { KMFInstallerInterface *inst2 = tg->installer(); if ( ! inst2 ) return; TQString remDir = rulesetDoc()->target()->getFishUrl(); remDir.append( "/tmp/" ); TQString path = remDir; path.append( "kmfpackage.kmfpkg" ); KURL url( path ); KURL remDirUrl( remDir ); if ( url.fileName().isEmpty() ) return; if ( TDEIO::NetAccess::exists( url, false, TDEApplication::kApplication()->mainWidget() ) ) { TQDateTime now = TQDateTime::currentDateTime(); TQString backUp; backUp.append( url.url() ); backUp.append( "_backup_" ); backUp.append( now.toString( "dd.MM.yyyy.hh:mm:ss" ) ); KURL newUrl( backUp ); TQString backFileName = "kmfpackage.kmfpkg"; backUp.append( "_backup_" ); backUp.append( now.toString( "dd.MM.yyyy.hh:mm:ss" ) ); TDEIO::NetAccess::file_move( url, newUrl, 700, true, true, TDEApplication::kApplication()->mainWidget() ); TDEIO::NetAccess::fish_execute( remDir, "chmod 400 /tmp/" + backFileName, TDEApplication::kApplication()->mainWidget() ); } inst2->generateInstallerPackage( tg, url ); TDEIO::NetAccess::fish_execute( remDir, "chmod 700 /tmp/kmfpackage.kmfpkg", TDEApplication::kApplication()->mainWidget() ); } } // ########## Slots for the Actions ############### void KMFInstallerPlugin::slotShowScript() { kdDebug() << "void KMFInstallerPlugin::slotShowScript()" << endl; setOutputWidget( execWidget() ); TQString script = rulesetDoc()->compile(); kdDebug() << "\n\nCompiled Script: " << script << "\n\n" << endl; execWidget()->setText( script, i18n("Show firewall script...") ); showOutput(); } void KMFInstallerPlugin::slotShowConfig() { kdDebug() << "void KMFInstallerPlugin::slotShowConfig()" << endl; cmdShowRunningConfig( "all" ); } void KMFInstallerPlugin::slotShowFilter() { kdDebug() << "void KMFInstallerPlugin::slotShowFilter()" << endl; cmdShowRunningConfig( Constants::FilterTable_Name ); } void KMFInstallerPlugin::slotShowNat() { kdDebug() << "void KMFInstallerPlugin::slotShowNat()" << endl; cmdShowRunningConfig( Constants::NatTable_Name ); } void KMFInstallerPlugin::slotShowMangle() { kdDebug() << "void KMFInstallerPlugin::slotShowMangle()" << endl; cmdShowRunningConfig( Constants::MangleTable_Name ); } void KMFInstallerPlugin::cmdShowRunningConfig( const TQString& para ) { if ( ! isConfigValid() ) { const TQString & msg = i18n( "The curemnt target configurations seems to be invalid" ); const TQString& cap = i18n("Invalid Configuration"); KMessageBox::error( 0, msg, cap ); return; } KMFInstallerInterface *inst2 = rulesetDoc()->target()->installer(); if ( ! inst2 ) return; inst2->cmdShowRunningConfig( para ); } void KMFInstallerPlugin::slotStopFirewall() { kdDebug() << "void KMFInstallerPlugin::slotStopFirewall() " << endl; if ( ! isConfigValid() ) { const TQString & msg = i18n( "The curemnt target configurations seems to be invalid" ); const TQString& cap = i18n("Invalid Configuration"); KMessageBox::error( 0, msg, cap ); return; } KMFInstallerInterface *inst2 = rulesetDoc()->target()->installer(); if ( ! inst2 ) { return; } inst2->cmdStopFW(); } void KMFInstallerPlugin::slotStartFirewall() { kdDebug() << "void KMFInstallerPlugin::slotStartFirewall()" << endl; if ( ! isConfigValid() ) { const TQString & msg = i18n( "The curemnt target configurations seems to be invalid" ); const TQString& cap = i18n("Invalid Configuration"); KMessageBox::error( 0, msg, cap ); return; } if ( rulesetDoc() ) { KMFInstallerInterface *inst2 = rulesetDoc()->target()->installer(); if ( ! inst2 ) { return; } inst2->cmdRunFW(); } } void KMFInstallerPlugin::slotInstallFW() { kdDebug() << "void KMFInstallerPlugin::slotInstallFW()" << endl; if ( ! isConfigValid() ) { const TQString & msg = i18n( "The curemnt target configurations seems to be invalid" ); const TQString& cap = i18n("Invalid Configuration"); KMessageBox::error( 0, msg, cap ); return; } KMFInstallerInterface *inst2 = rulesetDoc()->target()->installer(); if ( ! inst2 ) { return; } inst2->cmdInstallFW(); } void KMFInstallerPlugin::slotUninstallFW() { kdDebug() << "void KMFInstallerPlugin::slotUninstallFW()" << endl; if ( ! isConfigValid() ) { const TQString & msg = i18n( "The curemnt target configurations seems to be invalid" ); const TQString& cap = i18n("Invalid Configuration"); KMessageBox::error( 0, msg, cap ); return; } KMFInstallerInterface *inst2 = rulesetDoc()->target()->installer(); if ( ! inst2 ) { return; } inst2->cmdUninstallFW(); } void KMFInstallerPlugin::slotGenerateInstallerPackage() { kdDebug() << "void KMFInstallerPlugin::slotGenerateInstallPackage()" << endl; if ( rulesetDoc() ) { KMFTarget* tg = KMFSelectActiveTarget::selectTarget( network(), i18n("

Please select target from which the configuration should be exported into an installation package.

") ); if ( ! tg ) { return; } if ( ! tg->config()->isValid() ) { const TQString & msg = i18n( "The target configurations seems to be invalid" ); const TQString& cap = i18n("Invalid Configuration"); KMessageBox::error( 0, msg, cap ); return; } KMFInstallerInterface *inst2 = tg->installer(); if ( ! inst2 ) return; TQString msg = i18n( "

KMyFirewall will create a shell script (*.sh) for you that includes a compressed archieve containing the scripts needed to install the firewall scripts into the boot system of the target computer
To install the package make it executabe (e.g. chmod +x mypackage.kmfpkg call the script without any parameter (./mypackage.kmfpkg)
For other options (e.g. uninstall, extracting etc.) please call the script using the --help parameter (e.g. ./mypackage.kmfpkg --help) to display a detailed option list.

" ); TQString cap = i18n( "Generate Installation Package" ); KMessageBox::information( 0, msg, cap, "generate_intsllation_package_howto", 0 ); KURL url = KFileDialog::getSaveURL( ":", "*.kmfpkg|KMyFirewall Installer Package (*.kmfpkg)" ); if ( url.fileName().isEmpty() ) return; int answer = 0; if ( TDEIO::NetAccess::exists( url, false, TDEApplication::kApplication()->mainWidget() ) ) { answer = KMessageBox::warningYesNo( 0, i18n( "File %1 already exists!

" "

Overwrite the existing file?

" ).arg( url.url() ) ); if ( answer == KMessageBox::No ) { return; } } inst2->generateInstallerPackage( tg, url ); TQString remPath = url.protocol(); if ( url.isLocalFile() ) { TDEProcess *proc = new TDEProcess(); *proc << "chmod"; *proc << "700" << url.path(); proc->start( TDEProcess::Block ); delete proc; proc = 0; kdDebug() << "Set perms for: " << url.path() << endl; } } } void KMFInstallerPlugin::slotEnableActions( bool ) { // if ( on ) { // m_actionStopFw->setEnabled( true ); // m_actionRunFw->setEnabled( true ); // m_actionPreviewScript->setEnabled( true ); // m_actionShowConfig->setEnabled( true ); // m_actionShowFilter->setEnabled( true ); // m_actionShowNat->setEnabled( true ); // m_actionShowMangle->setEnabled( true ); // m_actionMenu->setEnabled( true ); // m_actionInstallFW->setEnabled( true ); // m_actionUninstallFW->setEnabled( true ); // m_generateInstallPackage->setEnabled( true ); // } else { // m_actionStopFw->setEnabled( false ); // m_actionRunFw->setEnabled( false ); // m_actionPreviewScript->setEnabled( false ); // /* m_actionShowConfig->setEnabled( false ); // m_actionShowFilter->setEnabled( false ); // m_actionShowNat->setEnabled( false ); // m_actionShowMangle->setEnabled( false ); // m_actionMenu->setEnabled( false );*/ // m_actionInstallFW->setEnabled( false ); // m_actionUninstallFW->setEnabled( false ); // m_generateInstallPackage->setEnabled( false ); // } } // It's usually safe to leave the factory code alone.. with the // notable exception of the TDEAboutData data #include #include TDEInstance* KMFInstallerPluginFactory::s_instance = 0L; KMFInstallerPluginFactory::KMFInstallerPluginFactory( TQObject* parent, const char* name ) : KLibFactory( parent, name ) { s_instance = new TDEInstance( "KMFInstallerPluginFactory" ); } TQObject* KMFInstallerPluginFactory::createObject( TQObject* parent, const char* name, const char*, const TQStringList & ) { TQObject * obj = new KMFInstallerPlugin( parent, name ); emit objectCreated( obj ); return obj; } extern "C" { void* init_libkmfinstallerplugin() { return new KMFInstallerPluginFactory; } } } #include "kmfinstallerplugin.moc"