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:
parent
6d26bfac90
commit
04d5c68fb3
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user