diff --git a/build_num b/build_num index a7fa4cc85..a7e509957 100644 --- a/build_num +++ b/build_num @@ -1 +1 @@ -#define BUILD_NUM 2646 +#define BUILD_NUM 2647 diff --git a/doc/ChangeLog b/doc/ChangeLog index ff92d7050..cb0585995 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,5 +1,9 @@ 2010-03-03 vadim + * Importer.cpp (Importer::createAddress): fixed #1287 "policy + importer (iptables) crashes when host name is used in iptables + rule in place of an address". Importer now creates DNSName object. + * fixed #1291 "deleted objects 'policy' problem". SF bug 2962628 If user ended up placing a 'policy' object in the 'Deleted Objects' library, it could not be deleted or opened. diff --git a/src/gui/Importer.cpp b/src/gui/Importer.cpp index 3bc06b97b..42765ca59 100644 --- a/src/gui/Importer.cpp +++ b/src/gui/Importer.cpp @@ -40,6 +40,7 @@ #include "fwbuilder/FWObjectDatabase.h" #include "fwbuilder/Network.h" #include "fwbuilder/Address.h" +#include "fwbuilder/DNSName.h" #include "fwbuilder/AddressRange.h" #include "fwbuilder/IPService.h" #include "fwbuilder/ICMPService.h" @@ -888,15 +889,33 @@ FWObject* Importer::createAddress(const std::string &addr, if ( netmask == InetAddr::getAllOnes().toString() ) { - Address *a; - std::string name = std::string("h-") + addr; - a = Address::cast(createObject(IPv4::TYPENAME, name)); - a->setAddress(InetAddr(addr)); - a->setNetmask(InetAddr(InetAddr::getAllOnes())); - a->setComment(comment); - all_objects[sig] = a; - *logger << "Address object: " << name << "\n"; - return a; + string name; + try + { + InetAddr obj_addr(addr); // testing if string converts to an address + name = std::string("h-") + addr; + Address *a = Address::cast(createObject(IPv4::TYPENAME, name)); + a->setAddress(obj_addr); + a->setNetmask(InetAddr(InetAddr::getAllOnes())); + a->setComment(comment); + all_objects[sig] = a; + *logger << "Address object: " << name << "\n"; + return a; + } catch(FWException &ex) + { + // address text line can not be converted to ipv4 address. + // Since parsers do not understand ipv6 yet, assume this + // is a host address and create DNSName object + name = addr; + DNSName *da = DNSName::cast(createObject(DNSName::TYPENAME, name)); + da->setSourceName(addr); + da->setRunTime(true); + da->setComment(comment); + all_objects[sig] = da; + *logger << "DNSName object: " << name << "\n"; + return da; + } + } else { Network *net;