diff -urNb nmap-4.00/docs/nmap.dtd nmap-4.00-dev/docs/nmap.dtd --- nmap-4.00/docs/nmap.dtd 2005-11-22 23:22:00.000000000 +0000 +++ nmap-4.00-dev/docs/nmap.dtd 2006-02-04 07:23:23.543738757 +0000 @@ -44,7 +44,6 @@ - @@ -66,7 +65,7 @@ - + - hostname CDATA #IMPLIED - ostype CDATA #IMPLIED - devicetype CDATA #IMPLIED - + + + + name) return 0; + if (!sd->name && !sd->service_fp) return 0; if (sd->product) { xml_product = xml_convert(sd->product); @@ -181,6 +182,14 @@ versionxmlstring += '\"'; } + if (sd->service_fp) { + xml_servicefp = xml_sf_convert(xml_convert(sd->service_fp)); + versionxmlstring += " servicefp=\""; + versionxmlstring += xml_servicefp; + free(xml_devicetype); xml_servicefp = NULL; + versionxmlstring += '\"'; + } + if (o.rpcscan && sd->rpc_status == RPC_STATUS_GOOD_PROG) { snprintf(rpcbuf, sizeof(rpcbuf), " rpcnum=\"%li\" lowver=\"%i\" highver=\"%i\" proto=\"rpc\"", @@ -189,7 +198,7 @@ snprintf(xmlbuf, xmlbuflen, "", - sd->name, + sd->name? sd->name : "unknown", versionxmlstring.c_str(), (sd->service_tunnel == SERVICE_TUNNEL_SSL)? "tunnel=\"ssl\" " : "", (sd->dtype == SERVICE_DETECTION_TABLE)? "table" : "probed", @@ -617,6 +626,29 @@ return temp; } +/* Remove all "\nSF:" from fingerprints */ +char* xml_sf_convert (const char* str) { + char *temp, *p; + char substr[5]; + int strl = strlen(str); + temp = (char *) malloc(strl + 1); + char *end = (char *)str + strl + 1; + Strncpy(temp, str, strl + 1); + for (p = temp; end - str >= 4; p++) { + Strncpy(substr, str, 5); + substr[4] = 0; /* Null term substr */ + if (strcmp(substr, "\nSF:") == 0) { + str += 4; + Strncpy(p, str, strlen(str) + 1); /* Copy past "\nSF:" to end of str */ + if (p > temp) p--; + } else { + str++; + } + } + temp = (char *) realloc(temp, strlen(temp) + 1); + return temp; +} + /* Write some information (printf style args) to the given log stream(s). Remember to watch out for format string bugs. */ void log_write(int logt, const char *fmt, ...) diff -urNb nmap-4.00/output.h nmap-4.00-dev/output.h --- nmap-4.00/output.h 2005-12-31 00:32:47.000000000 +0000 +++ nmap-4.00-dev/output.h 2006-02-04 07:22:54.979984627 +0000 @@ -207,4 +207,5 @@ void printfinaloutput(); char* xml_convert (const char* str); +char* xml_sf_convert (const char* str); #endif /* OUTPUT_H */