mirror of
https://github.com/nmap/nmap.git
synced 2025-12-25 17:09:02 +00:00
Add a function free_services that tells Nmap to reload the nmap-services
file again when it needs it. This is called from nmap_free_mem, because cp_free (also called by nmap_free_mem) invalidates members of the services data structures. In normal use this doesn't matter. It only matters when reinvoking the engine several times with --interactive.
This commit is contained in:
24
services.cc
24
services.cc
@@ -129,13 +129,13 @@ bool service_node_ratio_compare(const service_node& a, const service_node& b) {
|
||||
}
|
||||
|
||||
extern NmapOps o;
|
||||
static int numtcpports = 0;
|
||||
static int numudpports = 0;
|
||||
static int numsctpports = 0;
|
||||
static int numtcpports;
|
||||
static int numudpports;
|
||||
static int numsctpports;
|
||||
static std::map<port_spec, service_node> service_table;
|
||||
static std::list<service_node> services_by_ratio;
|
||||
static int services_initialized = 0;
|
||||
static int ratio_format = 0; // 0 = /etc/services no-ratio format. 1 = new nmap format
|
||||
static int services_initialized;
|
||||
static int ratio_format; // 0 = /etc/services no-ratio format. 1 = new nmap format
|
||||
|
||||
static int nmap_services_init() {
|
||||
if (services_initialized) return 0;
|
||||
@@ -152,6 +152,13 @@ static int nmap_services_init() {
|
||||
int ratio_n, ratio_d;
|
||||
char ratio_str[32];
|
||||
|
||||
numtcpports = 0;
|
||||
numudpports = 0;
|
||||
numsctpports = 0;
|
||||
service_table.clear();
|
||||
services_by_ratio.clear();
|
||||
ratio_format = 0;
|
||||
|
||||
if (nmap_fetchfile(filename, sizeof(filename), "nmap-services") != 1) {
|
||||
#ifndef WIN32
|
||||
error("Unable to find nmap-services! Resorting to /etc/services");
|
||||
@@ -277,6 +284,13 @@ static int nmap_services_init() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void free_services() {
|
||||
/* This doesn't free anything, because the service_table is allocated
|
||||
statically. It just marks the table as needing to be reinitialized because
|
||||
other things have been freed, for example the cp_strdup-allocated members
|
||||
of service_node. */
|
||||
services_initialized = 0;
|
||||
}
|
||||
|
||||
|
||||
/* Adds ports whose names match mask and one or more protocols
|
||||
|
||||
Reference in New Issue
Block a user