From ad5f04f13d9d9580045d6ddf8f3cef27d184bf19 Mon Sep 17 00:00:00 2001 From: Chris Hofstaedtler Date: Tue, 2 Aug 2022 15:49:13 +0200 Subject: [PATCH] pdns/auth-main.*: format-code --- pdns/auth-main.cc | 1189 +++++++++++++++++++++++---------------------- pdns/auth-main.hh | 6 +- 2 files changed, 606 insertions(+), 589 deletions(-) diff --git a/pdns/auth-main.cc b/pdns/auth-main.cc index a76d2f6023..932f4e9cfe 100644 --- a/pdns/auth-main.cc +++ b/pdns/auth-main.cc @@ -90,17 +90,16 @@ time_t s_starttime; -string s_programname="pdns"; // used in packethandler.cc - -const char *funnytext= -"*****************************************************************************\n"\ -"Ok, you just ran pdns_server through 'strings' hoping to find funny messages.\n"\ -"Well, you found one. \n"\ -"Two ions are flying through their particle accelerator, says the one to the\n" -"other 'I think I've lost an electron!' \n"\ -"So the other one says, 'Are you sure?'. 'YEAH! I'M POSITIVE!'\n"\ -" the pdns crew - pdns@powerdns.com\n" -"*****************************************************************************\n"; +string s_programname = "pdns"; // used in packethandler.cc + +const char* funnytext = "*****************************************************************************\n" + "Ok, you just ran pdns_server through 'strings' hoping to find funny messages.\n" + "Well, you found one. \n" + "Two ions are flying through their particle accelerator, says the one to the\n" + "other 'I think I've lost an electron!' \n" + "So the other one says, 'Are you sure?'. 'YEAH! I'M POSITIVE!'\n" + " the pdns crew - pdns@powerdns.com\n" + "*****************************************************************************\n"; bool g_anyToTcp; bool g_8bitDNS; @@ -110,10 +109,10 @@ int g_luaRecordExecLimit; time_t g_luaHealthChecksInterval{5}; time_t g_luaHealthChecksExpireDelay{3600}; #endif -typedef Distributor DNSDistributor; +typedef Distributor DNSDistributor; ArgvMap theArg; -StatBag S; //!< Statistics are gathered across PDNS via the StatBag class S +StatBag S; //!< Statistics are gathered across PDNS via the StatBag class S AuthPacketCache PC; //!< This is the main PacketCache, shared across all threads AuthQueryCache QC; AuthZoneCache g_zoneCache; @@ -124,210 +123,212 @@ shared_ptr N; double avg_latency{0.0}, receive_latency{0.0}, cache_latency{0.0}, backend_latency{0.0}, send_latency{0.0}; unique_ptr TN; static vector g_distributors; -vector > g_udpReceivers; +vector> g_udpReceivers; NetmaskGroup g_proxyProtocolACL; size_t g_proxyProtocolMaximumSize; void mainthread(); -ArgvMap &arg() +ArgvMap& arg() { return theArg; } void declareArguments() { - ::arg().set("config-dir","Location of configuration directory (pdns.conf)")=SYSCONFDIR; - ::arg().set("config-name","Name of this virtual configuration - will rename the binary image")=""; - ::arg().set("socket-dir",string("Where the controlsocket will live, ")+LOCALSTATEDIR+"/pdns when unset and not chrooted" + ::arg().set("config-dir", "Location of configuration directory (pdns.conf)") = SYSCONFDIR; + ::arg().set("config-name", "Name of this virtual configuration - will rename the binary image") = ""; + ::arg().set("socket-dir", string("Where the controlsocket will live, ") + LOCALSTATEDIR + "/pdns when unset and not chrooted" #ifdef HAVE_SYSTEMD - + ". Set to the RUNTIME_DIRECTORY environment variable when that variable has a value (e.g. under systemd).")=""; - auto runtimeDir = getenv("RUNTIME_DIRECTORY"); - if (runtimeDir != nullptr) { - ::arg().set("socket-dir") = runtimeDir; - } + + ". Set to the RUNTIME_DIRECTORY environment variable when that variable has a value (e.g. under systemd).") + = ""; + auto runtimeDir = getenv("RUNTIME_DIRECTORY"); + if (runtimeDir != nullptr) { + ::arg().set("socket-dir") = runtimeDir; + } #else - )=""; + ) + = ""; #endif - ::arg().set("module-dir","Default directory for modules")=PKGLIBDIR; - ::arg().set("chroot","If set, chroot to this directory for more security")=""; - ::arg().set("logging-facility","Log under a specific facility")=""; - ::arg().set("daemon","Operate as a daemon")="no"; - - ::arg().set("local-port","The port on which we listen")="53"; - ::arg().setSwitch("dnsupdate","Enable/Disable DNS update (RFC2136) support. Default is no.")="no"; - ::arg().setSwitch("write-pid","Write a PID file")="yes"; - ::arg().set("allow-dnsupdate-from","A global setting to allow DNS updates from these IP ranges.")="127.0.0.0/8,::1"; - ::arg().set("proxy-protocol-from", "A Proxy Protocol header is only allowed from these subnets, and is mandatory then too.")=""; - ::arg().set("proxy-protocol-maximum-size", "The maximum size of a proxy protocol payload, including the TLV values")="512"; + ::arg().set("module-dir", "Default directory for modules") = PKGLIBDIR; + ::arg().set("chroot", "If set, chroot to this directory for more security") = ""; + ::arg().set("logging-facility", "Log under a specific facility") = ""; + ::arg().set("daemon", "Operate as a daemon") = "no"; + + ::arg().set("local-port", "The port on which we listen") = "53"; + ::arg().setSwitch("dnsupdate", "Enable/Disable DNS update (RFC2136) support. Default is no.") = "no"; + ::arg().setSwitch("write-pid", "Write a PID file") = "yes"; + ::arg().set("allow-dnsupdate-from", "A global setting to allow DNS updates from these IP ranges.") = "127.0.0.0/8,::1"; + ::arg().set("proxy-protocol-from", "A Proxy Protocol header is only allowed from these subnets, and is mandatory then too.") = ""; + ::arg().set("proxy-protocol-maximum-size", "The maximum size of a proxy protocol payload, including the TLV values") = "512"; ::arg().setSwitch("send-signed-notify", "Send TSIG secured NOTIFY if TSIG key is configured for a zone") = "yes"; - ::arg().set("allow-unsigned-notify", "Allow unsigned notifications for TSIG secured zones") = "yes"; //FIXME: change to 'no' later - ::arg().set("allow-unsigned-supermaster", "Allow supermasters to create zones without TSIG signed NOTIFY")="yes"; - ::arg().set("allow-unsigned-autoprimary", "Allow autoprimaries to create zones without TSIG signed NOTIFY")="yes"; + ::arg().set("allow-unsigned-notify", "Allow unsigned notifications for TSIG secured zones") = "yes"; // FIXME: change to 'no' later + ::arg().set("allow-unsigned-supermaster", "Allow supermasters to create zones without TSIG signed NOTIFY") = "yes"; + ::arg().set("allow-unsigned-autoprimary", "Allow autoprimaries to create zones without TSIG signed NOTIFY") = "yes"; ::arg().setSwitch("forward-dnsupdate", "A global setting to allow DNS update packages that are for a Slave zone, to be forwarded to the master.") = "yes"; - ::arg().setSwitch("log-dns-details","If PDNS should log DNS non-erroneous details")="no"; - ::arg().setSwitch("log-dns-queries","If PDNS should log all incoming DNS queries")="no"; - ::arg().set("local-address","Local IP addresses to which we bind")="0.0.0.0, ::"; - ::arg().setSwitch("local-address-nonexist-fail","Fail to start if one or more of the local-address's do not exist on this server")="yes"; - ::arg().setSwitch("non-local-bind", "Enable binding to non-local addresses by using FREEBIND / BINDANY socket options")="no"; - ::arg().setSwitch("reuseport","Enable higher performance on compliant kernels by using SO_REUSEPORT allowing each receiver thread to open its own socket")="no"; - ::arg().set("query-local-address","Source IP addresses for sending queries")="0.0.0.0 ::"; - ::arg().set("overload-queue-length","Maximum queuelength moving to packetcache only")="0"; - ::arg().set("max-queue-length","Maximum queuelength before considering situation lost")="5000"; - - ::arg().set("retrieval-threads", "Number of AXFR-retrieval threads for slave operation")="2"; - ::arg().setSwitch("api", "Enable/disable the REST API (including HTTP listener)")="no"; - ::arg().set("api-key", "Static pre-shared authentication key for access to the REST API")=""; - ::arg().setSwitch("default-api-rectify","Default API-RECTIFY value for zones")="yes"; - ::arg().setSwitch("dname-processing", "If we should support DNAME records")="no"; - - ::arg().setCmd("help","Provide a helpful message"); - ::arg().setCmd("version","Output version and compilation date"); - ::arg().setCmd("config","Provide configuration file on standard output"); - ::arg().setCmd("list-modules","Lists all modules available"); - ::arg().setCmd("no-config","Don't parse configuration file"); - - ::arg().set("version-string","PowerDNS version in packets - full, anonymous, powerdns or custom")="full"; - ::arg().set("control-console","Debugging switch - don't use")="no"; // but I know you will! - ::arg().set("loglevel","Amount of logging. Higher is more. Do not set below 3")="4"; - ::arg().set("disable-syslog","Disable logging to syslog, useful when running inside a supervisor that logs stdout")="no"; - ::arg().set("log-timestamp","Print timestamps in log lines")="yes"; - ::arg().set("distributor-threads","Default number of Distributor (backend) threads to start")="3"; - ::arg().set("signing-threads","Default number of signer threads to start")="3"; - ::arg().set("receiver-threads","Default number of receiver threads to start")="1"; - ::arg().set("queue-limit","Maximum number of milliseconds to queue a query")="1500"; - ::arg().set("resolver","Use this resolver for ALIAS and the internal stub resolver")="no"; - ::arg().set("udp-truncation-threshold", "Maximum UDP response size before we truncate")="1232"; - - ::arg().set("config-name","Name of this virtual configuration - will rename the binary image")=""; - - ::arg().set("load-modules","Load this module - supply absolute or relative path")=""; - ::arg().set("launch","Which backends to launch and order to query them in")=""; - ::arg().setSwitch("disable-axfr","Disable zonetransfers but do allow TCP queries")="no"; - ::arg().set("allow-axfr-ips","Allow zonetransfers only to these subnets")="127.0.0.0/8,::1"; - ::arg().set("only-notify", "Only send AXFR NOTIFY to these IP addresses or netmasks")="0.0.0.0/0,::/0"; + ::arg().setSwitch("log-dns-details", "If PDNS should log DNS non-erroneous details") = "no"; + ::arg().setSwitch("log-dns-queries", "If PDNS should log all incoming DNS queries") = "no"; + ::arg().set("local-address", "Local IP addresses to which we bind") = "0.0.0.0, ::"; + ::arg().setSwitch("local-address-nonexist-fail", "Fail to start if one or more of the local-address's do not exist on this server") = "yes"; + ::arg().setSwitch("non-local-bind", "Enable binding to non-local addresses by using FREEBIND / BINDANY socket options") = "no"; + ::arg().setSwitch("reuseport", "Enable higher performance on compliant kernels by using SO_REUSEPORT allowing each receiver thread to open its own socket") = "no"; + ::arg().set("query-local-address", "Source IP addresses for sending queries") = "0.0.0.0 ::"; + ::arg().set("overload-queue-length", "Maximum queuelength moving to packetcache only") = "0"; + ::arg().set("max-queue-length", "Maximum queuelength before considering situation lost") = "5000"; + + ::arg().set("retrieval-threads", "Number of AXFR-retrieval threads for slave operation") = "2"; + ::arg().setSwitch("api", "Enable/disable the REST API (including HTTP listener)") = "no"; + ::arg().set("api-key", "Static pre-shared authentication key for access to the REST API") = ""; + ::arg().setSwitch("default-api-rectify", "Default API-RECTIFY value for zones") = "yes"; + ::arg().setSwitch("dname-processing", "If we should support DNAME records") = "no"; + + ::arg().setCmd("help", "Provide a helpful message"); + ::arg().setCmd("version", "Output version and compilation date"); + ::arg().setCmd("config", "Provide configuration file on standard output"); + ::arg().setCmd("list-modules", "Lists all modules available"); + ::arg().setCmd("no-config", "Don't parse configuration file"); + + ::arg().set("version-string", "PowerDNS version in packets - full, anonymous, powerdns or custom") = "full"; + ::arg().set("control-console", "Debugging switch - don't use") = "no"; // but I know you will! + ::arg().set("loglevel", "Amount of logging. Higher is more. Do not set below 3") = "4"; + ::arg().set("disable-syslog", "Disable logging to syslog, useful when running inside a supervisor that logs stdout") = "no"; + ::arg().set("log-timestamp", "Print timestamps in log lines") = "yes"; + ::arg().set("distributor-threads", "Default number of Distributor (backend) threads to start") = "3"; + ::arg().set("signing-threads", "Default number of signer threads to start") = "3"; + ::arg().set("receiver-threads", "Default number of receiver threads to start") = "1"; + ::arg().set("queue-limit", "Maximum number of milliseconds to queue a query") = "1500"; + ::arg().set("resolver", "Use this resolver for ALIAS and the internal stub resolver") = "no"; + ::arg().set("udp-truncation-threshold", "Maximum UDP response size before we truncate") = "1232"; + + ::arg().set("config-name", "Name of this virtual configuration - will rename the binary image") = ""; + + ::arg().set("load-modules", "Load this module - supply absolute or relative path") = ""; + ::arg().set("launch", "Which backends to launch and order to query them in") = ""; + ::arg().setSwitch("disable-axfr", "Disable zonetransfers but do allow TCP queries") = "no"; + ::arg().set("allow-axfr-ips", "Allow zonetransfers only to these subnets") = "127.0.0.0/8,::1"; + ::arg().set("only-notify", "Only send AXFR NOTIFY to these IP addresses or netmasks") = "0.0.0.0/0,::/0"; ::arg().set("also-notify", "When notifying a zone, also notify these nameservers") = ""; - ::arg().set("allow-notify-from","Allow AXFR NOTIFY from these IP ranges. If empty, drop all incoming notifies.")="0.0.0.0/0,::/0"; - ::arg().set("slave-cycle-interval","Schedule slave freshness checks once every .. seconds")="60"; - ::arg().set("xfr-cycle-interval","Schedule primary/secondary SOA freshness checks once every .. seconds")="60"; - - ::arg().set("tcp-control-address","If set, PowerDNS can be controlled over TCP on this address")=""; - ::arg().set("tcp-control-port","If set, PowerDNS can be controlled over TCP on this address")="53000"; - ::arg().set("tcp-control-secret","If set, PowerDNS can be controlled over TCP after passing this secret")=""; - ::arg().set("tcp-control-range","If set, remote control of PowerDNS is possible over these networks only")="127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10"; - - ::arg().setSwitch("slave","Act as a secondary")="no"; - ::arg().setSwitch("secondary","Act as a secondary")="no"; - ::arg().setSwitch("master","Act as a primary")="no"; - ::arg().setSwitch("primary","Act as a primary")="no"; - ::arg().setSwitch("superslave", "Act as a autosecondary")="no"; - ::arg().setSwitch("autosecondary", "Act as an autosecondary (formerly superslave)")="no"; - ::arg().setSwitch("disable-axfr-rectify","Disable the rectify step during an outgoing AXFR. Only required for regression testing.")="no"; - ::arg().setSwitch("guardian","Run within a guardian process")="no"; - ::arg().setSwitch("prevent-self-notification","Don't send notifications to what we think is ourself")="yes"; - ::arg().setSwitch("any-to-tcp","Answer ANY queries with tc=1, shunting to TCP")="yes"; - ::arg().setSwitch("edns-subnet-processing","If we should act on EDNS Subnet options")="no"; - - ::arg().set("edns-cookie-secret", "When set, set a server cookie when responding to a query with a Client cookie (in hex)")=""; - - ::arg().setSwitch("webserver","Start a webserver for monitoring (api=yes also enables the HTTP listener)")="no"; - ::arg().setSwitch("webserver-print-arguments","If the webserver should print arguments")="no"; - ::arg().set("webserver-address","IP Address of webserver/API to listen on")="127.0.0.1"; - ::arg().set("webserver-port","Port of webserver/API to listen on")="8081"; - ::arg().set("webserver-password","Password required for accessing the webserver")=""; - ::arg().set("webserver-allow-from","Webserver/API access is only allowed from these subnets")="127.0.0.1,::1"; + ::arg().set("allow-notify-from", "Allow AXFR NOTIFY from these IP ranges. If empty, drop all incoming notifies.") = "0.0.0.0/0,::/0"; + ::arg().set("slave-cycle-interval", "Schedule slave freshness checks once every .. seconds") = "60"; + ::arg().set("xfr-cycle-interval", "Schedule primary/secondary SOA freshness checks once every .. seconds") = "60"; + + ::arg().set("tcp-control-address", "If set, PowerDNS can be controlled over TCP on this address") = ""; + ::arg().set("tcp-control-port", "If set, PowerDNS can be controlled over TCP on this address") = "53000"; + ::arg().set("tcp-control-secret", "If set, PowerDNS can be controlled over TCP after passing this secret") = ""; + ::arg().set("tcp-control-range", "If set, remote control of PowerDNS is possible over these networks only") = "127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10"; + + ::arg().setSwitch("slave", "Act as a secondary") = "no"; + ::arg().setSwitch("secondary", "Act as a secondary") = "no"; + ::arg().setSwitch("master", "Act as a primary") = "no"; + ::arg().setSwitch("primary", "Act as a primary") = "no"; + ::arg().setSwitch("superslave", "Act as a autosecondary") = "no"; + ::arg().setSwitch("autosecondary", "Act as an autosecondary (formerly superslave)") = "no"; + ::arg().setSwitch("disable-axfr-rectify", "Disable the rectify step during an outgoing AXFR. Only required for regression testing.") = "no"; + ::arg().setSwitch("guardian", "Run within a guardian process") = "no"; + ::arg().setSwitch("prevent-self-notification", "Don't send notifications to what we think is ourself") = "yes"; + ::arg().setSwitch("any-to-tcp", "Answer ANY queries with tc=1, shunting to TCP") = "yes"; + ::arg().setSwitch("edns-subnet-processing", "If we should act on EDNS Subnet options") = "no"; + + ::arg().set("edns-cookie-secret", "When set, set a server cookie when responding to a query with a Client cookie (in hex)") = ""; + + ::arg().setSwitch("webserver", "Start a webserver for monitoring (api=yes also enables the HTTP listener)") = "no"; + ::arg().setSwitch("webserver-print-arguments", "If the webserver should print arguments") = "no"; + ::arg().set("webserver-address", "IP Address of webserver/API to listen on") = "127.0.0.1"; + ::arg().set("webserver-port", "Port of webserver/API to listen on") = "8081"; + ::arg().set("webserver-password", "Password required for accessing the webserver") = ""; + ::arg().set("webserver-allow-from", "Webserver/API access is only allowed from these subnets") = "127.0.0.1,::1"; ::arg().set("webserver-loglevel", "Amount of logging in the webserver (none, normal, detailed)") = "normal"; - ::arg().set("webserver-max-bodysize","Webserver/API maximum request/response body size in megabytes")="2"; - ::arg().setSwitch("webserver-hash-plaintext-credentials","Whether to hash passwords and api keys supplied in plaintext, to prevent keeping the plaintext version in memory at runtime")="no"; + ::arg().set("webserver-max-bodysize", "Webserver/API maximum request/response body size in megabytes") = "2"; + ::arg().setSwitch("webserver-hash-plaintext-credentials", "Whether to hash passwords and api keys supplied in plaintext, to prevent keeping the plaintext version in memory at runtime") = "no"; - ::arg().setSwitch("query-logging","Hint backends that queries should be logged")="no"; + ::arg().setSwitch("query-logging", "Hint backends that queries should be logged") = "no"; - ::arg().set("carbon-namespace", "If set overwrites the first part of the carbon string")="pdns"; - ::arg().set("carbon-ourname", "If set, overrides our reported hostname for carbon stats")=""; - ::arg().set("carbon-instance", "If set overwrites the instance name default")="auth"; - ::arg().set("carbon-server", "If set, send metrics in carbon (graphite) format to this server IP address")=""; - ::arg().set("carbon-interval", "Number of seconds between carbon (graphite) updates")="30"; + ::arg().set("carbon-namespace", "If set overwrites the first part of the carbon string") = "pdns"; + ::arg().set("carbon-ourname", "If set, overrides our reported hostname for carbon stats") = ""; + ::arg().set("carbon-instance", "If set overwrites the instance name default") = "auth"; + ::arg().set("carbon-server", "If set, send metrics in carbon (graphite) format to this server IP address") = ""; + ::arg().set("carbon-interval", "Number of seconds between carbon (graphite) updates") = "30"; - ::arg().set("cache-ttl","Seconds to store packets in the PacketCache")="20"; - ::arg().set("negquery-cache-ttl","Seconds to store negative query results in the QueryCache")="60"; - ::arg().set("query-cache-ttl","Seconds to store query results in the QueryCache")="20"; + ::arg().set("cache-ttl", "Seconds to store packets in the PacketCache") = "20"; + ::arg().set("negquery-cache-ttl", "Seconds to store negative query results in the QueryCache") = "60"; + ::arg().set("query-cache-ttl", "Seconds to store query results in the QueryCache") = "20"; ::arg().set("zone-cache-refresh-interval", "Seconds to cache list of known zones") = "300"; - ::arg().set("server-id", "Returned when queried for 'id.server' TXT or NSID, defaults to hostname - disabled or custom")=""; - ::arg().set("default-soa-content","Default SOA content")="a.misconfigured.dns.server.invalid hostmaster.@ 0 10800 3600 604800 3600"; - ::arg().set("default-soa-edit","Default SOA-EDIT value")=""; - ::arg().set("default-soa-edit-signed","Default SOA-EDIT value for signed zones")=""; - ::arg().set("dnssec-key-cache-ttl","Seconds to cache DNSSEC keys from the database")="30"; + ::arg().set("server-id", "Returned when queried for 'id.server' TXT or NSID, defaults to hostname - disabled or custom") = ""; + ::arg().set("default-soa-content", "Default SOA content") = "a.misconfigured.dns.server.invalid hostmaster.@ 0 10800 3600 604800 3600"; + ::arg().set("default-soa-edit", "Default SOA-EDIT value") = ""; + ::arg().set("default-soa-edit-signed", "Default SOA-EDIT value for signed zones") = ""; + ::arg().set("dnssec-key-cache-ttl", "Seconds to cache DNSSEC keys from the database") = "30"; ::arg().set("domain-metadata-cache-ttl", "Seconds to cache zone metadata from the database") = ""; ::arg().set("zone-metadata-cache-ttl", "Seconds to cache zone metadata from the database") = "60"; - ::arg().set("trusted-notification-proxy", "IP address of incoming notification proxy")=""; - ::arg().set("slave-renotify", "If we should send out notifications for secondaried updates")="no"; - ::arg().set("secondary-do-renotify", "If this secondary should send out notifications after receiving zone transfers from a primary")="no"; - ::arg().set("forward-notify", "IP addresses to forward received notifications to regardless of master or slave settings")=""; - - ::arg().set("default-ttl","Seconds a result is valid if not set otherwise")="3600"; - ::arg().set("max-tcp-connections","Maximum number of TCP connections")="20"; - ::arg().set("max-tcp-connections-per-client","Maximum number of simultaneous TCP connections per client")="0"; - ::arg().set("max-tcp-transactions-per-conn","Maximum number of subsequent queries per TCP connection")="0"; - ::arg().set("max-tcp-connection-duration","Maximum time in seconds that a TCP DNS connection is allowed to stay open.")="0"; - ::arg().set("tcp-idle-timeout","Maximum time in seconds that a TCP DNS connection is allowed to stay open while being idle")="5"; - - ::arg().setSwitch("no-shuffle","Set this to prevent random shuffling of answers - for regression testing")="off"; - - ::arg().set("setuid","If set, change user id to this uid for more security")=""; - ::arg().set("setgid","If set, change group id to this gid for more security")=""; - - ::arg().set("max-cache-entries", "Maximum number of entries in the query cache")="1000000"; - ::arg().set("max-packet-cache-entries", "Maximum number of entries in the packet cache")="1000000"; - ::arg().set("max-signature-cache-entries", "Maximum number of signatures cache entries")=""; - ::arg().set("max-ent-entries", "Maximum number of empty non-terminals in a zone")="100000"; - ::arg().set("entropy-source", "If set, read entropy from this file")="/dev/urandom"; - - ::arg().set("lua-prequery-script", "Lua script with prequery handler (DO NOT USE)")=""; - ::arg().set("lua-dnsupdate-policy-script", "Lua script with DNS update policy handler")=""; - - ::arg().setSwitch("traceback-handler","Enable the traceback handler (Linux only)")="yes"; - ::arg().setSwitch("direct-dnskey","Fetch DNSKEY, CDS and CDNSKEY RRs from backend during DNSKEY or CDS/CDNSKEY synthesis")="no"; - ::arg().set("default-ksk-algorithm","Default KSK algorithm")="ecdsa256"; - ::arg().set("default-ksk-size","Default KSK size (0 means default)")="0"; - ::arg().set("default-zsk-algorithm","Default ZSK algorithm")=""; - ::arg().set("default-zsk-size","Default ZSK size (0 means default)")="0"; + ::arg().set("trusted-notification-proxy", "IP address of incoming notification proxy") = ""; + ::arg().set("slave-renotify", "If we should send out notifications for secondaried updates") = "no"; + ::arg().set("secondary-do-renotify", "If this secondary should send out notifications after receiving zone transfers from a primary") = "no"; + ::arg().set("forward-notify", "IP addresses to forward received notifications to regardless of master or slave settings") = ""; + + ::arg().set("default-ttl", "Seconds a result is valid if not set otherwise") = "3600"; + ::arg().set("max-tcp-connections", "Maximum number of TCP connections") = "20"; + ::arg().set("max-tcp-connections-per-client", "Maximum number of simultaneous TCP connections per client") = "0"; + ::arg().set("max-tcp-transactions-per-conn", "Maximum number of subsequent queries per TCP connection") = "0"; + ::arg().set("max-tcp-connection-duration", "Maximum time in seconds that a TCP DNS connection is allowed to stay open.") = "0"; + ::arg().set("tcp-idle-timeout", "Maximum time in seconds that a TCP DNS connection is allowed to stay open while being idle") = "5"; + + ::arg().setSwitch("no-shuffle", "Set this to prevent random shuffling of answers - for regression testing") = "off"; + + ::arg().set("setuid", "If set, change user id to this uid for more security") = ""; + ::arg().set("setgid", "If set, change group id to this gid for more security") = ""; + + ::arg().set("max-cache-entries", "Maximum number of entries in the query cache") = "1000000"; + ::arg().set("max-packet-cache-entries", "Maximum number of entries in the packet cache") = "1000000"; + ::arg().set("max-signature-cache-entries", "Maximum number of signatures cache entries") = ""; + ::arg().set("max-ent-entries", "Maximum number of empty non-terminals in a zone") = "100000"; + ::arg().set("entropy-source", "If set, read entropy from this file") = "/dev/urandom"; + + ::arg().set("lua-prequery-script", "Lua script with prequery handler (DO NOT USE)") = ""; + ::arg().set("lua-dnsupdate-policy-script", "Lua script with DNS update policy handler") = ""; + + ::arg().setSwitch("traceback-handler", "Enable the traceback handler (Linux only)") = "yes"; + ::arg().setSwitch("direct-dnskey", "Fetch DNSKEY, CDS and CDNSKEY RRs from backend during DNSKEY or CDS/CDNSKEY synthesis") = "no"; + ::arg().set("default-ksk-algorithm", "Default KSK algorithm") = "ecdsa256"; + ::arg().set("default-ksk-size", "Default KSK size (0 means default)") = "0"; + ::arg().set("default-zsk-algorithm", "Default ZSK algorithm") = ""; + ::arg().set("default-zsk-size", "Default ZSK size (0 means default)") = "0"; ::arg().set("max-nsec3-iterations", "Limit the number of NSEC3 hash iterations") = "100"; - ::arg().set("default-publish-cdnskey","Default value for PUBLISH-CDNSKEY")=""; - ::arg().set("default-publish-cds","Default value for PUBLISH-CDS")=""; + ::arg().set("default-publish-cdnskey", "Default value for PUBLISH-CDNSKEY") = ""; + ::arg().set("default-publish-cds", "Default value for PUBLISH-CDS") = ""; - ::arg().set("include-dir","Include *.conf files from this directory"); + ::arg().set("include-dir", "Include *.conf files from this directory"); ::arg().set("security-poll-suffix", "Zone name from which to query security update notifications") = "secpoll.powerdns.com."; - ::arg().setSwitch("expand-alias", "Expand ALIAS records")="no"; - ::arg().setSwitch("outgoing-axfr-expand-alias", "Expand ALIAS records during outgoing AXFR")="no"; - ::arg().setSwitch("8bit-dns", "Allow 8bit dns queries")="no"; + ::arg().setSwitch("expand-alias", "Expand ALIAS records") = "no"; + ::arg().setSwitch("outgoing-axfr-expand-alias", "Expand ALIAS records during outgoing AXFR") = "no"; + ::arg().setSwitch("8bit-dns", "Allow 8bit dns queries") = "no"; #ifdef HAVE_LUA_RECORDS - ::arg().setSwitch("enable-lua-records", "Process LUA records for all zones (metadata overrides this)")="no"; - ::arg().set("lua-records-exec-limit", "LUA records scripts execution limit (instructions count). Values <= 0 mean no limit")="1000"; - ::arg().set("lua-health-checks-expire-delay", "Stops doing health checks after the record hasn't been used for that delay (in seconds)")="3600"; - ::arg().set("lua-health-checks-interval", "LUA records health checks monitoring interval in seconds")="5"; + ::arg().setSwitch("enable-lua-records", "Process LUA records for all zones (metadata overrides this)") = "no"; + ::arg().set("lua-records-exec-limit", "LUA records scripts execution limit (instructions count). Values <= 0 mean no limit") = "1000"; + ::arg().set("lua-health-checks-expire-delay", "Stops doing health checks after the record hasn't been used for that delay (in seconds)") = "3600"; + ::arg().set("lua-health-checks-interval", "LUA records health checks monitoring interval in seconds") = "5"; #endif - ::arg().setSwitch("axfr-lower-serial", "Also AXFR a zone from a master with a lower serial")="no"; + ::arg().setSwitch("axfr-lower-serial", "Also AXFR a zone from a master with a lower serial") = "no"; - ::arg().set("lua-axfr-script", "Script to be used to edit incoming AXFRs")=""; - ::arg().set("xfr-max-received-mbytes", "Maximum number of megabytes received from an incoming XFR")="100"; - ::arg().set("axfr-fetch-timeout", "Maximum time in seconds for inbound AXFR to start or be idle after starting")="10"; + ::arg().set("lua-axfr-script", "Script to be used to edit incoming AXFRs") = ""; + ::arg().set("xfr-max-received-mbytes", "Maximum number of megabytes received from an incoming XFR") = "100"; + ::arg().set("axfr-fetch-timeout", "Maximum time in seconds for inbound AXFR to start or be idle after starting") = "10"; - ::arg().set("tcp-fast-open", "Enable TCP Fast Open support on the listening sockets, using the supplied numerical value as the queue size")="0"; + ::arg().set("tcp-fast-open", "Enable TCP Fast Open support on the listening sockets, using the supplied numerical value as the queue size") = "0"; - ::arg().set("max-generate-steps", "Maximum number of $GENERATE steps when loading a zone from a file")="0"; - ::arg().set("max-include-depth", "Maximum number of nested $INCLUDE directives while processing a zone file")="20"; - ::arg().setSwitch("upgrade-unknown-types","Transparently upgrade known TYPExxx records. Recommended to keep off, except for PowerDNS upgrades until data sources are cleaned up")="no"; - ::arg().setSwitch("svc-autohints", "Transparently fill ipv6hint=auto ipv4hint=auto SVC params with AAAA/A records for the target name of the record (if within the same zone)")="no"; + ::arg().set("max-generate-steps", "Maximum number of $GENERATE steps when loading a zone from a file") = "0"; + ::arg().set("max-include-depth", "Maximum number of nested $INCLUDE directives while processing a zone file") = "20"; + ::arg().setSwitch("upgrade-unknown-types", "Transparently upgrade known TYPExxx records. Recommended to keep off, except for PowerDNS upgrades until data sources are cleaned up") = "no"; + ::arg().setSwitch("svc-autohints", "Transparently fill ipv6hint=auto ipv4hint=auto SVC params with AAAA/A records for the target name of the record (if within the same zone)") = "no"; ::arg().setSwitch("consistent-backends", "Assume individual zones are not divided over backends. Send only ANY lookup operations to the backend to reduce the number of lookups") = "yes"; - ::arg().set("rng", "Specify the random number generator to use. Valid values are auto,sodium,openssl,getrandom,arc4random,urandom.")="auto"; + ::arg().set("rng", "Specify the random number generator to use. Valid values are auto,sodium,openssl,getrandom,arc4random,urandom.") = "auto"; ::arg().setDefaults(); } -static time_t s_start=time(nullptr); +static time_t s_start = time(nullptr); static uint64_t uptimeOfProcess(const std::string& str) { return time(nullptr) - s_start; @@ -338,12 +339,11 @@ static uint64_t getSysUserTimeMsec(const std::string& str) struct rusage ru; getrusage(RUSAGE_SELF, &ru); - if(str=="sys-msec") { - return (ru.ru_stime.tv_sec*1000ULL + ru.ru_stime.tv_usec/1000); + if (str == "sys-msec") { + return (ru.ru_stime.tv_sec * 1000ULL + ru.ru_stime.tv_usec / 1000); } else - return (ru.ru_utime.tv_sec*1000ULL + ru.ru_utime.tv_usec/1000); - + return (ru.ru_utime.tv_sec * 1000ULL + ru.ru_utime.tv_usec / 1000); } static uint64_t getTCPConnectionCount(const std::string& str) @@ -352,28 +352,25 @@ static uint64_t getTCPConnectionCount(const std::string& str) } static uint64_t getQCount(const std::string& str) -try -{ - int totcount=0; - for(const auto& d : g_distributors) { - if(!d) +try { + int totcount = 0; + for (const auto& d : g_distributors) { + if (!d) continue; - totcount += d->getQueueSize(); // this does locking and other things, so don't get smart + totcount += d->getQueueSize(); // this does locking and other things, so don't get smart } return totcount; } -catch(std::exception& e) -{ - g_log<& a, int start) { - if(!a) + if (!a) return; try { @@ -522,14 +519,13 @@ static void sendout(std::unique_ptr& a, int start) avg_latency = 0.999 * avg_latency + 0.001 * std::max(diff, 0); } catch (const std::exception& e) { - g_log<canReusePort() ) { + if (N->canReusePort()) { NS = g_udpReceivers[num]; if (NS == nullptr) { NS = N; } - } else { + } + else { NS = N; } - for(;;) { + for (;;) { try { if (g_proxyProtocolACL.empty()) { buffer.resize(DNSPacket::s_udpTruncationThreshold); @@ -572,8 +569,8 @@ try buffer.resize(DNSPacket::s_udpTruncationThreshold + g_proxyProtocolMaximumSize); } - if(!NS->receive(question, buffer)) { // receive a packet inline - continue; // packet was broken, try again + if (!NS->receive(question, buffer)) { // receive a packet inline + continue; // packet was broken, try again } diff = question.d_dt.udiffNoReset(); @@ -590,37 +587,36 @@ try else numreceived6++; - if(question.d_dnssecOk) + if (question.d_dnssecOk) numreceiveddo++; - if(question.hasEDNSCookie()) + if (question.hasEDNSCookie()) numreceivedcookie++; - if(question.d.qr) + if (question.d.qr) continue; S.ringAccount("queries", question.qdomain, question.qtype); S.ringAccount("remotes", question.d_remote); - if(logDNSQueries) { - g_log << Logger::Notice<<"Remote "<< question.getRemoteString() <<" wants '" << question.qdomain<<"|"<send(cached); // answer it then inlined - diff=question.d_dt.udiff(); + diff = question.d_dt.udiff(); send_latency = 0.999 * send_latency + 0.001 * std::max(diff - start, 0); avg_latency = 0.999 * avg_latency + 0.001 * std::max(diff, 0); // 'EWMA' continue; @@ -638,36 +634,36 @@ try cache_latency = 0.999 * cache_latency + 0.001 * std::max(diff - start, 0); } - if(distributor->isOverloaded()) { - if(logDNSQueries) - g_log<<": Dropped query, backends are overloaded"<isOverloaded()) { + if (logDNSQueries) + g_log << ": Dropped query, backends are overloaded" << endl; overloadDrops++; continue; } if (logDNSQueries) { if (PC.enabled()) { - g_log<<": packetcache MISS"<question(question, &sendout); // otherwise, give to the distributor } - catch(DistributorFatal& df) { // when this happens, we have leaked loads of memory. Bailing out time. + catch (DistributorFatal& df) { // when this happens, we have leaked loads of memory. Bailing out time. _exit(1); } } catch (const std::exception& e) { - g_log<(::arg()["resolver"]); DP->go(); } @@ -773,7 +771,8 @@ void mainthread() try { doSecPoll(true); } - catch(...) {} + catch (...) { + } { // Some sanity checking on default key settings @@ -781,21 +780,22 @@ void mainthread() int kskAlgo{0}, zskAlgo{0}; for (const string algotype : {"ksk", "zsk"}) { int algo, size; - if (::arg()["default-"+algotype+"-algorithm"].empty()) + if (::arg()["default-" + algotype + "-algorithm"].empty()) continue; - algo = DNSSECKeeper::shorthand2algorithm(::arg()["default-"+algotype+"-algorithm"]); - size = ::arg().asNum("default-"+algotype+"-size"); + algo = DNSSECKeeper::shorthand2algorithm(::arg()["default-" + algotype + "-algorithm"]); + size = ::arg().asNum("default-" + algotype + "-size"); if (algo == -1) { - g_log<go(); - if(::arg().mustDo("webserver") || ::arg().mustDo("api")) + if (::arg().mustDo("webserver") || ::arg().mustDo("api")) webserver.go(); - if(::arg().mustDo("primary") || ::arg().mustDo("secondary")|| !::arg()["forward-notify"].empty()) - Communicator.go(); + if (::arg().mustDo("primary") || ::arg().mustDo("secondary") || !::arg()["forward-notify"].empty()) + Communicator.go(); TN->go(); // tcp nameserver launch - unsigned int max_rthreads= ::arg().asNum("receiver-threads", 1); + unsigned int max_rthreads = ::arg().asNum("receiver-threads", 1); g_distributors.resize(max_rthreads); - for(unsigned int n=0; n < max_rthreads; ++n) { + for (unsigned int n = 0; n < max_rthreads; ++n) { std::thread t(qthread, n); t.detach(); } - std::thread carbonThread(carbonDumpThread); // runs even w/o carbon, might change @ runtime + std::thread carbonThread(carbonDumpThread); // runs even w/o carbon, might change @ runtime #ifdef HAVE_SYSTEMD /* If we are here, notify systemd that we are ay-ok! This might have some @@ -842,15 +842,15 @@ void mainthread() * is slow and times out (leading to process termination through the backend) * We probably have told systemd already that we have started correctly. */ - sd_notify(0, "READY=1"); + sd_notify(0, "READY=1"); #endif const uint32_t secpollInterval = 1800; uint32_t secpollSince = 0; uint32_t zoneCacheUpdateSince = 0; - for(;;) { + for (;;) { const uint32_t sleeptime = g_zoneCache.getRefreshInterval() == 0 ? secpollInterval : std::min(secpollInterval, g_zoneCache.getRefreshInterval()); - sleep(sleeptime); // if any signals arrive, we might run more often than expected. + sleep(sleeptime); // if any signals arrive, we might run more often than expected. zoneCacheUpdateSince += sleeptime; if (zoneCacheUpdateSince >= g_zoneCache.getRefreshInterval()) { @@ -859,11 +859,11 @@ void mainthread() B.updateZoneCache(); zoneCacheUpdateSince = 0; } - catch(PDNSException &e) { - g_log<&parts, pid_t ppid) +static string DLCycleHandler(const vector& parts, pid_t ppid) { kill(cpid, SIGKILL); // why? kill(cpid, SIGKILL); // why? @@ -944,123 +946,123 @@ static string DLCycleHandler(const vector&parts, pid_t ppid) return "ok"; } -static string DLRestHandler(const vector&parts, pid_t ppid) +static string DLRestHandler(const vector& parts, pid_t ppid) { string line; - for(vector::const_iterator i=parts.begin();i!=parts.end();++i) { - if(i!=parts.begin()) - line.append(1,' '); + for (vector::const_iterator i = parts.begin(); i != parts.end(); ++i) { + if (i != parts.begin()) + line.append(1, ' '); line.append(*i); } - line.append(1,'\n'); + line.append(1, '\n'); std::lock_guard l(g_guardian_lock); try { - writen2(g_fd1[1],line.c_str(),line.size()+1); + writen2(g_fd1[1], line.c_str(), line.size() + 1); } - catch(PDNSException &ae) { - return "Error communicating with instance: "+ae.reason; + catch (PDNSException& ae) { + return "Error communicating with instance: " + ae.reason; } char mesg[512]; string response; - while(fgets(mesg,sizeof(mesg),g_fp)) { - if(*mesg=='\0') + while (fgets(mesg, sizeof(mesg), g_fp)) { + if (*mesg == '\0') break; - response+=mesg; + response += mesg; } boost::trim_right(response); return response; } -static int guardian(int argc, char **argv) +static int guardian(int argc, char** argv) { - if(isGuarded(argv)) + if (isGuarded(argv)) return 0; - int infd=0, outfd=1; + int infd = 0, outfd = 1; DynListener dlg(s_programname); - dlg.registerFunc("QUIT",&DLQuitHandler, "quit daemon"); - dlg.registerFunc("CYCLE",&DLCycleHandler, "restart instance"); - dlg.registerFunc("PING",&DLPingHandler, "ping guardian"); - dlg.registerFunc("STATUS",&DLStatusHandler, "get instance status from guardian"); + dlg.registerFunc("QUIT", &DLQuitHandler, "quit daemon"); + dlg.registerFunc("CYCLE", &DLCycleHandler, "restart instance"); + dlg.registerFunc("PING", &DLPingHandler, "ping guardian"); + dlg.registerFunc("STATUS", &DLStatusHandler, "get instance status from guardian"); dlg.registerRestFunc(&DLRestHandler); dlg.go(); - string progname=argv[0]; + string progname = argv[0]; - bool first=true; - cpid=0; + bool first = true; + cpid = 0; g_guardian_lock.lock(); - for(;;) { + for (;;) { int pid; setStatus("Launching child"); - if(pipe(g_fd1)<0 || pipe(g_fd2)<0) { - g_log<((progname+"-instance").c_str())); - for(n=1;n((progname + "-instance").c_str())); + for (n = 1; n < argc; n++) { + newargv[n] = argv[n]; } - newargv[n]=nullptr; + newargv[n] = nullptr; - g_log<0) { // parent + else if (pid > 0) { // parent close(g_fd1[0]); close(g_fd2[1]); - if(first) { - first=false; + if (first) { + first = false; signal(SIGTERM, takedown); signal(SIGHUP, SIG_IGN); @@ -1071,22 +1073,22 @@ static int guardian(int argc, char **argv) } g_guardian_lock.unlock(); int status; - cpid=pid; - for(;;) { - int ret=waitpid(pid,&status,WNOHANG); + cpid = pid; + for (;;) { + int ret = waitpid(pid, &status, WNOHANG); - if(ret<0) { - g_log< static void tbhandler(int num) { - g_log<= 0) + ::arg().laxParse(argc, argv); // reparse so the commandline still wins + if (!::arg()["logging-facility"].empty()) { + int val = logFacilityToLOG(::arg().asNum("logging-facility")); + if (val >= 0) g_log.setFacility(val); else - g_log< modules; - stringtok(modules,::arg()["load-modules"], ", "); + stringtok(modules, ::arg()["load-modules"], ", "); if (!UeberBackend::loadModules(modules, ::arg()["module-dir"])) { exit(1); } @@ -1277,127 +1289,132 @@ int main(int argc, char **argv) BackendMakers().launch(::arg()["launch"]); // vrooooom! - if(!::arg().getCommands().empty()) { - cerr<<"Fatal: non-option"; + if (!::arg().getCommands().empty()) { + cerr << "Fatal: non-option"; if (::arg().getCommands().size() > 1) { - cerr<<"s"; + cerr << "s"; } - cerr<<" ("; + cerr << " ("; bool first = true; for (const auto& c : ::arg().getCommands()) { if (!first) { - cerr<<", "; + cerr << ", "; } first = false; - cerr<(); // listens on stdin + if (isGuarded(argv)) { + g_log << Logger::Warning << "This is a guarded instance of pdns" << endl; + dl = make_unique(); // listens on stdin } else { - g_log<(); + if (::arg().mustDo("control-console")) + dl = make_unique(); else dl = std::make_unique(s_programname); writePid(); } - DynListener::registerFunc("SHOW",&DLShowHandler, "show a specific statistic or * to get a list", ""); - DynListener::registerFunc("RPING",&DLPingHandler, "ping instance"); - DynListener::registerFunc("QUIT",&DLRQuitHandler, "quit daemon"); - DynListener::registerFunc("UPTIME",&DLUptimeHandler, "get instance uptime"); + DynListener::registerFunc("SHOW", &DLShowHandler, "show a specific statistic or * to get a list", ""); + DynListener::registerFunc("RPING", &DLPingHandler, "ping instance"); + DynListener::registerFunc("QUIT", &DLRQuitHandler, "quit daemon"); + DynListener::registerFunc("UPTIME", &DLUptimeHandler, "get instance uptime"); DynListener::registerFunc("NOTIFY-HOST", &DLNotifyHostHandler, "notify host for specific zone", " "); DynListener::registerFunc("NOTIFY", &DLNotifyHandler, "queue a notification", ""); - DynListener::registerFunc("RELOAD",&DLReloadHandler, "reload all zones"); - DynListener::registerFunc("REDISCOVER",&DLRediscoverHandler, "discover any new zones"); - DynListener::registerFunc("VERSION",&DLVersionHandler, "get instance version"); - DynListener::registerFunc("PURGE",&DLPurgeHandler, "purge entries from packet cache", "[]"); - DynListener::registerFunc("CCOUNTS",&DLCCHandler, "get cache statistics"); + DynListener::registerFunc("RELOAD", &DLReloadHandler, "reload all zones"); + DynListener::registerFunc("REDISCOVER", &DLRediscoverHandler, "discover any new zones"); + DynListener::registerFunc("VERSION", &DLVersionHandler, "get instance version"); + DynListener::registerFunc("PURGE", &DLPurgeHandler, "purge entries from packet cache", "[]"); + DynListener::registerFunc("CCOUNTS", &DLCCHandler, "get cache statistics"); DynListener::registerFunc("QTYPES", &DLQTypesHandler, "get QType statistics"); DynListener::registerFunc("RESPSIZES", &DLRSizesHandler, "get histogram of response sizes"); DynListener::registerFunc("REMOTES", &DLRemotesHandler, "get top remotes"); - DynListener::registerFunc("SET",&DLSettingsHandler, "set config variables", " "); + DynListener::registerFunc("SET", &DLSettingsHandler, "set config variables", " "); DynListener::registerFunc("RETRIEVE", &DLNotifyRetrieveHandler, "retrieve slave zone", " []"); - DynListener::registerFunc("CURRENT-CONFIG",&DLCurrentConfigHandler, "retrieve the current configuration", "[diff]"); + DynListener::registerFunc("CURRENT-CONFIG", &DLCurrentConfigHandler, "retrieve the current configuration", "[diff]"); DynListener::registerFunc("LIST-ZONES", &DLListZones, "show list of zones", "[primary|secondary|native]"); DynListener::registerFunc("TOKEN-LOGIN", &DLTokenLogin, "Login to a PKCS#11 token", " "); DynListener::registerFunc("XFR-QUEUE", &DLSuckRequests, "Get all requests for XFR in queue"); - if(!::arg()["tcp-control-address"].empty()) { - DynListener* dlTCP=new DynListener(ComboAddress(::arg()["tcp-control-address"], ::arg().asNum("tcp-control-port"))); + if (!::arg()["tcp-control-address"].empty()) { + DynListener* dlTCP = new DynListener(ComboAddress(::arg()["tcp-control-address"], ::arg().asNum("tcp-control-port"))); dlTCP->go(); } // reparse, with error checking - if(!::arg().mustDo("no-config")) + if (!::arg().mustDo("no-config")) ::arg().file(configname.c_str()); - ::arg().parse(argc,argv); + ::arg().parse(argc, argv); - if(::arg()["server-id"].empty()) { + if (::arg()["server-id"].empty()) { char tmp[128]; - if(gethostname(tmp, sizeof(tmp)-1) == 0) { - ::arg().set("server-id")=tmp; - } else { - g_log<(); // this fails when we are not root, throws exception + N = std::make_shared(); // this fails when we are not root, throws exception g_udpReceivers.push_back(N); size_t rthreads = ::arg().asNum("receiver-threads", 1); @@ -1420,8 +1437,8 @@ int main(int argc, char **argv) try { g_udpReceivers[idx] = std::make_shared(true); } - catch(const PDNSException& e) { - g_log<(); } - catch(const ArgException &A) { - g_log< DP; extern std::unique_ptr dl; extern CommunicatorClass Communicator; extern std::shared_ptr N; -extern vector > g_udpReceivers; +extern vector> g_udpReceivers; extern double avg_latency; extern std::unique_ptr TN; extern void declareArguments(); extern void declareStats(); extern void mainthread(); -extern int isGuarded( char ** ); +extern int isGuarded(char**); void carbonDumpThread(); extern bool g_anyToTcp; extern bool g_8bitDNS; -- 2.47.2