From: Pieter Lexis Date: Wed, 24 Jan 2018 10:58:23 +0000 (+0100) Subject: ixfrdist: don't crash on wrong options X-Git-Tag: dnsdist-1.3.0~111^2~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=347671ac63be57652e3d39d799fcf183cf6b4036;p=pdns ixfrdist: don't crash on wrong options --- diff --git a/pdns/ixfrdist.cc b/pdns/ixfrdist.cc index 585b4b252..83fba33d4 100644 --- a/pdns/ixfrdist.cc +++ b/pdns/ixfrdist.cc @@ -599,44 +599,49 @@ void handleTCPRequest(int fd, boost::any&) { } int main(int argc, char** argv) { - po::options_description desc("IXFR distribution tool"); - desc.add_options() - ("help", "produce help message") - ("version", "Display the version of ixfrdist") - ("verbose", "Be verbose") - ("debug", "Be even more verbose") - ("listen-address", po::value< vector< string>>(), "IP Address(es) to listen on") - ("server-address", po::value()->default_value("127.0.0.1:5300"), "server address") - ("work-dir", po::value()->default_value("."), "Directory for storing AXFR and IXFR data") - ; - po::options_description alloptions; - po::options_description hidden("hidden options"); - hidden.add_options() - ("domains", po::value< vector >(), "domains"); - - alloptions.add(desc).add(hidden); - po::positional_options_description p; - p.add("domains", -1); - - po::store(po::command_line_parser(argc, argv).options(alloptions).positional(p).run(), g_vm); - po::notify(g_vm); - - if (g_vm.count("help") > 0) { - usage(desc); - return EXIT_SUCCESS; - } + try { + po::options_description desc("IXFR distribution tool"); + desc.add_options() + ("help", "produce help message") + ("version", "Display the version of ixfrdist") + ("verbose", "Be verbose") + ("debug", "Be even more verbose") + ("listen-address", po::value< vector< string>>(), "IP Address(es) to listen on") + ("server-address", po::value()->default_value("127.0.0.1:5300"), "server address") + ("work-dir", po::value()->default_value("."), "Directory for storing AXFR and IXFR data") + ; + po::options_description alloptions; + po::options_description hidden("hidden options"); + hidden.add_options() + ("domains", po::value< vector >(), "domains"); + + alloptions.add(desc).add(hidden); + po::positional_options_description p; + p.add("domains", -1); + + po::store(po::command_line_parser(argc, argv).options(alloptions).positional(p).run(), g_vm); + po::notify(g_vm); + + if (g_vm.count("help") > 0) { + usage(desc); + return EXIT_SUCCESS; + } - if (g_vm.count("version") > 0) { - cout<<"ixfrdist "< 0) { + cout<<"ixfrdist "< 0 || g_vm.count("debug") > 0) { - g_verbose = true; - } + if (g_vm.count("verbose") > 0 || g_vm.count("debug") > 0) { + g_verbose = true; + } - if (g_vm.count("debug") > 0) { - g_debug = true; + if (g_vm.count("debug") > 0) { + g_debug = true; + } + } catch (po::error &e) { + cerr<<"[ERROR] "<>()) { - try { - g_domains.insert(DNSName(domain)); - } catch (PDNSException &e) { - cerr<<"[ERROR] '"<>()) { + try { + g_domains.insert(DNSName(domain)); + } catch (PDNSException &e) { + cerr<<"[ERROR] '"<