1
0
mirror of https://github.com/fwbuilder/fwbuilder synced 2026-03-18 17:27: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.
*/
FWObject *parent_host = Host::getParentHost(s);
interfaceProperties *int_prop =
interfacePropertiesObjectFactory::getInterfacePropertiesObject(
parent_host);
int_prop->guessSubInterfaceTypeAndAttributes(s);
delete int_prop;
if (parent_host)
{
// parent_host may be NULL if interface object is located
// in the Deleted Objects library
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()) );
@ -163,117 +168,118 @@ void InterfaceDialog::loadFWObject(FWObject *o)
}
FWObject *f = Host::getParentHost(s);
//FWObject *f = s->getParentHost();
m_dialog->advancedconfig->setEnabled(true);
if (f)
{
m_dialog->advancedconfig->setEnabled(true);
/* if parent is a host, hide firewall related settings */
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
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->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->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);
}
// 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));
bool supports_security_levels = false;
bool supports_network_zones = false;
bool supports_unprotected = false;
bool supports_advanced_ifaces = false;
if (supports_network_zones)
try
{
m_dialog->netzone->setEnabled(true);
m_dialog->netzoneLabel->setEnabled(true);
// 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");
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"));
if (id==-1) id = 0;
// disable advanced options dialog if this is main interface of a cluster
if (Cluster::isA(s->getParent())) supports_advanced_ifaces = false;
netzone_manager->packComboBox(m_dialog->netzone, id);
}
else
} 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))
{
m_dialog->netzone->setEnabled(false);
m_dialog->netzoneLabel->setEnabled(false);
m_dialog->netzone->clear();
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->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();
}
}
}