1
0
mirror of https://github.com/fwbuilder/fwbuilder synced 2026-03-19 09:47:20 +01:00

see #2563 fixed crash that occurred it user tried to edit interface object located in the Deleted Objects library

This commit is contained in:
Vadim Kurland 2011-07-21 14:01:52 -07:00
parent 6d26bfac90
commit 04d5c68fb3

View File

@ -120,11 +120,16 @@ void InterfaceDialog::loadFWObject(FWObject *o)
* and right after the interface has been created. * and right after the interface has been created.
*/ */
FWObject *parent_host = Host::getParentHost(s); FWObject *parent_host = Host::getParentHost(s);
interfaceProperties *int_prop = if (parent_host)
interfacePropertiesObjectFactory::getInterfacePropertiesObject( {
parent_host); // parent_host may be NULL if interface object is located
int_prop->guessSubInterfaceTypeAndAttributes(s); // in the Deleted Objects library
delete int_prop; interfaceProperties *int_prop =
interfacePropertiesObjectFactory::getInterfacePropertiesObject(
parent_host);
int_prop->guessSubInterfaceTypeAndAttributes(s);
delete int_prop;
}
} }
m_dialog->obj_name->setText( QString::fromUtf8(s->getName().c_str()) ); m_dialog->obj_name->setText( QString::fromUtf8(s->getName().c_str()) );
@ -163,117 +168,118 @@ void InterfaceDialog::loadFWObject(FWObject *o)
} }
FWObject *f = Host::getParentHost(s); FWObject *f = Host::getParentHost(s);
//FWObject *f = s->getParentHost(); if (f)
{
m_dialog->advancedconfig->setEnabled(true); m_dialog->advancedconfig->setEnabled(true);
/* if parent is a host, hide firewall related settings */ /* if parent is a host, hide firewall related settings */
if (Host::isA(f)) if (Host::isA(f))
{
m_dialog->management->setEnabled(false);
m_dialog->unprotected->setEnabled(false);
m_dialog->dedicated_failover->setEnabled(false);
m_dialog->seclevel->setEnabled(false);
m_dialog->seclevelLabel->setEnabled(false);
m_dialog->netzone->setEnabled(false);
m_dialog->netzoneLabel->setEnabled(false);
// Can;t let user try to open "advanced interface settings"
// dialog because Host does not have "platform" and "host_OS"
// attributes but that dialog depends on them.
m_dialog->advancedconfig->setEnabled(false);
}
bool supports_security_levels = false;
bool supports_network_zones = false;
bool supports_unprotected = false;
bool supports_advanced_ifaces = false;
try
{
// platform specific
supports_security_levels =
Resources::getTargetCapabilityBool(
f->getStr("platform"), "security_levels");
supports_network_zones =
Resources::getTargetCapabilityBool(
f->getStr("platform"), "network_zones");
supports_unprotected =
Resources::getTargetCapabilityBool(
f->getStr("platform"), "unprotected_interfaces");
// OS specific
supports_advanced_ifaces =
Resources::getTargetCapabilityBool(
f->getStr("host_OS"), "supports_advanced_interface_options");
// disable advanced options dialog if this is main interface of a cluster
if (Cluster::isA(s->getParent())) supports_advanced_ifaces = false;
} catch (FWException &ex) { }
if (fwbdebug)
qDebug() << "parent=" << f->getName().c_str()
<< "Firewall::isA(f)=" << Firewall::isA(f)
<< "host_OS=" << f->getStr("host_OS").c_str()
<< "supports_advanced_ifaces=" << supports_advanced_ifaces;
/* if parent is a firewall or a fw cluster, it is more complex ... */
if (Firewall::isA(f) || Cluster::isA(f))
{
if (supports_security_levels)
{
m_dialog->seclevel->setEnabled(true);
m_dialog->seclevelLabel->setEnabled(true);
m_dialog->seclevel->setValue( obj->getInt("security_level") );
} else
{ {
m_dialog->management->setEnabled(false);
m_dialog->unprotected->setEnabled(false);
m_dialog->dedicated_failover->setEnabled(false);
m_dialog->seclevel->setEnabled(false); m_dialog->seclevel->setEnabled(false);
m_dialog->seclevelLabel->setEnabled(false); m_dialog->seclevelLabel->setEnabled(false);
m_dialog->seclevel->setValue(0); m_dialog->netzone->setEnabled(false);
} m_dialog->netzoneLabel->setEnabled(false);
// Can;t let user try to open "advanced interface settings"
if (supports_unprotected) // dialog because Host does not have "platform" and "host_OS"
{ // attributes but that dialog depends on them.
m_dialog->unprotected->setEnabled(true);
m_dialog->unprotected->setChecked( obj->getBool("unprotected") );
} else
{
m_dialog->unprotected->setEnabled(false);
}
if (supports_advanced_ifaces)
{
m_dialog->advancedconfig->setEnabled(!o->isReadOnly());
} else
{
m_dialog->advancedconfig->setEnabled(false); m_dialog->advancedconfig->setEnabled(false);
} }
// disable interface options group if this is main interface bool supports_security_levels = false;
// of a cluster. This applies to subinterfaces as bool supports_network_zones = false;
// well. Current implementation can not generate configuration bool supports_unprotected = false;
// code for interfaces and subinterfaces of member firewalls bool supports_advanced_ifaces = false;
// from cluster interface or subinterface objects
m_dialog->interfaceOptionsGroup->setEnabled(!Cluster::isA(f));
if (supports_network_zones) try
{ {
m_dialog->netzone->setEnabled(true); // platform specific
m_dialog->netzoneLabel->setEnabled(true); supports_security_levels =
Resources::getTargetCapabilityBool(
f->getStr("platform"), "security_levels");
supports_network_zones =
Resources::getTargetCapabilityBool(
f->getStr("platform"), "network_zones");
supports_unprotected =
Resources::getTargetCapabilityBool(
f->getStr("platform"), "unprotected_interfaces");
netzone_manager->load(m_project->db()); // OS specific
supports_advanced_ifaces =
Resources::getTargetCapabilityBool(
f->getStr("host_OS"), "supports_advanced_interface_options");
int id = FWObjectDatabase::getIntId(obj->getStr("network_zone")); // disable advanced options dialog if this is main interface of a cluster
if (id==-1) id = 0; if (Cluster::isA(s->getParent())) supports_advanced_ifaces = false;
netzone_manager->packComboBox(m_dialog->netzone, id); } catch (FWException &ex) { }
}
else if (fwbdebug)
qDebug() << "parent=" << f->getName().c_str()
<< "Firewall::isA(f)=" << Firewall::isA(f)
<< "host_OS=" << f->getStr("host_OS").c_str()
<< "supports_advanced_ifaces=" << supports_advanced_ifaces;
/* if parent is a firewall or a fw cluster, it is more complex ... */
if (Firewall::isA(f) || Cluster::isA(f))
{ {
m_dialog->netzone->setEnabled(false); if (supports_security_levels)
m_dialog->netzoneLabel->setEnabled(false); {
m_dialog->netzone->clear(); m_dialog->seclevel->setEnabled(true);
m_dialog->seclevelLabel->setEnabled(true);
m_dialog->seclevel->setValue( obj->getInt("security_level") );
} else
{
m_dialog->seclevel->setEnabled(false);
m_dialog->seclevelLabel->setEnabled(false);
m_dialog->seclevel->setValue(0);
}
if (supports_unprotected)
{
m_dialog->unprotected->setEnabled(true);
m_dialog->unprotected->setChecked( obj->getBool("unprotected") );
} else
{
m_dialog->unprotected->setEnabled(false);
}
if (supports_advanced_ifaces)
{
m_dialog->advancedconfig->setEnabled(!o->isReadOnly());
} else
{
m_dialog->advancedconfig->setEnabled(false);
}
// disable interface options group if this is main interface
// of a cluster. This applies to subinterfaces as
// well. Current implementation can not generate configuration
// code for interfaces and subinterfaces of member firewalls
// from cluster interface or subinterface objects
m_dialog->interfaceOptionsGroup->setEnabled(!Cluster::isA(f));
if (supports_network_zones)
{
m_dialog->netzone->setEnabled(true);
m_dialog->netzoneLabel->setEnabled(true);
netzone_manager->load(m_project->db());
int id = FWObjectDatabase::getIntId(obj->getStr("network_zone"));
if (id==-1) id = 0;
netzone_manager->packComboBox(m_dialog->netzone, id);
}
else
{
m_dialog->netzone->setEnabled(false);
m_dialog->netzoneLabel->setEnabled(false);
m_dialog->netzone->clear();
}
} }
} }