mirror of
https://github.com/fwbuilder/fwbuilder
synced 2026-03-23 19:57:21 +01:00
fixes #2658 "snmp network discovery creates duplicate address
and network objects"
This commit is contained in:
parent
00f6188390
commit
eaf71afcfa
@ -1,5 +1,8 @@
|
||||
2011-09-19 Vadim Kurland <vadim@netcitadel.com>
|
||||
|
||||
* snmp.cpp (SNMPCrawler::run_impl): fixes #2658 "snmp network
|
||||
discovery creates duplicate address and network objects"
|
||||
|
||||
* ND_ProgressPage.h (class ND_ProgressPage): see #2657 snmp
|
||||
network discovery crashed if option "Confine scan to network" was
|
||||
used.
|
||||
|
||||
@ -1316,8 +1316,6 @@ void SNMPCrawler::init(const InetAddr &_seed,
|
||||
queue.clear();
|
||||
found.clear();
|
||||
|
||||
for (set<InetAddrMask*>::iterator i=networks.begin(); i!=networks.end();++i)
|
||||
delete *i;
|
||||
networks.clear();
|
||||
|
||||
queue[_seed]="";
|
||||
@ -1577,7 +1575,8 @@ void SNMPCrawler::run_impl(Logger *logger,
|
||||
// map interfaces with InterfaceData objects.
|
||||
// This object is destroyed when all InterfaceData
|
||||
// objects are destroyed. Create a copy.
|
||||
networks.insert(new InetAddrMask(*addr, *netm));
|
||||
|
||||
networks.insert(*net);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1730,8 +1729,7 @@ void SNMPCrawler::run_impl(Logger *logger,
|
||||
*logger << str;
|
||||
|
||||
networks.insert(
|
||||
new InetAddrMask(j->getDestination(),
|
||||
j->getNetmask()));
|
||||
InetAddrMask(j->getDestination(), j->getNetmask()));
|
||||
|
||||
nplus++;
|
||||
}
|
||||
@ -1827,7 +1825,7 @@ void SNMPCrawler::bacresolve_results(Logger *logger,
|
||||
}
|
||||
|
||||
|
||||
set<InetAddrMask*> SNMPCrawler::getNetworks()
|
||||
set<InetAddrMask> SNMPCrawler::getNetworks()
|
||||
{
|
||||
return networks;
|
||||
}
|
||||
|
||||
@ -456,7 +456,7 @@ class SNMPCrawler : public BackgroundOp
|
||||
|
||||
std::map<InetAddr, std::string> queue;
|
||||
std::map<InetAddr, CrawlerFind> found;
|
||||
std::set<InetAddrMask*> networks;
|
||||
std::set<InetAddrMask> networks;
|
||||
std::string community;
|
||||
int snmp_retries ;
|
||||
long snmp_timeout ;
|
||||
@ -510,7 +510,7 @@ class SNMPCrawler : public BackgroundOp
|
||||
const std::vector<InetAddrMask> *include=NULL);
|
||||
|
||||
std::map<InetAddr, CrawlerFind> getAllIPs();
|
||||
std::set<InetAddrMask*> getNetworks();
|
||||
std::set<InetAddrMask> getNetworks();
|
||||
|
||||
virtual void run_impl(Logger *logger,SyncFlag *stop_program)
|
||||
throw(FWException);
|
||||
|
||||
@ -255,8 +255,8 @@ void ND_ProgressPage::crawlerFinished()
|
||||
|
||||
if (crawler==NULL) return;
|
||||
|
||||
set<InetAddrMask*>::iterator m;
|
||||
set<InetAddrMask*> discovered_networks = crawler->getNetworks();
|
||||
set<InetAddrMask>::iterator m;
|
||||
set<InetAddrMask> discovered_networks = crawler->getNetworks();
|
||||
map<InetAddr, CrawlerFind> discovered_addresses = crawler->getAllIPs();
|
||||
|
||||
logLine(tr("Discovered %1 networks").arg(discovered_networks.size()));
|
||||
@ -264,25 +264,25 @@ void ND_ProgressPage::crawlerFinished()
|
||||
for (m=discovered_networks.begin(); m!=discovered_networks.end(); ++m)
|
||||
{
|
||||
ObjectDescriptor od;
|
||||
InetAddrMask *net = *m;
|
||||
InetAddrMask net = *m;
|
||||
|
||||
logLine(QString("network %1").arg(net->toString().c_str()));
|
||||
logLine(QString("network %1").arg(net.toString().c_str()));
|
||||
|
||||
// if address in *m is ipv6, recreate it as Inet6AddrMask and
|
||||
// use type NetworkIPv6
|
||||
if (net->getAddressPtr()->isV6())
|
||||
if (net.getAddressPtr()->isV6())
|
||||
{
|
||||
Inet6AddrMask in6am(*(net->getAddressPtr()),
|
||||
*(net->getNetmaskPtr()));
|
||||
Inet6AddrMask in6am(*(net.getAddressPtr()),
|
||||
*(net.getNetmaskPtr()));
|
||||
od.sysname = in6am.toString(); // different from ipv6
|
||||
od.type = NetworkIPv6::TYPENAME;
|
||||
} else
|
||||
{
|
||||
od.sysname = net->toString();
|
||||
od.sysname = net.toString();
|
||||
od.type = Network::TYPENAME;
|
||||
}
|
||||
od.addr = *(net->getAddressPtr());
|
||||
od.netmask = *(net->getNetmaskPtr());
|
||||
od.addr = *(net.getAddressPtr());
|
||||
od.netmask = *(net.getNetmaskPtr());
|
||||
od.isSelected = false;
|
||||
|
||||
networks->push_back(od);
|
||||
|
||||
@ -102,7 +102,7 @@ map<InetAddr, CrawlerFind> SNMPCrawlerThread::getAllIPs()
|
||||
return q->getAllIPs();
|
||||
}
|
||||
|
||||
set<InetAddrMask*> SNMPCrawlerThread::getNetworks()
|
||||
set<InetAddrMask> SNMPCrawlerThread::getNetworks()
|
||||
{
|
||||
return q->getNetworks();
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ public:
|
||||
void stop();
|
||||
|
||||
std::map<libfwbuilder::InetAddr, libfwbuilder::CrawlerFind> getAllIPs();
|
||||
std::set<libfwbuilder::InetAddrMask*> getNetworks();
|
||||
std::set<libfwbuilder::InetAddrMask> getNetworks();
|
||||
|
||||
signals:
|
||||
void finished();
|
||||
|
||||
@ -142,6 +142,13 @@
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p>
|
||||
fixes #2658 "snmp network discovery creates duplicate address
|
||||
and network objects"
|
||||
</p>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user