diff --git a/src/in-binary.c b/src/in-binary.c index dc573bb8..75065367 100644 --- a/src/in-binary.c +++ b/src/in-binary.c @@ -81,7 +81,9 @@ parse_status(struct Output *out, static void parse_status2(struct Output *out, enum PortStatus status, /* open/closed */ - const unsigned char *buf, size_t buf_length) + const unsigned char *buf, size_t buf_length, + const struct RangeList *ips, + const struct RangeList *ports) { struct MasscanRecord record; @@ -99,6 +101,18 @@ parse_status2(struct Output *out, if (out->when_scan_started == 0) out->when_scan_started = record.timestamp; + /* + * Filter + */ + if (ips && ips->count) { + if (!rangelist_is_contains(ips, record.ip)) + return; + } + if (ports && ports->count) { + if (!rangelist_is_contains(ports, record.port)) + return; + } + /* * Now report the result */ @@ -193,7 +207,10 @@ parse_banner4(struct Output *out, unsigned char *buf, size_t buf_length) /*************************************************************************** ***************************************************************************/ static void -parse_banner9(struct Output *out, unsigned char *buf, size_t buf_length) +parse_banner9(struct Output *out, unsigned char *buf, size_t buf_length, + const struct RangeList *ips, + const struct RangeList *ports, + const struct RangeList *btypes) { struct MasscanRecord record; @@ -213,6 +230,22 @@ parse_banner9(struct Output *out, unsigned char *buf, size_t buf_length) if (out->when_scan_started == 0) out->when_scan_started = record.timestamp; + /* + * Filter + */ + if (ips && ips->count) { + if (!rangelist_is_contains(ips, record.ip)) + return; + } + if (ports && ports->count) { + if (!rangelist_is_contains(ports, record.port)) + return; + } + if (btypes && btypes->count) { + if (!rangelist_is_contains(btypes, record.app_proto)) + return; + } + /* * Now print the output */ @@ -232,7 +265,10 @@ parse_banner9(struct Output *out, unsigned char *buf, size_t buf_length) * Read in the file, one record at a time. ***************************************************************************/ static uint64_t -parse_file(struct Output *out, const char *filename) +parse_file(struct Output *out, const char *filename, + const struct RangeList *ips, + const struct RangeList *ports, + const struct RangeList *btypes) { FILE *fp = 0; unsigned char *buf = 0; @@ -339,10 +375,12 @@ parse_file(struct Output *out, const char *filename) /* Depending on record type, do something different */ switch (type) { case 1: /* STATUS: open */ - parse_status(out, PortStatus_Open, buf, bytes_read); + if (!btypes->count) + parse_status(out, PortStatus_Open, buf, bytes_read); break; case 2: /* STATUS: closed */ - parse_status(out, PortStatus_Closed, buf, bytes_read); + if (!btypes->count) + parse_status(out, PortStatus_Closed, buf, bytes_read); break; case 3: /* BANNER */ parse_banner3(out, buf, bytes_read); @@ -359,13 +397,15 @@ parse_file(struct Output *out, const char *filename) parse_banner4(out, buf, bytes_read); break; case 6: /* STATUS: open */ - parse_status2(out, PortStatus_Open, buf, bytes_read); + if (!btypes->count) + parse_status2(out, PortStatus_Open, buf, bytes_read, ips, ports); break; case 7: /* STATUS: closed */ - parse_status2(out, PortStatus_Closed, buf, bytes_read); + if (!btypes->count) + parse_status2(out, PortStatus_Closed, buf, bytes_read, ips, ports); break; case 9: - parse_banner9(out, buf, bytes_read); + parse_banner9(out, buf, bytes_read, ips, ports, btypes); break; case 'm': /* FILEHEADER */ //goto end; @@ -395,7 +435,7 @@ parse_file(struct Output *out, const char *filename) * other formats. This preserves the original timestamps. *****************************************************************************/ void -convert_binary_files(struct Masscan *masscan, +read_binary_scanfile(struct Masscan *masscan, int arg_first, int arg_max, char *argv[]) { struct Output *out; @@ -420,7 +460,8 @@ convert_binary_files(struct Masscan *masscan, * Then arg_first=3 and arg_max=5. */ for (i=arg_first; itargets, &masscan->ports, + &masscan->banner_types); } output_destroy(out); diff --git a/src/in-binary.h b/src/in-binary.h index 40b71465..b8630eb1 100644 --- a/src/in-binary.h +++ b/src/in-binary.h @@ -1,8 +1,16 @@ #ifndef IN_BINARY_H #define IN_BINARY_H struct Masscan; + +/** + * Read that output of previous scans that were saved in the binary format + * (i.e. using the -oB parameter or the '--output-format binary' parameter). + * The intent is that the user can then re-output in another format like + * JSON or XML. + */ void -convert_binary_files(struct Masscan *masscan, int arg_first, int arg_max, char *argv[]); +read_binary_scanfile(struct Masscan *masscan, + int arg_first, int arg_max, char *argv[]); #endif diff --git a/src/main-conf.c b/src/main-conf.c index 5c14bc6c..29f6a8f1 100644 --- a/src/main-conf.c +++ b/src/main-conf.c @@ -21,6 +21,7 @@ #include "templ-port.h" #include "crypto-base64.h" #include "script.h" +#include "masscan-app.h" #include #include @@ -317,6 +318,7 @@ masscan_echo(struct Masscan *masscan, FILE *fp) case Output_Binary: fprintf(fp, "output-format = binary\n"); break; case Output_Grepable: fprintf(fp, "output-format = grepable\n"); break; case Output_JSON: fprintf(fp, "output-format = json\n"); break; + case Output_Certs: fprintf(fp, "output-format = certs\n"); break; case Output_None: fprintf(fp, "output-format = none\n"); break; case Output_Redis: fprintf(fp, "output-format = redis\n"); @@ -989,6 +991,21 @@ masscan_set_parameter(struct Masscan *masscan, if (masscan->op == 0) masscan->op = Operation_Scan; } + else if (EQUALS("banner-types", name) || EQUALS("banner-type", name) + || EQUALS("banner-apps", name) || EQUALS("banner-app", name) + ) { + enum ApplicationProtocol app; + + app = masscan_string_to_app(value); + + if (app) + rangelist_add_range(&masscan->banner_types, app, app); + else { + LOG(0, "FAIL: bad banner app: %s\n", value); + fprintf(stderr, "err\n"); + exit(1); + } + } else if (EQUALS("exclude-ports", name) || EQUALS("exclude-port", name)) { unsigned is_error = 0; rangelist_parse_ports(&masscan->exclude_port, value, &is_error); @@ -1360,6 +1377,7 @@ masscan_set_parameter(struct Masscan *masscan, else if (EQUALS("greppable", value)) x = Output_Grepable; else if (EQUALS("grepable", value)) x = Output_Grepable; else if (EQUALS("json", value)) x = Output_JSON; + else if (EQUALS("certs", value)) x = Output_Certs; else if (EQUALS("none", value)) x = Output_None; else if (EQUALS("redis", value)) x = Output_Redis; else { diff --git a/src/main.c b/src/main.c index 8b04e279..c4109c5d 100644 --- a/src/main.c +++ b/src/main.c @@ -1523,7 +1523,11 @@ int main(int argc, char *argv[]) for (stop=start+1; stop<(unsigned)argc && argv[stop][0] != '-'; stop++) ; - convert_binary_files(masscan, start, stop, argv); + /* + * read the binary files, and output them again depending upon + * the output parameters + */ + read_binary_scanfile(masscan, start, stop, argv); } break; diff --git a/src/masscan-app.c b/src/masscan-app.c index a6a97889..60ce943b 100644 --- a/src/masscan-app.c +++ b/src/masscan-app.c @@ -1,8 +1,10 @@ #include "masscan-app.h" #include "string_s.h" -/*************************************************************************** - ***************************************************************************/ +/****************************************************************************** + * When outputing results, we call this function to print out the type of + * banner that we've collected + ******************************************************************************/ const char * masscan_app_to_string(enum ApplicationProtocol proto) { @@ -35,3 +37,43 @@ masscan_app_to_string(enum ApplicationProtocol proto) return tmp; } } + +/****************************************************************************** + ******************************************************************************/ +enum ApplicationProtocol +masscan_string_to_app(const char *str) +{ + const static struct { + const char *name; + enum ApplicationProtocol value; + } list[] = { + {"ssh1", PROTO_SSH1}, + {"ssh2", PROTO_SSH2}, + {"ssh", PROTO_SSH2}, + {"http", PROTO_HTTP}, + {"ftp", PROTO_FTP1}, + {"dns-ver", PROTO_DNS_VERSIONBIND}, + {"snmp", PROTO_SNMP}, + {"ssh2", PROTO_SSH2}, + {"nbtstat", PROTO_NBTSTAT}, + {"ssl", PROTO_SSL3}, + {"pop", PROTO_POP3}, + {"imap", PROTO_IMAP4}, + {"x509", PROTO_X509_CERT}, + {"zeroaccess", PROTO_UDP_ZEROACCESS}, + {"title", PROTO_HTML_TITLE}, + {"html", PROTO_HTML_FULL}, + {"ntp", PROTO_NTP}, + {"vuln", PROTO_VULN}, + {"heartbleed", PROTO_HEARTBLEED}, + + {0,0} + }; + size_t i; + + for (i=0; list[i].name; i++) { + if (strcmp(str, list[i].name) == 0) + return list[i].value; + } + return 0; +} diff --git a/src/masscan-app.h b/src/masscan-app.h index 2902d147..23a04fee 100644 --- a/src/masscan-app.h +++ b/src/masscan-app.h @@ -32,5 +32,7 @@ enum ApplicationProtocol { const char * masscan_app_to_string(enum ApplicationProtocol proto); +enum ApplicationProtocol +masscan_string_to_app(const char *str); #endif diff --git a/src/masscan.h b/src/masscan.h index 45bd1898..fe1eca35 100644 --- a/src/masscan.h +++ b/src/masscan.h @@ -52,6 +52,7 @@ enum OutputFormat { Output_Grepable = 0x0080, /* -oG, "grepable" */ Output_Redis = 0x0100, Output_None = 0x0200, + Output_Certs = 0x0400, Output_All = 0xFFBF, /* not supported */ }; @@ -126,6 +127,11 @@ struct Masscan * range 64k-128k, thus, allowing us to scan both at the same time. */ struct RangeList ports; + + /** + * Only output these types of banners + */ + struct RangeList banner_types; /** * IPv4 addresses/ranges that are to be exluded from the scan. This takes diff --git a/src/out-certs.c b/src/out-certs.c new file mode 100644 index 00000000..7ee831b8 --- /dev/null +++ b/src/out-certs.c @@ -0,0 +1,69 @@ +#include "output.h" +#include "masscan-app.h" +#include "masscan-status.h" +#include "string_s.h" +#include + + +/**************************************************************************** + ****************************************************************************/ +static void +cert_out_open(struct Output *out, FILE *fp) +{ +} + + +/**************************************************************************** + ****************************************************************************/ +static void +cert_out_close(struct Output *out, FILE *fp) +{ + fprintf(fp, "{finished: 1}\n"); +} + +/****************************************************************************** + ******************************************************************************/ +static void +cert_out_status(struct Output *out, FILE *fp, time_t timestamp, int status, + unsigned ip, unsigned ip_proto, unsigned port, unsigned reason, unsigned ttl) +{ + +} + + +/****************************************************************************** + ******************************************************************************/ +static void +cert_out_banner(struct Output *out, FILE *fp, time_t timestamp, + unsigned ip, unsigned ip_proto, unsigned port, + enum ApplicationProtocol proto, + unsigned ttl, + const unsigned char *px, unsigned length) +{ + unsigned i; + if (length > 5 && memcmp(px, "cert:", 5) == 0) { + px += 5; + length -= 5; + } + + printf("-----BEGIN CERTIFICATE-----\n"); + for (i=0; i 72) + len = 72; + printf("%.*s\n", len, px+i); + } + printf("-----END CERTIFICATE-----\n"); +} + +/**************************************************************************** + ****************************************************************************/ +const struct OutputType certs_output = { + "cert", + 0, + cert_out_open, + cert_out_close, + cert_out_status, + cert_out_banner +}; + diff --git a/src/output.c b/src/output.c index b581b836..baee6226 100644 --- a/src/output.c +++ b/src/output.c @@ -413,6 +413,9 @@ output_create(const struct Masscan *masscan, unsigned thread_index) case Output_JSON: out->funcs = &json_output; break; + case Output_Certs: + out->funcs = &certs_output; + break; case Output_Binary: out->funcs = &binary_output; break; diff --git a/src/output.h b/src/output.h index b8d5e970..19f37a11 100644 --- a/src/output.h +++ b/src/output.h @@ -123,6 +123,7 @@ const char *normalize_string(const unsigned char *px, size_t length, extern const struct OutputType text_output; extern const struct OutputType xml_output; extern const struct OutputType json_output; +extern const struct OutputType certs_output; extern const struct OutputType binary_output; extern const struct OutputType null_output; extern const struct OutputType redis_output; diff --git a/src/proto-banout.c b/src/proto-banout.c index a5fc351d..ec07b26e 100644 --- a/src/proto-banout.c +++ b/src/proto-banout.c @@ -55,7 +55,7 @@ banout_find_proto(struct BannerOutput *banout, unsigned proto) const unsigned char * banout_string(const struct BannerOutput *banout, unsigned proto) { - while (banout && banout->protocol != proto) + while (banout && (banout->protocol&0xFFFF) != proto) banout = banout->next; if (banout) @@ -261,11 +261,15 @@ banout_append(struct BannerOutput *banout, unsigned proto, p = banout_expand(banout, p); } + + /* * Now that we are assured there is enough space, do the copy */ memcpy(p->banner + p->length, px, length); p->length = (unsigned)(p->length + length); + + } /***************************************************************************** diff --git a/src/proto-ssl.c b/src/proto-ssl.c index 43e70c2f..25dda9e6 100644 --- a/src/proto-ssl.c +++ b/src/proto-ssl.c @@ -359,7 +359,7 @@ parse_server_cert( remaining--; if (banner1->is_capture_cert) { banout_init_base64(&pstate->base64); - banout_append( banout, PROTO_X509_CERT, "cert:", 5); + //banout_append( banout, PROTO_X509_CERT, "cert:", 5); } { @@ -1011,15 +1011,15 @@ ssl_selftest(void) * Yahoo cert */ { - struct CertDecode state[1]; + struct CertDecode certstate[1]; - memset(state, 0, sizeof(state)); - x509_decode_init(state, yahoo_cert_size); + memset(certstate, 0, sizeof(certstate)); + x509_decode_init(certstate, yahoo_cert_size); banner1 = banner1_create(); banner1->is_capture_cert = 1; banout_init(banout1); - x509_decode(state, + x509_decode(certstate, yahoo_cert, yahoo_cert_size, banout1); @@ -1029,6 +1029,8 @@ ssl_selftest(void) printf("x.509 parser failure: google.com\n"); return 1; } + + banner1_destroy(banner1); banout_release(banout1); } @@ -1038,15 +1040,15 @@ ssl_selftest(void) * Google cert */ { - struct CertDecode state[1]; + struct CertDecode certstate[1]; - memset(state, 0, sizeof(state)); - x509_decode_init(state, google_cert_size); + memset(certstate, 0, sizeof(certstate)); + x509_decode_init(certstate, google_cert_size); banner1 = banner1_create(); banner1->is_capture_cert = 1; banout_init(banout1); - x509_decode(state, + x509_decode(certstate, google_cert, google_cert_size, banout1); @@ -1068,14 +1070,33 @@ ssl_selftest(void) banner1->is_capture_cert = 1; memset(state, 0, sizeof(state)); banout_init(banout1); - ssl_parse_record( banner1, - 0, - state, - ssl_test_case_3, - ssl_test_case_3_size, - banout1, - &more - ); + { + size_t i; + for (i=0; i 72) { + printf("%.*s\n", 72, foo); + foo += 72; + } else { + printf("%s\n", foo); + break; + } + + } + printf("-----END CERTIFICATE-----\n"); + } banner1_destroy(banner1); banout_release(banout1); diff --git a/xcode4/masscan.xcodeproj/project.pbxproj b/xcode4/masscan.xcodeproj/project.pbxproj index 3f63fa38..637c1c6e 100644 --- a/xcode4/masscan.xcodeproj/project.pbxproj +++ b/xcode4/masscan.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 115C0CAB18035BC5004E6CD7 /* proto-netbios.c in Sources */ = {isa = PBXBuildFile; fileRef = 115C0CA518035BC5004E6CD7 /* proto-netbios.c */; }; 115C0CAC18035BC5004E6CD7 /* proto-ssl.c in Sources */ = {isa = PBXBuildFile; fileRef = 115C0CA718035BC5004E6CD7 /* proto-ssl.c */; }; + 11623F6A191E0DB00075EEE6 /* out-certs.c in Sources */ = {isa = PBXBuildFile; fileRef = 11623F69191E0DB00075EEE6 /* out-certs.c */; }; 11A50CAE191C128F006D5802 /* out-json.c in Sources */ = {isa = PBXBuildFile; fileRef = 11A50CAD191C128F006D5802 /* out-json.c */; }; 11A773EB1881BFC700B135DE /* crypto-base64.c in Sources */ = {isa = PBXBuildFile; fileRef = 11A773E91881BFC700B135DE /* crypto-base64.c */; }; 11A868151816F3A7008E00B8 /* in-binary.c in Sources */ = {isa = PBXBuildFile; fileRef = 11A868081816F3A7008E00B8 /* in-binary.c */; }; @@ -101,6 +102,7 @@ 115C0CA818035BC5004E6CD7 /* proto-ssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "proto-ssl.h"; sourceTree = ""; }; 115C0CA918035BC5004E6CD7 /* templ-port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "templ-port.h"; sourceTree = ""; }; 115C0CAA18035BC5004E6CD7 /* unusedparm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unusedparm.h; sourceTree = ""; }; + 11623F69191E0DB00075EEE6 /* out-certs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "out-certs.c"; sourceTree = ""; }; 11A50CAD191C128F006D5802 /* out-json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "out-json.c"; sourceTree = ""; }; 11A773E91881BFC700B135DE /* crypto-base64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "crypto-base64.c"; sourceTree = ""; }; 11A773EA1881BFC700B135DE /* crypto-base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "crypto-base64.h"; sourceTree = ""; }; @@ -258,19 +260,9 @@ 11A9219217DBCC7E00DDFD32 /* src */ = { isa = PBXGroup; children = ( - 11BA295F18902CEE0064A759 /* out-grepable.c */, - 11B05EA918B964A9009C935E /* main-readrange.h */, - 11B05EA418B9649F009C935E /* crypto-blackrock2.c */, - 11B05EA518B9649F009C935E /* main-readrange.c */, - 11BA295E18902CEE0064A759 /* masscan-version.h */, - 11BA296018902CEE0064A759 /* proto-tcp-telnet.c */, - 11BA296118902CEE0064A759 /* proto-tcp-telnet.h */, - 11AC2F99188CE34A008CB623 /* proto-sctp.c */, - 11AC2F9A188CE34A008CB623 /* proto-sctp.h */, - 11E76DB21889BC5200061F45 /* pixie-backtrace.c */, - 11E76DB31889BC5200061F45 /* pixie-backtrace.h */, 11A773E91881BFC700B135DE /* crypto-base64.c */, 11A773EA1881BFC700B135DE /* crypto-base64.h */, + 11B05EA418B9649F009C935E /* crypto-blackrock2.c */, 11A9219317DBCC7E00DDFD32 /* event-timeout.c */, 11A9219417DBCC7E00DDFD32 /* event-timeout.h */, 11A868081816F3A7008E00B8 /* in-binary.c */, @@ -285,6 +277,8 @@ 11B039C017E506B400925E7E /* main-listscan.c */, 11AC80F517E0ED47001BCE3A /* main-ptrace.c */, 11AC80F817E0EDA7001BCE3A /* main-ptrace.h */, + 11B05EA518B9649F009C935E /* main-readrange.c */, + 11B05EA918B964A9009C935E /* main-readrange.h */, 11A8680B1816F3A7008E00B8 /* main-src.c */, 11A8680C1816F3A7008E00B8 /* main-src.h */, 11A9219B17DBCC7E00DDFD32 /* main-status.c */, @@ -295,17 +289,21 @@ 11A8680D1816F3A7008E00B8 /* masscan-app.c */, 11A8680E1816F3A7008E00B8 /* masscan-app.h */, 113AD3B818208A1900D5E067 /* masscan-status.h */, + 11BA295E18902CEE0064A759 /* masscan-version.h */, 11A921A017DBCC7E00DDFD32 /* masscan.h */, 11A921A117DBCC7E00DDFD32 /* out-binary.c */, + 11BA295F18902CEE0064A759 /* out-grepable.c */, + 11A50CAD191C128F006D5802 /* out-json.c */, 11A921A217DBCC7E00DDFD32 /* out-null.c */, 115C0CA318035BC5004E6CD7 /* out-record.h */, 11A8680F1816F3A7008E00B8 /* out-redis.c */, 11A921A317DBCC7E00DDFD32 /* out-text.c */, 11A921A417DBCC7E00DDFD32 /* out-xml.c */, - 11A50CAD191C128F006D5802 /* out-json.c */, 11A921A517DBCC7E00DDFD32 /* output.c */, 11A921A617DBCC7E00DDFD32 /* output.h */, 11A921A717DBCC7E00DDFD32 /* packet-queue.h */, + 11E76DB21889BC5200061F45 /* pixie-backtrace.c */, + 11E76DB31889BC5200061F45 /* pixie-backtrace.h */, 11A868101816F3A7008E00B8 /* pixie-file.c */, 11A868111816F3A7008E00B8 /* pixie-file.h */, 11A868121816F3A7008E00B8 /* pixie-sockets.h */, @@ -328,8 +326,12 @@ 11AC80EA17E0DAD4001BCE3A /* proto-icmp.h */, 115C0CA518035BC5004E6CD7 /* proto-netbios.c */, 115C0CA618035BC5004E6CD7 /* proto-netbios.h */, + 11BA296A189060220064A759 /* proto-ntp.c */, + 11BA296C189060590064A759 /* proto-ntp.h */, 11A921B017DBCC7E00DDFD32 /* proto-preprocess.c */, 11A921B117DBCC7E00DDFD32 /* proto-preprocess.h */, + 11AC2F99188CE34A008CB623 /* proto-sctp.c */, + 11AC2F9A188CE34A008CB623 /* proto-sctp.h */, 11B039C917EA092B00925E7E /* proto-snmp.c */, 11B039CA17EA092B00925E7E /* proto-snmp.h */, 11AC80EB17E0DAD4001BCE3A /* proto-ssh.c */, @@ -337,6 +339,8 @@ 11B22ED218641DCC00DA5438 /* proto-ssl-test.c */, 115C0CA718035BC5004E6CD7 /* proto-ssl.c */, 115C0CA818035BC5004E6CD7 /* proto-ssl.h */, + 11BA296018902CEE0064A759 /* proto-tcp-telnet.c */, + 11BA296118902CEE0064A759 /* proto-tcp-telnet.h */, 11A921B217DBCC7E00DDFD32 /* proto-tcp.c */, 11A921B317DBCC7E00DDFD32 /* proto-tcp.h */, 11B039C517E7834000925E7E /* proto-udp.c */, @@ -366,6 +370,9 @@ 11A921C617DBCC7E00DDFD32 /* rawsock.h */, 11A921C717DBCC7E00DDFD32 /* rte-ring.c */, 11A921C817DBCC7E00DDFD32 /* rte-ring.h */, + 11BA29681890560C0064A759 /* script-ntp-monlist.c */, + 11BA2966189055CA0064A759 /* script.c */, + 11BA296518904F3A0064A759 /* script.h */, 11A868131816F3A7008E00B8 /* siphash24.c */, 11A868141816F3A7008E00B8 /* siphash24.h */, 11A921C917DBCC7E00DDFD32 /* smack.h */, @@ -384,11 +391,7 @@ 115C0CAA18035BC5004E6CD7 /* unusedparm.h */, 11A921D317DBCC7E00DDFD32 /* xring.c */, 11A921D417DBCC7E00DDFD32 /* xring.h */, - 11BA296518904F3A0064A759 /* script.h */, - 11BA2966189055CA0064A759 /* script.c */, - 11BA29681890560C0064A759 /* script-ntp-monlist.c */, - 11BA296A189060220064A759 /* proto-ntp.c */, - 11BA296C189060590064A759 /* proto-ntp.h */, + 11623F69191E0DB00075EEE6 /* out-certs.c */, ); name = src; path = ../src; @@ -514,6 +517,7 @@ 11B05EA618B9649F009C935E /* crypto-blackrock2.c in Sources */, 11B05EA718B9649F009C935E /* main-readrange.c in Sources */, 11A50CAE191C128F006D5802 /* out-json.c in Sources */, + 11623F6A191E0DB00075EEE6 /* out-certs.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };