From: Michael Altizer (mialtize) Date: Tue, 28 Jan 2020 16:54:44 +0000 (+0000) Subject: Merge pull request #1939 in SNORT/snort3 from ~SVLASIUK/snort3:multiple_ftp_server_in... X-Git-Tag: 3.0.0-268~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=19f413a8db2f671f02feae145ffb36124a904e93;p=thirdparty%2Fsnort3.git Merge pull request #1939 in SNORT/snort3 from ~SVLASIUK/snort3:multiple_ftp_server_in_output to master Squashed commit of the following: commit 29b6f44f49d8d15a30d0fe8c37e43ff80fbb1630 Author: Serhii Vlasiuk Date: Mon Jan 13 12:21:27 2020 +0200 inspectors: print label for type and alias in inspector manager. Remove printing module name in inspectors ::show() method. --- diff --git a/src/file_api/file_flows.cc b/src/file_api/file_flows.cc index 205a38c72..51c58f72b 100644 --- a/src/file_api/file_flows.cc +++ b/src/file_api/file_flows.cc @@ -379,7 +379,6 @@ void FileInspect::show(SnortConfig*) if (!config) return; - LogMessage("%s\n", FILE_ID_NAME); LogMessage(" capture_memcap: %zu MB\n", config->capture_memcap); LogMessage(" capture_max_size: %zu bytes\n", config->capture_max_size); LogMessage(" capture_min_size: %zu bytes\n", config->capture_min_size); diff --git a/src/file_api/file_log.cc b/src/file_api/file_log.cc index 665f1ebb1..2abdef092 100644 --- a/src/file_api/file_log.cc +++ b/src/file_api/file_log.cc @@ -221,7 +221,6 @@ private: void FileLog::show(SnortConfig*) { - LogMessage("%s config:\n", s_name); LogMessage(" Log system time: %s\n", config.log_sys_time ? "true" : "false"); LogMessage(" Log packet time: %s\n", config.log_pkt_time ? "true" : "false"); } diff --git a/src/managers/inspector_manager.cc b/src/managers/inspector_manager.cc index ec700d209..194c92c53 100644 --- a/src/managers/inspector_manager.cc +++ b/src/managers/inspector_manager.cc @@ -954,7 +954,15 @@ void InspectorManager::print_config(SnortConfig* sc) return; for ( auto* p : pi->framework_policy->ilist ) + { + std::string inspector_name(p->pp_class.api.base.name); + if ( !p->name.empty() ) + inspector_name += " (" + p->name + "):"; + else + inspector_name += ":"; + LogLabel(inspector_name.c_str()); p->handler->show(sc); + } } //------------------------------------------------------------------------- diff --git a/src/managers/module_manager.cc b/src/managers/module_manager.cc index 73337d885..665be3ed3 100644 --- a/src/managers/module_manager.cc +++ b/src/managers/module_manager.cc @@ -754,13 +754,17 @@ SO_PUBLIC bool open_table(const char* s, int idx) } } - if ( s_current != key ) + string unique_key = key; + if ( !s_name.empty() ) + unique_key = s_name; + + if ( s_current != unique_key ) { if ( fqn != orig ) LogMessage("\t%s (%s)\n", key.c_str(), orig); else LogMessage("\t%s\n", key.c_str()); - s_current = key; + s_current = unique_key; } if ( !begin(m, p, s, idx, 0) ) diff --git a/src/network_inspectors/appid/appid_inspector.cc b/src/network_inspectors/appid/appid_inspector.cc index 116cb7a9e..8f78db6c5 100644 --- a/src/network_inspectors/appid/appid_inspector.cc +++ b/src/network_inspectors/appid/appid_inspector.cc @@ -129,8 +129,6 @@ bool AppIdInspector::configure(SnortConfig* sc) void AppIdInspector::show(SnortConfig*) { - LogMessage("%s\n", MOD_NAME); - LogMessage(" Detector Path: %s\n", config->app_detector_dir); LogMessage(" appStats Logging: %s\n", config->stats_logging_enabled ? "enabled" : "disabled"); diff --git a/src/network_inspectors/arp_spoof/arp_spoof.cc b/src/network_inspectors/arp_spoof/arp_spoof.cc index 3b3295de6..2d941c91b 100644 --- a/src/network_inspectors/arp_spoof/arp_spoof.cc +++ b/src/network_inspectors/arp_spoof/arp_spoof.cc @@ -113,7 +113,6 @@ public: ArpSpoof(ArpSpoofModule*); ~ArpSpoof() override; - void show(SnortConfig*) override; void eval(Packet*) override; private: @@ -130,12 +129,6 @@ ArpSpoof::~ArpSpoof () delete config; } -void ArpSpoof::show(SnortConfig*) -{ - LogMessage("arpspoof configured\n"); - -} - void ArpSpoof::eval(Packet* p) { Profile profile(arpPerfStats); diff --git a/src/network_inspectors/binder/binder.cc b/src/network_inspectors/binder/binder.cc index f28b563f7..d408a309c 100644 --- a/src/network_inspectors/binder/binder.cc +++ b/src/network_inspectors/binder/binder.cc @@ -633,9 +633,6 @@ public: Binder(vector&); ~Binder() override; - void show(SnortConfig*) override - { LogMessage("Binder\n"); } - void remove_inspector_binding(SnortConfig*, const char*) override; bool configure(SnortConfig*) override; diff --git a/src/network_inspectors/normalize/normalize.cc b/src/network_inspectors/normalize/normalize.cc index e1c2a1f18..da28a2eef 100644 --- a/src/network_inspectors/normalize/normalize.cc +++ b/src/network_inspectors/normalize/normalize.cc @@ -232,7 +232,6 @@ NormMode Normalize_GetMode(NormFlags nf) void Normalizer::show(SnortConfig* sc) { - LogMessage("Normalizer config:\n"); Print_IP4(sc, &config); Print_IP6(sc, &config); Print_ICMP4(&config); diff --git a/src/network_inspectors/perf_monitor/perf_monitor.cc b/src/network_inspectors/perf_monitor/perf_monitor.cc index df2425a16..e3ed39fd9 100644 --- a/src/network_inspectors/perf_monitor/perf_monitor.cc +++ b/src/network_inspectors/perf_monitor/perf_monitor.cc @@ -148,7 +148,6 @@ PerfMonitor::PerfMonitor(PerfConfig* pcfg) : config(pcfg) void PerfMonitor::show(SnortConfig*) { - LogMessage("PerfMonitor config:\n"); LogMessage(" Sample Time: %d seconds\n", config->sample_interval); LogMessage(" Packet Count: %d\n", config->pkt_cnt); LogMessage(" Max File Size: " STDu64 "\n", config->max_file_size); diff --git a/src/network_inspectors/port_scan/port_scan.cc b/src/network_inspectors/port_scan/port_scan.cc index e9b47e59e..75913d303 100644 --- a/src/network_inspectors/port_scan/port_scan.cc +++ b/src/network_inspectors/port_scan/port_scan.cc @@ -332,7 +332,6 @@ static void PrintPortscanConf(PortscanConfig* config) { char buf[STD_BUF + 1]; - LogMessage("Portscan Detection Config:\n"); SnortSnprintf(buf, sizeof(buf), " Detect Protocols: "); if ( config->detect_scans & PS_PROTO_TCP ) diff --git a/src/network_inspectors/reputation/reputation_inspect.cc b/src/network_inspectors/reputation/reputation_inspect.cc index fdb671d30..d33297691 100644 --- a/src/network_inspectors/reputation/reputation_inspect.cc +++ b/src/network_inspectors/reputation/reputation_inspect.cc @@ -89,7 +89,6 @@ static void print_reputation_conf(ReputationConfig* config) { assert(config); - LogMessage("%s\n", REPUTATION_NAME); print_iplist_stats(config); LogMessage(" Memcap: %d %s \n", diff --git a/src/network_inspectors/rna/rna_inspector.cc b/src/network_inspectors/rna/rna_inspector.cc index 2f3206a2b..f3a686320 100644 --- a/src/network_inspectors/rna/rna_inspector.cc +++ b/src/network_inspectors/rna/rna_inspector.cc @@ -102,8 +102,6 @@ void RnaInspector::eval(Packet* p) void RnaInspector::show(SnortConfig*) { - LogMessage("RNA Configuration\n"); - if (mod_conf) { if (!mod_conf->rna_conf_path.empty()) diff --git a/src/service_inspectors/back_orifice/back_orifice.cc b/src/service_inspectors/back_orifice/back_orifice.cc index 478cb7779..9594b8a87 100644 --- a/src/service_inspectors/back_orifice/back_orifice.cc +++ b/src/service_inspectors/back_orifice/back_orifice.cc @@ -429,16 +429,10 @@ class BackOrifice : public Inspector { public: BackOrifice() = default; - - void show(SnortConfig*) override; + void eval(Packet*) override; }; -void BackOrifice::show(SnortConfig*) -{ - LogMessage("%s\n", s_name); -} - void BackOrifice::eval(Packet* p) { Profile profile(boPerfStats); diff --git a/src/service_inspectors/cip/cip.cc b/src/service_inspectors/cip/cip.cc index 235242366..70c46a189 100644 --- a/src/service_inspectors/cip/cip.cc +++ b/src/service_inspectors/cip/cip.cc @@ -115,7 +115,6 @@ static void print_cip_conf(CipProtoConf* config) { if (config == nullptr) return; - LogMessage("CIP config: \n"); LogMessage(" Embedded Enabled: %s\n", config->embedded_cip_enabled ? "ENABLED" : "DISABLED"); if (config->embedded_cip_enabled) diff --git a/src/service_inspectors/dce_rpc/dce_smb_module.cc b/src/service_inspectors/dce_rpc/dce_smb_module.cc index ae8e28067..edb0cdd06 100644 --- a/src/service_inspectors/dce_rpc/dce_smb_module.cc +++ b/src/service_inspectors/dce_rpc/dce_smb_module.cc @@ -383,8 +383,6 @@ void Dce2SmbModule::get_data(dce2SmbProtoConf& dce2_smb_config) void print_dce2_smb_conf(dce2SmbProtoConf& config) { - LogMessage("DCE SMB config: \n"); - print_dce2_co_config(config.common); LogMessage(" SMB fingerprint policy : %s\n", dce2SmbFingerprintPolicyStrings[config.smb_fingerprint_policy]); diff --git a/src/service_inspectors/dce_rpc/dce_tcp_module.cc b/src/service_inspectors/dce_rpc/dce_tcp_module.cc index e9da1877a..1598b4a1e 100644 --- a/src/service_inspectors/dce_rpc/dce_tcp_module.cc +++ b/src/service_inspectors/dce_rpc/dce_tcp_module.cc @@ -157,7 +157,6 @@ void Dce2TcpModule::get_data(dce2TcpProtoConf& dce2_tcp_config) void print_dce2_tcp_conf(dce2TcpProtoConf& config) { - LogMessage("DCE TCP config: \n"); print_dce2_co_config(config.common); } diff --git a/src/service_inspectors/dce_rpc/dce_udp_module.cc b/src/service_inspectors/dce_rpc/dce_udp_module.cc index b4b915cbd..fb31dfbd9 100644 --- a/src/service_inspectors/dce_rpc/dce_udp_module.cc +++ b/src/service_inspectors/dce_rpc/dce_udp_module.cc @@ -123,7 +123,6 @@ void Dce2UdpModule::get_data(dce2UdpProtoConf& dce2_udp_config) void print_dce2_udp_conf(dce2UdpProtoConf& config) { - LogMessage("DCE UDP config: \n"); print_dce2_common_config(config.common); } diff --git a/src/service_inspectors/dnp3/dnp3_module.cc b/src/service_inspectors/dnp3/dnp3_module.cc index 754c6eec3..63e1f9d09 100644 --- a/src/service_inspectors/dnp3/dnp3_module.cc +++ b/src/service_inspectors/dnp3/dnp3_module.cc @@ -104,7 +104,6 @@ void Dnp3Module::get_data(dnp3ProtoConf& dnp3_config) void print_dnp3_conf(const dnp3ProtoConf& config) { - LogMessage("DNP3 config: \n"); LogMessage(" Check CRC: %s\n", config.check_crc ? "ENABLED" : "DISABLED"); diff --git a/src/service_inspectors/dns/dns.cc b/src/service_inspectors/dns/dns.cc index 1d5bf4cd1..2fe9d657e 100644 --- a/src/service_inspectors/dns/dns.cc +++ b/src/service_inspectors/dns/dns.cc @@ -1011,18 +1011,12 @@ class Dns : public Inspector public: Dns(DnsModule*); - void show(SnortConfig*) override; void eval(Packet*) override; }; Dns::Dns(DnsModule*) { } -void Dns::show(SnortConfig*) -{ - LogMessage("DNS\n"); -} - void Dns::eval(Packet* p) { // precondition - what we registered for diff --git a/src/service_inspectors/ftp_telnet/ftp.cc b/src/service_inspectors/ftp_telnet/ftp.cc index 035021022..47de077c4 100644 --- a/src/service_inspectors/ftp_telnet/ftp.cc +++ b/src/service_inspectors/ftp_telnet/ftp.cc @@ -201,10 +201,9 @@ public: FTP_SERVER_PROTO_CONF* ftp_server; }; -FtpServer::FtpServer(FTP_SERVER_PROTO_CONF* server) -{ - ftp_server = server; -} +FtpServer::FtpServer(FTP_SERVER_PROTO_CONF* server) : + ftp_server(server) +{} FtpServer::~FtpServer () { diff --git a/src/service_inspectors/ftp_telnet/ftp_print.cc b/src/service_inspectors/ftp_telnet/ftp_print.cc index d58fe1d94..834d2f3ea 100644 --- a/src/service_inspectors/ftp_telnet/ftp_print.cc +++ b/src/service_inspectors/ftp_telnet/ftp_print.cc @@ -237,8 +237,6 @@ int PrintFTPServerConf(FTP_SERVER_PROTO_CONF* ServerConf) return FTPP_INVALID_ARG; } - LogMessage(FTP_SERVER_NAME ":\n"); - PrintConfOpt(ServerConf->telnet_cmds, "Check for Telnet Cmds"); PrintConfOpt(ServerConf->ignore_telnet_erase_cmds, "Ignore Telnet Cmd Operations"); LogMessage(" Ignore open data channels: %s\n", diff --git a/src/service_inspectors/ftp_telnet/telnet.cc b/src/service_inspectors/ftp_telnet/telnet.cc index 7f49b84ad..6efc8bdc4 100644 --- a/src/service_inspectors/ftp_telnet/telnet.cc +++ b/src/service_inspectors/ftp_telnet/telnet.cc @@ -193,7 +193,6 @@ static int PrintTelnetConf(TELNET_PROTO_CONF* TelnetConf) return FTPP_INVALID_ARG; } - LogMessage(" TELNET CONFIG:\n"); LogMessage(" Are You There Threshold: %d\n", TelnetConf->ayt_threshold); LogMessage(" Normalize: %s\n", TelnetConf->normalize ? "YES" : "NO"); diff --git a/src/service_inspectors/http2_inspect/http2_inspect.h b/src/service_inspectors/http2_inspect/http2_inspect.h index 8249654f5..cc5d3b7ed 100644 --- a/src/service_inspectors/http2_inspect/http2_inspect.h +++ b/src/service_inspectors/http2_inspect/http2_inspect.h @@ -45,7 +45,6 @@ public: bool get_fp_buf(snort::InspectionBuffer::Type ibt, snort::Packet* p, snort::InspectionBuffer& b) override; bool configure(snort::SnortConfig*) override; - void show(snort::SnortConfig*) override { snort::LogMessage("Http2Inspect\n"); } void eval(snort::Packet* p) override; void clear(snort::Packet* p) override; Http2StreamSplitter* get_splitter(bool is_client_to_server) override diff --git a/src/service_inspectors/http_inspect/http_inspect.cc b/src/service_inspectors/http_inspect/http_inspect.cc index 5892bb6c4..7317a1d40 100644 --- a/src/service_inspectors/http_inspect/http_inspect.cc +++ b/src/service_inspectors/http_inspect/http_inspect.cc @@ -92,7 +92,6 @@ bool HttpInspect::configure(SnortConfig* ) void HttpInspect::show(snort::SnortConfig*) { assert(params); - LogMessage("http_inspect\n"); if ( params->request_depth == -1 ) LogMessage(" request_depth: " "%s" "\n", "unlimited"); diff --git a/src/service_inspectors/imap/imap.cc b/src/service_inspectors/imap/imap.cc index 756fe6736..144f65815 100644 --- a/src/service_inspectors/imap/imap.cc +++ b/src/service_inspectors/imap/imap.cc @@ -266,8 +266,6 @@ static void PrintImapConf(IMAP_PROTO_CONF* config) if (config == nullptr) return; - LogMessage("IMAP config: \n"); - config->decode_conf.print_decode_conf(); LogMessage("\n"); diff --git a/src/service_inspectors/pop/pop.cc b/src/service_inspectors/pop/pop.cc index 17f76164d..c108f731a 100644 --- a/src/service_inspectors/pop/pop.cc +++ b/src/service_inspectors/pop/pop.cc @@ -225,8 +225,6 @@ static void PrintPopConf(POP_PROTO_CONF* config) if (config == nullptr) return; - LogMessage("POP config: \n"); - config->decode_conf.print_decode_conf(); LogMessage("\n"); diff --git a/src/service_inspectors/rpc_decode/rpc_decode.cc b/src/service_inspectors/rpc_decode/rpc_decode.cc index 80bf8ce5a..976d07176 100644 --- a/src/service_inspectors/rpc_decode/rpc_decode.cc +++ b/src/service_inspectors/rpc_decode/rpc_decode.cc @@ -803,8 +803,6 @@ class RpcDecode : public Inspector public: RpcDecode(RpcDecodeModule*); - void show(SnortConfig*) override; - void eval(Packet*) override; void clear(Packet*) override; @@ -821,11 +819,6 @@ RpcDecode::RpcDecode(RpcDecodeModule*) { } -void RpcDecode::show(SnortConfig*) -{ - LogMessage("rpc_decode\n"); -} - /* * Purpose: Inspects the packet's payload for fragment records and * converts them into one unfragmented record. diff --git a/src/service_inspectors/sip/sip.cc b/src/service_inspectors/sip/sip.cc index 3b8c8e0fc..d4449adb0 100644 --- a/src/service_inspectors/sip/sip.cc +++ b/src/service_inspectors/sip/sip.cc @@ -86,7 +86,6 @@ static void PrintSipConf(SIP_PROTO_CONF* config) SIPMethodNode* method; if (config == nullptr) return; - LogMessage("SIP config: \n"); LogMessage(" Max number of dialogs in a session: %d %s \n", config->maxNumDialogsInSession, config->maxNumDialogsInSession diff --git a/src/service_inspectors/smtp/smtp.cc b/src/service_inspectors/smtp/smtp.cc index 721e4c351..5ece42403 100644 --- a/src/service_inspectors/smtp/smtp.cc +++ b/src/service_inspectors/smtp/smtp.cc @@ -378,7 +378,6 @@ static void SMTP_PrintConfig(SMTP_PROTO_CONF* config) char buf[8192]; int alert_count = 0; - LogMessage("SMTP Config:\n"); snprintf(buf, sizeof(buf) - 1, " Normalize: "); if (config->normalize == NORMALIZE_ALL) diff --git a/src/service_inspectors/ssh/ssh.cc b/src/service_inspectors/ssh/ssh.cc index bd8907dcf..b258e740e 100644 --- a/src/service_inspectors/ssh/ssh.cc +++ b/src/service_inspectors/ssh/ssh.cc @@ -85,8 +85,6 @@ static void PrintSshConf(SSH_PROTO_CONF* config) if ( !config ) return; - LogMessage("SSH config: \n"); - LogMessage(" Max Encrypted Packets: %d\n", config->MaxEncryptedPackets); LogMessage(" Max Server Version String Length: %d\n", config->MaxServerVersionLen); LogMessage(" MaxClientBytes: %d\n", config->MaxClientBytes); diff --git a/src/service_inspectors/ssl/ssl_inspector.cc b/src/service_inspectors/ssl/ssl_inspector.cc index 33bb8ff49..f989a1a40 100644 --- a/src/service_inspectors/ssl/ssl_inspector.cc +++ b/src/service_inspectors/ssl/ssl_inspector.cc @@ -103,7 +103,6 @@ static void PrintSslConf(SSL_PROTO_CONF* config) { if (config == nullptr) return; - LogMessage("SSL config:\n"); if ( config->trustservers ) { LogMessage(" Server side data is trusted\n"); diff --git a/src/service_inspectors/wizard/wizard.cc b/src/service_inspectors/wizard/wizard.cc index 6039be1a1..790b4add2 100644 --- a/src/service_inspectors/wizard/wizard.cc +++ b/src/service_inspectors/wizard/wizard.cc @@ -117,9 +117,6 @@ public: Wizard(WizardModule*); ~Wizard() override; - void show(SnortConfig*) override - { LogMessage("Wizard\n"); } - void eval(Packet*) override; StreamSplitter* get_splitter(bool) override; diff --git a/src/stream/base/stream_base.cc b/src/stream/base/stream_base.cc index eda0ef0f5..3d5bc8bc8 100644 --- a/src/stream/base/stream_base.cc +++ b/src/stream/base/stream_base.cc @@ -203,7 +203,6 @@ void StreamBase::tterm() void StreamBase::show(SnortConfig*) { - LogMessage("Stream Base config:\n"); LogMessage(" Max flows: %d\n", config.flow_cache_cfg.max_flows); LogMessage(" Pruning timeout: %d\n", config.flow_cache_cfg.pruning_timeout); } diff --git a/src/stream/icmp/stream_icmp.cc b/src/stream/icmp/stream_icmp.cc index 00523075c..21f3aa7e8 100644 --- a/src/stream/icmp/stream_icmp.cc +++ b/src/stream/icmp/stream_icmp.cc @@ -42,7 +42,6 @@ StreamIcmpConfig::StreamIcmpConfig() static void icmp_show(StreamIcmpConfig* pc) { - LogMessage("Stream ICMP config:\n"); LogMessage(" Timeout: %d seconds\n", pc->session_timeout); } diff --git a/src/stream/ip/ip_defrag.cc b/src/stream/ip/ip_defrag.cc index 4673c607d..df7deb4b6 100644 --- a/src/stream/ip/ip_defrag.cc +++ b/src/stream/ip/ip_defrag.cc @@ -185,7 +185,6 @@ static const char* const frag_policy_names[] = static void FragPrintEngineConfig(FragEngine* engine) { - LogMessage("Defrag engine config:\n"); LogMessage(" engine-based policy: %s\n", frag_policy_names[engine->frag_policy]); LogMessage(" Fragment timeout: %d seconds\n", diff --git a/src/stream/ip/stream_ip.cc b/src/stream/ip/stream_ip.cc index 1e0ebe056..74597a99c 100644 --- a/src/stream/ip/stream_ip.cc +++ b/src/stream/ip/stream_ip.cc @@ -61,7 +61,6 @@ StreamIpConfig::StreamIpConfig() static void ip_show(StreamIpConfig* pc) { - LogMessage("Stream IP config:\n"); LogMessage(" Timeout: %d seconds\n", pc->session_timeout); } diff --git a/src/stream/tcp/tcp_stream_config.cc b/src/stream/tcp/tcp_stream_config.cc index 2d2e0caa4..213f2dea0 100644 --- a/src/stream/tcp/tcp_stream_config.cc +++ b/src/stream/tcp/tcp_stream_config.cc @@ -42,7 +42,6 @@ void TcpStreamConfig::show_config() const void TcpStreamConfig::show_config(const TcpStreamConfig* config) { - LogMessage("Stream TCP Policy config:\n"); LogMessage(" Reassembly Policy: %s\n", reassembly_policy_names[ static_cast( config->reassembly_policy ) ]); LogMessage(" Timeout: %d seconds\n", config->session_timeout); diff --git a/src/stream/udp/stream_udp.cc b/src/stream/udp/stream_udp.cc index b2867b7b4..747c2a77b 100644 --- a/src/stream/udp/stream_udp.cc +++ b/src/stream/udp/stream_udp.cc @@ -41,7 +41,6 @@ StreamUdpConfig::StreamUdpConfig() static void udp_show(StreamUdpConfig* pc) { - LogMessage("Stream UDP config:\n"); LogMessage(" Timeout: %d seconds\n", pc->session_timeout); #ifdef REG_TEST diff --git a/src/stream/user/stream_user.cc b/src/stream/user/stream_user.cc index d631e1508..94c4f6a73 100644 --- a/src/stream/user/stream_user.cc +++ b/src/stream/user/stream_user.cc @@ -41,7 +41,6 @@ StreamUserConfig::StreamUserConfig() static void user_show (StreamUserConfig* pc) { - LogMessage("Stream user config:\n"); LogMessage(" Timeout: %d seconds\n", pc->session_timeout); }