]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Fix number conversions in core
authorAki Tuomi <cmouse@desteem.org>
Sat, 12 Dec 2015 22:02:42 +0000 (00:02 +0200)
committerAki Tuomi <cmouse@desteem.org>
Mon, 21 Dec 2015 12:53:44 +0000 (14:53 +0200)
61 files changed:
pdns/botan110signers.cc
pdns/botansigners.cc
pdns/communicator.cc
pdns/cryptoppsigners.cc
pdns/dbdnsseckeeper.cc
pdns/devpollmplexer.cc
pdns/dns.cc
pdns/dnsbackend.cc
pdns/dnsdist-lua.cc
pdns/dnsdist.cc
pdns/dnsparser.cc
pdns/dnsparser.hh
pdns/dnsrecords.cc
pdns/dnsrecords.hh
pdns/dnssecinfra.cc
pdns/dynhandler.cc
pdns/dynloader.cc
pdns/epollmplexer.cc
pdns/gss_context.hh
pdns/iputils.hh
pdns/json.cc
pdns/kqueuemplexer.cc
pdns/lua-iputils.cc
pdns/lua-recursor.cc
pdns/mastercommunicator.cc
pdns/mbedtlssigners.cc
pdns/misc.cc
pdns/mplexer.hh
pdns/namespaces.hh
pdns/nproxy.cc
pdns/packethandler.cc
pdns/pdns_hw.cc
pdns/pdns_recursor.cc
pdns/pdnsutil.cc
pdns/pkcs11signers.cc
pdns/pollmplexer.cc
pdns/portsmplexer.cc
pdns/rcpgenerator.cc
pdns/rec_channel_rec.cc
pdns/reczones.cc
pdns/resolver.cc
pdns/saxfr.cc
pdns/secpoll-auth.cc
pdns/secpoll-recursor.cc
pdns/selectmplexer.cc
pdns/serialtweaker.cc
pdns/signingpipe.cc
pdns/slavecommunicator.cc
pdns/sodiumsigners.cc
pdns/syncres.cc
pdns/tcpreceiver.cc
pdns/test-dnsrecords_cc.cc
pdns/test-packetcache_cc.cc
pdns/test-zoneparser_tng_cc.cc
pdns/validate.cc
pdns/webserver.cc
pdns/ws-auth.cc
pdns/ws-recursor.cc
pdns/zone2json.cc
pdns/zone2sql.cc
pdns/zoneparser-tng.cc

index d3a82997760c3f855f5b12ad7d1dd92e6235a23f..eed7f7554724f8021c0162c4a2dd00739ce587da 100644 (file)
@@ -107,7 +107,7 @@ DNSCryptoKeyEngine::storvector_t GOSTDNSCryptoKeyEngine::convertToISCVector() co
 
 void GOSTDNSCryptoKeyEngine::fromISCMap(DNSKEYRecordContent& drc, std::map<std::string, std::string>& stormap )
 { 
-  drc.d_algorithm = atoi(stormap["algorithm"].c_str());
+  drc.d_algorithm = pdns_stou(stormap["algorithm"]);
   string privateKey=stormap["gostasn1"];
   //cerr<<"PrivateKey.size() = "<<privateKey.size()<<endl;
   //cerr<<makeHexDump(string(privateKey.c_str(), 39))<<endl;
@@ -291,7 +291,7 @@ EC_Domain_Params ECDSADNSCryptoKeyEngine::getECParams(unsigned int algorithm)
   else if(algorithm == 14)
     return EC_Domain_Params("1.3.132.0.34");
   else
-    throw runtime_error("Requested for unknown EC domain parameters for algorithm "+lexical_cast<string>(algorithm));
+    throw runtime_error("Requested for unknown EC domain parameters for algorithm "+to_string(algorithm));
 }
 
 void ECDSADNSCryptoKeyEngine::create(unsigned int bits)
@@ -305,7 +305,7 @@ void ECDSADNSCryptoKeyEngine::create(unsigned int bits)
     params = getECParams(14);
   }
   else {
-    throw runtime_error("Unknown key length of "+lexical_cast<string>(bits)+" bits requested from ECDSA class");
+    throw runtime_error("Unknown key length of "+to_string(bits)+" bits requested from ECDSA class");
   }
   d_key = shared_ptr<ECDSA_PrivateKey>(new ECDSA_PrivateKey(rng, params));
 }
@@ -347,9 +347,9 @@ void ECDSADNSCryptoKeyEngine::fromISCMap(DNSKEYRecordContent& drc, std::map<std:
    Algorithm: 13 (ECDSAP256SHA256)
    PrivateKey: GU6SnQ/Ou+xC5RumuIUIuJZteXT2z0O/ok1s38Et6mQ= */
   
-  drc.d_algorithm = atoi(stormap["algorithm"].c_str());
+  drc.d_algorithm = pdns_stou(stormap["algorithm"]);
   if(drc.d_algorithm != d_algorithm) 
-    throw runtime_error("Tried to feed an algorithm "+lexical_cast<string>(drc.d_algorithm)+" to a "+lexical_cast<string>(d_algorithm)+" key!");
+    throw runtime_error("Tried to feed an algorithm "+to_string(drc.d_algorithm)+" to a "+to_string(d_algorithm)+" key!");
   string privateKey=stormap["privatekey"];
   
   BigInt bigint((byte*)privateKey.c_str(), privateKey.length());
index 282192232c24bbe2e6819e6b788e70a053017a7b..f637a855728b767602af9a5ded6e500ef38da04b 100644 (file)
@@ -78,7 +78,7 @@ BigInt fromRaw(const std::string& raw)
 DNSCryptoKeyEngine::storvector_t BotanRSADNSCryptoKeyEngine::convertToISCVector() const
 {
   storvector_t storvect;
-  string algorithm =  lexical_cast<string>(d_algorithm);
+  string algorithm = std::to_string(d_algorithm);
   if(d_algorithm == 5 || d_algorithm ==7 )
     algorithm += " (RSASHA1)";
   else if(d_algorithm == 8)
@@ -120,7 +120,7 @@ void BotanRSADNSCryptoKeyEngine::fromISCMap(DNSKEYRecordContent& drc, std::map<s
   e=fromRaw(stormap["publicexponent"]);
   n=fromRaw(stormap["modulus"]);
   
-  drc.d_algorithm = atoi(stormap["algorithm"].c_str());
+  drc.d_algorithm = pdns_stou(stormap["algorithm"]);
   if(drc.d_algorithm != d_algorithm) 
     throw runtime_error("Unpossible, loaded a key from storage with wrong algorithm!");
     
index 46949793a206e847443d122b3b2a0e6437e33a11..28543082c07a4b7bf486d8609df1465a7d621784 100644 (file)
@@ -36,7 +36,6 @@
 #include "dns.hh"
 #include "arguments.hh"
 #include "packetcache.hh"
-#include <boost/lexical_cast.hpp>
 
 // #include "namespaces.hh"
 
index 0c4a95d86f9b3f11cbcafd9a915e574a079b6ccb..93497a861c6c41121f567993ac544c7cea59d02d 100644 (file)
@@ -45,7 +45,7 @@ private:
 template<class HASHER, class CURVE, int BITS> void CryptoPPECDSADNSCryptoKeyEngine<HASHER,CURVE,BITS>::create(unsigned int bits)
 {
   if(bits != BITS)
-    throw runtime_error("This CryptoPP class can only hosts keys of length "+lexical_cast<string>(BITS));
+    throw runtime_error("This CryptoPP class can only hosts keys of length "+to_string(BITS));
   AutoSeededRandomPool prng;
   privatekey_t* privateKey = new privatekey_t();
   CryptoPP::OID oid=CURVE();
@@ -68,7 +68,7 @@ DNSCryptoKeyEngine::storvector_t CryptoPPECDSADNSCryptoKeyEngine<HASHER,CURVE,BI
 {
    /* Algorithm: 13 (ECDSAP256SHA256)
    PrivateKey: GU6SnQ/Ou+xC5RumuIUIuJZteXT2z0O/ok1s38Et6mQ= */
-  string algostr=lexical_cast<string>(d_algorithm);
+  string algostr=to_string(d_algorithm);
   if(d_algorithm==13) 
     algostr+=" (ECDSAP256SHA256)";
   else if(d_algorithm==14)
@@ -102,7 +102,7 @@ void CryptoPPECDSADNSCryptoKeyEngine<HASHER,CURVE,BITS>::fromISCMap(DNSKEYRecord
   publickey_t* publicKey = new publickey_t();
   d_key->MakePublicKey(*publicKey);
   d_pubkey = shared_ptr<publickey_t>(publicKey);
-  drc.d_algorithm = atoi(stormap["algorithm"].c_str());
+  drc.d_algorithm = pdns_stou(stormap["algorithm"]);
 }
 
 template<class HASHER, class CURVE, int BITS>
index 393001541ffd8f1e266f53484fee78068e2776f8..c49df1de00d46ddf37675747e9ae75cd96bb60b8 100644 (file)
@@ -85,7 +85,7 @@ bool DNSSECKeeper::addKey(const DNSName& name, bool keyOrZone, int algorithm, in
       else if(algorithm == 14) // ECDSAP384SHA384
         bits = 384;
       else {
-        throw runtime_error("Can't guess key size for algorithm "+lexical_cast<string>(algorithm));
+        throw runtime_error("Can't guess key size for algorithm "+std::to_string(algorithm));
       }
     }
   }
@@ -158,7 +158,7 @@ DNSSECPrivateKey DNSSECKeeper::getKeyById(const DNSName& zname, unsigned int id)
     
     return dpk;    
   }
-  throw runtime_error("Can't find a key with id "+lexical_cast<string>(id)+" for zone '"+zname.toString()+"'");
+  throw runtime_error("Can't find a key with id "+std::to_string(id)+" for zone '"+zname.toString()+"'");
 }
 
 
index 53c39f30d48aa3f451f81515d308a87f9c64455a..d3995e9c1a4e67fbf17f7ed1502f72cc9787a5fa 100644 (file)
@@ -7,7 +7,6 @@
 #include <iostream>
 #include <unistd.h>
 #include "misc.hh"
-#include <boost/lexical_cast.hpp>
 #include "syncres.hh"
 
 #include "namespaces.hh"
@@ -75,7 +74,7 @@ void DevPollFDMultiplexer::addFD(callbackmap_t& cbmap, int fd, callbackfunc_t to
 void DevPollFDMultiplexer::removeFD(callbackmap_t& cbmap, int fd)
 {
   if(!cbmap.erase(fd))
-    throw FDMultiplexerException("Tried to remove unlisted fd "+lexical_cast<string>(fd)+ " from multiplexer");
+    throw FDMultiplexerException("Tried to remove unlisted fd "+std::to_string(fd)+ " from multiplexer");
 
   struct pollfd devent;
   devent.fd=fd;
index e466b11fff2b6ebc506907f8ac5bc0b6703b4466..f36738ce59e4a3ff9a928e2f091e68252e3b8513 100644 (file)
@@ -6,7 +6,6 @@
 #include <stdexcept>
 #include <iostream>
 #include <boost/algorithm/string.hpp>
-#include <boost/lexical_cast.hpp>
 #include <boost/assign/list_of.hpp>
 #include "dnsparser.hh"
 
@@ -38,7 +37,7 @@ std::vector<std::string> RCode::rcodes_s = boost::assign::list_of
 
 std::string RCode::to_s(unsigned short rcode) {
   if (rcode > RCode::rcodes_s.size()-1 ) 
-    return std::string("Err#")+boost::lexical_cast<std::string>(rcode);
+    return std::string("Err#")+std::to_string(rcode);
   return RCode::rcodes_s[rcode];
 }
 
@@ -58,7 +57,7 @@ public:
   {
     if(offset < d_length)
       return d_ptr[offset];
-    throw runtime_error("out of bounds: "+boost::lexical_cast<string>(offset)+" >= " + boost::lexical_cast<string>(d_length));
+    throw runtime_error("out of bounds: "+std::to_string(offset)+" >= " + std::to_string(d_length));
   }
 private:  
   const char* d_ptr;
index 3e96807a05ffe4dd6e34eb810dd9b98051745c7d..296577d04505af5ba54d560ba21657b4b28835eb 100644 (file)
@@ -351,19 +351,19 @@ void fillSOAData(const string &content, SOAData &data)
   if(pleft>1) 
     data.hostmaster=DNSName(attodot(parts[1])); // ahu@ds9a.nl -> ahu.ds9a.nl, piet.puk@ds9a.nl -> piet\.puk.ds9a.nl
 
-  data.serial = pleft > 2 ? pdns_strtoui(parts[2].c_str(), NULL, 10) : 0;
+  data.serial = pleft > 2 ? pdns_stou(parts[2]) : 0;
   if (data.serial == UINT_MAX && errno == ERANGE) throw PDNSException("serial number too large in '"+parts[2]+"'");
 
-  data.refresh = pleft > 3 ? atoi(parts[3].c_str())
+  data.refresh = pleft > 3 ? pdns_stou(parts[3])
         : ::arg().asNum("soa-refresh-default");
 
-  data.retry = pleft > 4 ? atoi(parts[4].c_str())
+  data.retry = pleft > 4 ? pdns_stou(parts[4].c_str())
         : ::arg().asNum("soa-retry-default");
 
-  data.expire = pleft > 5 ? atoi(parts[5].c_str())
+  data.expire = pleft > 5 ? pdns_stou(parts[5].c_str())
         : ::arg().asNum("soa-expire-default");
 
-  data.default_ttl = pleft > 6 ?atoi(parts[6].c_str())
+  data.default_ttl = pleft > 6 ? pdns_stou(parts[6].c_str())
         : ::arg().asNum("soa-minimum-ttl");
 }
 
index 43b1326a1c126d9feaa0d3949855f2ee30665c28..a42caf8d898521bce833dda47c84ae973cebdff4 100644 (file)
@@ -132,7 +132,7 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
                        }
                        
                        if(vars.count("qps")) {
-                         int qps=boost::lexical_cast<int>(boost::get<string>(vars["qps"]));
+                         int qps=std::stoi(boost::get<string>(vars["qps"]));
                          ret->qps=QPSLimiter(qps, qps);
                        }
 
@@ -147,23 +147,23 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
                        }
 
                        if(vars.count("order")) {
-                         ret->order=boost::lexical_cast<int>(boost::get<string>(vars["order"]));
+                         ret->order=std::stoi(boost::get<string>(vars["order"]));
                        }
 
                        if(vars.count("weight")) {
-                         ret->weight=boost::lexical_cast<int>(boost::get<string>(vars["weight"]));
+                         ret->weight=std::stoi(boost::get<string>(vars["weight"]));
                        }
 
                        if(vars.count("retries")) {
-                         ret->retries=boost::lexical_cast<int>(boost::get<string>(vars["retries"]));
+                         ret->retries=std::stoi(boost::get<string>(vars["retries"]));
                        }
 
                        if(vars.count("tcpSendTimeout")) {
-                         ret->tcpSendTimeout=boost::lexical_cast<int>(boost::get<string>(vars["tcpSendTimeout"]));
+                         ret->tcpSendTimeout=std::stoi(boost::get<string>(vars["tcpSendTimeout"]));
                        }
 
                        if(vars.count("tcpRecvTimeout")) {
-                         ret->tcpRecvTimeout=boost::lexical_cast<int>(boost::get<string>(vars["tcpRecvTimeout"]));
+                         ret->tcpRecvTimeout=std::stoi(boost::get<string>(vars["tcpRecvTimeout"]));
                        }
 
                        if(vars.count("name")) {
index 69ef44e8ab6a5fbfc5d752b17676c71802349e29..8ebd3354c4d8cce4bec5691abf96132e16dad000 100644 (file)
@@ -575,7 +575,7 @@ try
        break;
 
       case DNSAction::Action::Delay:
-       delayMsec = atoi(ruleresult.c_str()); // sorry
+       delayMsec = static_cast<int>(pdns_stou(ruleresult)); // sorry
        break;
       case DNSAction::Action::Allow:
       case DNSAction::Action::None:
index 03d4b1338c2d89d96a50f63fb3e8e066f5c1e5dd..2d636d82fcfc193b11aceb56179c3f721d76fce3 100644 (file)
@@ -22,7 +22,6 @@
 
 #include "dnsparser.hh"
 #include "dnswriter.hh"
-#include <boost/lexical_cast.hpp>
 #include <boost/algorithm/string.hpp>
 #include <boost/format.hpp>
 
@@ -43,9 +42,9 @@ public:
     vector<string> parts;
     stringtok(parts, zone);
     if(parts.size()!=3 && !(parts.size()==2 && equals(parts[1],"0")) )
-      throw MOADNSException("Unknown record was stored incorrectly, need 3 fields, got "+lexical_cast<string>(parts.size())+": "+zone );
+      throw MOADNSException("Unknown record was stored incorrectly, need 3 fields, got "+std::to_string(parts.size())+": "+zone );
     const string& relevant=(parts.size() > 2) ? parts[2] : "";
-    unsigned int total=atoi(parts[1].c_str());
+    unsigned int total=pdns_stou(parts[1]);
     if(relevant.size()!=2*total)
       throw MOADNSException((boost::format("invalid unknown record length for label %s: size not equal to length field (%d != %d)") % d_dr.d_name.toString() % relevant.size() % (2*total)).str());
     string out;
@@ -240,7 +239,7 @@ void MOADNSParser::init(const char *packet, unsigned int len)
   memcpy(&d_header, packet, sizeof(dnsheader));
 
   if(d_header.opcode != Opcode::Query && d_header.opcode != Opcode::Notify && d_header.opcode != Opcode::Update)
-    throw MOADNSException("Can't parse non-query packet with opcode="+ lexical_cast<string>(d_header.opcode));
+    throw MOADNSException("Can't parse non-query packet with opcode="+ std::to_string(d_header.opcode));
 
   d_header.qdcount=ntohs(d_header.qdcount);
   d_header.ancount=ntohs(d_header.ancount);
@@ -300,8 +299,8 @@ void MOADNSParser::init(const char *packet, unsigned int len)
 
 #if 0    
     if(pr.d_pos!=contentlen) {
-      throw MOADNSException("Packet ("+d_qname+"|#"+lexical_cast<string>(d_qtype)+") has trailing garbage ("+ lexical_cast<string>(pr.d_pos) + " < " + 
-                            lexical_cast<string>(contentlen) + ")");
+      throw MOADNSException("Packet ("+d_qname+"|#"+std::to_string(d_qtype)+") has trailing garbage ("+ std::to_string(pr.d_pos) + " < " + 
+                            std::to_string(contentlen) + ")");
     }
 #endif 
   }
@@ -318,8 +317,8 @@ void MOADNSParser::init(const char *packet, unsigned int len)
       }
     }
     else {
-      throw MOADNSException("Error parsing packet of "+lexical_cast<string>(len)+" bytes (rd="+
-                            lexical_cast<string>(d_header.rd)+
+      throw MOADNSException("Error parsing packet of "+std::to_string(len)+" bytes (rd="+
+                            std::to_string(d_header.rd)+
                             "), out of bounds: "+string(re.what()));
     }
   }
@@ -622,8 +621,8 @@ private:
   {
     d_notyouroffset += by;
     if(d_notyouroffset > d_packet.length())
-      throw std::out_of_range("dns packet out of range: "+lexical_cast<string>(d_notyouroffset) +" > " 
-      + lexical_cast<string>(d_packet.length()) );
+      throw std::out_of_range("dns packet out of range: "+std::to_string(d_notyouroffset) +" > " 
+      + std::to_string(d_packet.length()) );
   }
   std::string& d_packet;
   
index 50e24105063c8132a11cf8804c8086a404a7aaa4..17d2a57fa889185722bcf72231c1f97021e47bfe 100644 (file)
@@ -32,7 +32,6 @@
 // #include <netinet/in.h>
 #include "misc.hh"
 
-#include <boost/lexical_cast.hpp>
 #include <boost/tuple/tuple.hpp>
 #include <boost/tuple/tuple_comparison.hpp>
 #include "dns.hh"
@@ -220,7 +219,7 @@ public:
       return iter->second.second;
     
     if(boost::starts_with(name, "TYPE"))
-        return atoi(name.c_str()+4);
+      return pdns_stou(name.substr(4));
     
     throw runtime_error("Unknown DNS type '"+name+"'");
   }
@@ -229,8 +228,8 @@ public:
   {
     t2namemap_t::const_iterator iter = getT2Namemap().find(make_pair(classnum, num));
     if(iter == getT2Namemap().end()) 
-      return "TYPE" + lexical_cast<string>(num);
-      //      throw runtime_error("Unknown DNS type with numerical id "+lexical_cast<string>(num));
+      return "TYPE" + std::to_string(num);
+      //      throw runtime_error("Unknown DNS type with numerical id "+std::to_string(num));
     return iter->second;
   }
 
index 80db44fd84547cbd3e128246be6c7b22a48613ff..5e89bbc312a6e9ec1313556dfee2b08331b51959 100644 (file)
@@ -136,7 +136,7 @@ ComboAddress AAAARecordContent::getCA(int port) const
 void ARecordContent::doRecordCheck(const DNSRecord& dr)
 {  
   if(dr.d_clen!=4)
-    throw MOADNSException("Wrong size for A record ("+lexical_cast<string>(dr.d_clen)+")");
+    throw MOADNSException("Wrong size for A record ("+std::to_string(dr.d_clen)+")");
 }
 
 boilerplate_conv(AAAA, QType::AAAA, conv.xfrIP6(d_ip6); );
index 768ddeb2379690e7f08cb6fc69d01d1b5a2babec..0cdff09b8ce57071e56df15febf882050eb1ad4f 100644 (file)
@@ -26,7 +26,6 @@
 #include "dnsparser.hh"
 #include "dnswriter.hh"
 #include "rcpgenerator.hh"
-#include <boost/lexical_cast.hpp>
 #include <set>
 #include <bitset>
 #include "namespaces.hh"
index 357f20a0075e04735803432502e64ca498e16f5d..05d3cfc2306d8a716664cfba45dec177ba9ef6ba 100644 (file)
@@ -61,8 +61,8 @@ DNSCryptoKeyEngine* DNSCryptoKeyEngine::makeFromISCString(DNSKEYRecordContent& d
     tie(key,value)=splitField(sline, ':');
     trim(value);
     if(pdns_iequals(key,"algorithm")) {
-      algorithm = atoi(value.c_str());
-      stormap["algorithm"]=lexical_cast<string>(algorithm);
+      algorithm = pdns_stou(value);
+      stormap["algorithm"]=std::to_string(algorithm);
       continue;
     } else if (pdns_iequals(key,"pin")) {
       stormap["pin"]=value;
@@ -127,7 +127,7 @@ DNSCryptoKeyEngine* DNSCryptoKeyEngine::make(unsigned int algo)
   if(iter != makers.end())
     return (iter->second)(algo);
   else {
-    throw runtime_error("Request to create key object for unknown algorithm number "+lexical_cast<string>(algo));
+    throw runtime_error("Request to create key object for unknown algorithm number "+std::to_string(algo));
   }
 }
 
@@ -206,7 +206,7 @@ pair<unsigned int, unsigned int> DNSCryptoKeyEngine::testMakers(unsigned int alg
   else if(algo == 14) // ECDSAP384SHA384
     bits = 384;
   else
-    throw runtime_error("Can't guess key size for algorithm "+lexical_cast<string>(algo));
+    throw runtime_error("Can't guess key size for algorithm "+std::to_string(algo));
 
   dckeCreate->create(bits);
 
@@ -221,8 +221,8 @@ pair<unsigned int, unsigned int> DNSCryptoKeyEngine::testMakers(unsigned int alg
       tie(key,value)=splitField(sline, ':');
       trim(value);
       if(pdns_iequals(key,"algorithm")) {
-        algorithm = atoi(value.c_str());
-        stormap["algorithm"]=lexical_cast<string>(algorithm);
+        algorithm = pdns_stou(value);
+        stormap["algorithm"]=std::to_string(algorithm);
         continue;
       } else if (pdns_iequals(key,"pin")) {
         stormap["pin"]=value;
@@ -231,8 +231,8 @@ pair<unsigned int, unsigned int> DNSCryptoKeyEngine::testMakers(unsigned int alg
         stormap["engine"]=value;
         continue;
       } else if (pdns_iequals(key,"slot")) {
-        int slot = atoi(value.c_str());
-        stormap["slot"]=lexical_cast<string>(slot);
+        int slot = std::stoi(value);
+        stormap["slot"]=std::to_string(slot);
         continue;
       }  else if (pdns_iequals(key,"label")) {
         stormap["label"]=value;
@@ -350,7 +350,7 @@ DSRecordContent makeDSFromDNSKey(const DNSName& qname, const DNSKEYRecordContent
     dsrc.d_digest = dpk->hash(toHash);
   }
   else 
-    throw std::runtime_error("Asked to a DS of unknown digest type " + lexical_cast<string>(digest)+"\n");
+    throw std::runtime_error("Asked to a DS of unknown digest type " + std::to_string(digest)+"\n");
   
   dsrc.d_algorithm= drc.d_algorithm;
   dsrc.d_digesttype=digest;
@@ -480,7 +480,7 @@ void decodeDERIntegerSequence(const std::string& input, vector<string>& output)
     for(;;) {
       uint8_t kind = de.getByte();
       if(kind != 0x02) 
-        throw runtime_error("DER Sequence contained non-INTEGER component: "+lexical_cast<string>((unsigned int)kind) );
+        throw runtime_error("DER Sequence contained non-INTEGER component: "+std::to_string(static_cast<unsigned int>(kind)) );
       len = de.getLength();
       ret = de.getBytes(len);
       output.push_back(ret);
index 5c0f5819ef98d8a9170248832d0652adcccae9fa..e141c54856b8041da094b10a92f74f11f4af5b58 100644 (file)
@@ -384,7 +384,7 @@ string DLTokenLogin(const vector<string>&parts, Utility::pid_t ppid)
   return "PKCS#11 support not compiled in";
 #else
   if (parts.size() != 4) {
-    return "invalid number of parameters, needs 4, got " + boost::lexical_cast<string>(parts.size());
+    return "invalid number of parameters, needs 4, got " + std::to_string(parts.size());
   }
 
   if (PKCS11ModuleSlotLogin(parts[1], parts[2], parts[3])) {
index a079c2fa30d9c35b96765f6a6ec7c4e69336bf4c..282b919bece3d9713e51209fc5a614cce82dbfec 100644 (file)
@@ -106,7 +106,7 @@ int main(int argc, char **argv)
     else {
       uint16_t port;
       try {
-        port  = lexical_cast<uint16_t>(::arg()["remote-port"]);
+        port = static_cast<uint16_t>(pdns_stou(::arg()["remote-port"]));
       }
       catch(...) {
         cerr<<"Unable to convert '"<<::arg()["remote-port"]<<"' to a port number for connecting to remote PowerDNS\n";
index c647ae99007a4df7600075e0f545e002875769aa..67a9d364186c15505c7dd7ea5d57f23cdec945dd 100644 (file)
@@ -6,7 +6,6 @@
 #include <iostream>
 #include <unistd.h>
 #include "misc.hh"
-#include <boost/lexical_cast.hpp>
 #include "syncres.hh"
 #ifdef __linux__
 #include <sys/epoll.h>
@@ -95,7 +94,7 @@ void EpollFDMultiplexer::addFD(callbackmap_t& cbmap, int fd, callbackfunc_t toDo
 void EpollFDMultiplexer::removeFD(callbackmap_t& cbmap, int fd)
 {
   if(!cbmap.erase(fd))
-    throw FDMultiplexerException("Tried to remove unlisted fd "+lexical_cast<string>(fd)+ " from multiplexer");
+    throw FDMultiplexerException("Tried to remove unlisted fd "+std::to_string(fd)+ " from multiplexer");
 
   struct epoll_event dummy;
   dummy.events = 0;
index da47631251ad77923a4d6795c7e67e92e5e824a6..7cc4ff396690a999a68955b616727e340f6d3bb1 100644 (file)
@@ -91,7 +91,7 @@ public:
     buffer.value = (void*)name.c_str();
     maj = gss_import_name(&min, &buffer, (gss_OID)GSS_KRB5_NT_PRINCIPAL_NAME, &comp);
     if (maj != GSS_S_COMPLETE)
-      throw PDNSException("Could not import " + name + ": " + boost::lexical_cast<std::string>(maj) + string(",") + boost::lexical_cast<std::string>(min));
+      throw PDNSException("Could not import " + name + ": " + std::to_string(maj) + string(",") + std::to_string(min));
     // do comparison
     maj = gss_compare_name(&min, d_name, comp, &result);
     gss_release_name(&min, &comp);
index 63662128ac96eac21c616af8e548091df3f327ad..e15d26a9547295e8627a4e27d606b93d9e147c6c 100644 (file)
 #include "misc.hh"
 #include <sys/socket.h>
 #include <netdb.h>
-
+#include <sstream>
 #include <boost/tuple/tuple.hpp>
 #include <boost/tuple/tuple_comparison.hpp>
-#include <boost/lexical_cast.hpp>
 
 #include "namespaces.hh"
 
@@ -220,9 +219,9 @@ union ComboAddress {
   string toStringWithPort() const
   {
     if(sin4.sin_family==AF_INET)
-      return toString() + ":" + boost::lexical_cast<string>(ntohs(sin4.sin_port));
+      return toString() + ":" + std::to_string(ntohs(sin4.sin_port));
     else
-      return "["+toString() + "]:" + boost::lexical_cast<string>(ntohs(sin4.sin_port));
+      return "["+toString() + "]:" + std::to_string(ntohs(sin4.sin_port));
   }
 
   void truncate(unsigned int bits);
@@ -280,7 +279,7 @@ public:
     d_network=makeComboAddress(split.first);
     
     if(!split.second.empty()) {
-      d_bits = lexical_cast<unsigned int>(split.second);
+      d_bits = pdns_stou(split.second);
       if(d_bits<32)
         d_mask=~(0xFFFFFFFF>>d_bits);
       else
@@ -344,7 +343,7 @@ public:
 
   string toString() const
   {
-    return d_network.toString()+"/"+boost::lexical_cast<string>((unsigned int)d_bits);
+    return d_network.toString()+"/"+std::to_string((unsigned int)d_bits);
   }
 
   string toStringNoMask() const
index 2124f8d323372f972166554aa9eaabff2e4273e9..ee6022afeacdf7f05eadc3b722c374b97e0524f3 100644 (file)
@@ -41,7 +41,7 @@ int intFromJson(const Value& container, const char* key)
   if (val.IsInt()) {
     return val.GetInt();
   } else if (val.IsString()) {
-    return atoi(val.GetString());
+    return std::stoi(val.GetString());
   } else {
     throw JsonException("Key '" + string(key) + "' not an Integer or not present");
   }
@@ -56,7 +56,7 @@ int intFromJson(const Value& container, const char* key, const int default_value
   if (val.IsInt()) {
     return val.GetInt();
   } else if (val.IsString()) {
-    return atoi(val.GetString());
+    return std::stoi(val.GetString());
   } else {
     // TODO: check if value really isn't present
     return default_value;
index 6d469baae4bea31ee8a7e83e6cf1de691a602af8..e6ef8a3fd08b18a12c14448dfeaeccf1b1de4734 100644 (file)
@@ -6,7 +6,6 @@
 #include <iostream>
 #include <unistd.h>
 #include "misc.hh"
-#include <boost/lexical_cast.hpp>
 #include "syncres.hh"
 #include <sys/types.h>
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
index 95a98bba1043adc88ef33512e601fa9889cdbfc0..61c9185d17bc96ffe5102b98a79d182dcabf6548 100644 (file)
@@ -277,7 +277,7 @@ int makeIPv6sockaddr(const std::string& addr, struct sockaddr_in6* ret)
     if(pos == string::npos || pos + 2 > addr.size() || addr[pos+1]!=':')
       return -1;
     ourAddr.assign(addr.c_str() + 1, pos-1);
-    port = atoi(addr.c_str()+pos+2);  
+    port = pdns_stou(addr.substr(pos+2));
   }
   ret->sin6_scope_id=0;
   ret->sin6_family=AF_INET6;
index 56c02ca2169a4d4fc34d611d944b8e8e2c972e2c..36f9aafd3127854bda6f6d4278b6be6b53be7ace 100644 (file)
@@ -142,7 +142,7 @@ int getFakePTRRecords(const DNSName& qname, const std::string& prefix, vector<DN
   string newquery;
   for(int n = 0; n < 4; ++n) {
     newquery +=
-      lexical_cast<string>(strtol(parts[n*2].c_str(), 0, 16) + 16*strtol(parts[n*2+1].c_str(), 0, 16));
+      std::to_string(std::stol(parts[n*2], 0, 16) + 16*std::stol(parts[n*2+1], 0, 16));
     newquery.append(1,'.');
   }
   newquery += "in-addr.arpa.";
index 181fab13705ce26f816bb6766e81d0e83d8f75d4..7fa27ebc5538d43c09cf7e03e93de44e116a75b4 100644 (file)
@@ -38,7 +38,6 @@
 #include "dns.hh"
 #include "arguments.hh"
 #include "packetcache.hh"
-#include <boost/lexical_cast.hpp>
 
 #include "namespaces.hh"
 
index 6e89a0688a851903d063b6f61072668ed74c745b..9af1205f79ed517a0bef98fb60bb84988fa74ca4 100644 (file)
@@ -206,7 +206,7 @@ std::string RSADNSCryptoKeyEngine::hash(const std::string& toHash) const
     mbedtls_sha512((unsigned char*)toHash.c_str(), toHash.length(), hash, 0);
     return string((char*)hash, sizeof(hash));
   }
-  throw runtime_error("mbed TLS hashing method can't hash algorithm "+lexical_cast<string>(d_algorithm));
+  throw runtime_error("mbed TLS hashing method can't hash algorithm "+std::to_string(d_algorithm));
 }
 
 
@@ -223,7 +223,7 @@ DNSCryptoKeyEngine::storvector_t RSADNSCryptoKeyEngine::convertToISCVector() con
     ("Exponent2",&d_context.DQ)
     ("Coefficient",&d_context.QP);
 
-  string algorithm=lexical_cast<string>(d_algorithm);
+  string algorithm=std::to_string(d_algorithm);
   switch(d_algorithm) {
     case 5:
     case 7 :
@@ -262,7 +262,7 @@ void RSADNSCryptoKeyEngine::fromISCMap(DNSKEYRecordContent& drc,  std::map<std::
   places["Exponent2"]=&d_context.DQ;
   places["Coefficient"]=&d_context.QP;
   
-  drc.d_algorithm = atoi(stormap["algorithm"].c_str());
+  drc.d_algorithm = pdns_stou(stormap["algorithm"]);
   
   string raw;
   for(const places_t::value_type& val :  places) {
index 9c3e33c65cf16bcf2e1f3295ef3d50f6a2614c34..b1fd3cf32f4c35c317372c4489de8823a5d68d7d 100644 (file)
@@ -302,7 +302,7 @@ static void parseService4(const string &descr, ServiceTuple &st)
     throw PDNSException("Unable to parse '"+descr+"' as a service");
   st.host=parts[0];
   if(parts.size()>1)
-    st.port=atoi(parts[1].c_str());
+    st.port=pdns_stou(parts[1]);
 }
 
 static void parseService6(const string &descr, ServiceTuple &st)
@@ -313,7 +313,7 @@ static void parseService6(const string &descr, ServiceTuple &st)
 
   st.host=descr.substr(1, pos-1);
   if(pos + 2 < descr.length())
-    st.port=atoi(descr.c_str() + pos +2);
+    st.port=pdns_stou(descr.substr(pos+2));
 }
 
 
@@ -760,7 +760,7 @@ int makeIPv6sockaddr(const std::string& addr, struct sockaddr_in6* ret)
     if(pos == string::npos || pos + 2 > addr.size() || addr[pos+1]!=':')
       return -1;
     ourAddr.assign(addr.c_str() + 1, pos-1);
-    port = atoi(addr.c_str()+pos+2);
+    port = pdns_stou(addr.substr(pos+2));
   }
   ret->sin6_scope_id=0;
   ret->sin6_family=AF_INET6;
@@ -1091,13 +1091,13 @@ uint64_t udpErrorStats(const std::string& str)
       if(parts.size() < 7)
        break;
       if(str=="udp-rcvbuf-errors")
-       return boost::lexical_cast<uint64_t>(parts[5]);
+       return std::stoull(parts[5]);
       else if(str=="udp-sndbuf-errors")
-       return boost::lexical_cast<uint64_t>(parts[6]);
+       return std::stoull(parts[6]);
       else if(str=="udp-noport-errors")
-       return boost::lexical_cast<uint64_t>(parts[2]);
+       return std::stoull(parts[2]);
       else if(str=="udp-in-errors")
-       return boost::lexical_cast<uint64_t>(parts[3]);
+       return std::stoull(parts[3]);
       else
        return 0;
     }
@@ -1152,7 +1152,12 @@ uint64_t getOpenFileDescriptors(const std::string&)
   struct dirent *entry;
   int ret=0;
   while((entry = readdir(dirhdl))) {
-    uint32_t num = atoi(entry->d_name);
+    uint32_t num;
+    try {
+      num = pdns_stou(entry->d_name);
+    } catch (...) {
+      continue; // was not a number.
+    }
     if(std::to_string(num) == entry->d_name)
       ret++;
   }
@@ -1175,7 +1180,7 @@ uint64_t getRealMemoryUsage(const std::string&)
   string header("Private_Dirty:");
   while(getline(ifs, line)) {
     if(boost::starts_with(line, header)) {
-      bytes += atoi(line.c_str() + header.length() +1)*1024;
+      bytes += std::stoull(line.substr(header.length() + 1))*1024;
     }
   }
   return bytes;
@@ -1270,7 +1275,7 @@ gid_t strToGID(const string &str)
   return result;
 }
 
-unsigned int pdns_stou(const std::string& str, size_t * idx, int base);
+unsigned int pdns_stou(const std::string& str, size_t * idx, int base)
 {
   if (str.empty()) return 0; // compability
   unsigned long result = std::stoul(str, idx, base);
index 850ebcb474310cdfa3948028c6cdf0e8a09b451c..13541259ba7e26dd65b4c3a9183569424d7688f9 100644 (file)
@@ -5,7 +5,6 @@
 #include <boost/shared_array.hpp>
 #include <boost/tuple/tuple.hpp>
 #include <boost/tuple/tuple_comparison.hpp>
-#include <boost/lexical_cast.hpp>
 #include <vector>
 #include <map>
 #include <stdexcept>
@@ -87,7 +86,7 @@ public:
   virtual funcparam_t& getReadParameter(int fd) 
   {
     if(!d_readCallbacks.count(fd))
-      throw FDMultiplexerException("attempt to look up data in multiplexer for unlisted fd "+boost::lexical_cast<std::string>(fd));
+      throw FDMultiplexerException("attempt to look up data in multiplexer for unlisted fd "+std::to_string(fd));
     return d_readCallbacks[fd].d_parameter;
   }
 
@@ -129,14 +128,14 @@ protected:
     memset(&cb.d_ttd, 0, sizeof(cb.d_ttd));
   
     if(cbmap.count(fd))
-      throw FDMultiplexerException("Tried to add fd "+boost::lexical_cast<std::string>(fd)+ " to multiplexer twice");
+      throw FDMultiplexerException("Tried to add fd "+std::to_string(fd)+ " to multiplexer twice");
     cbmap[fd]=cb;
   }
 
   void accountingRemoveFD(callbackmap_t& cbmap, int fd) 
   {
     if(!cbmap.erase(fd)) 
-      throw FDMultiplexerException("Tried to remove unlisted fd "+boost::lexical_cast<std::string>(fd)+ " from multiplexer");
+      throw FDMultiplexerException("Tried to remove unlisted fd "+std::to_string(fd)+ " from multiplexer");
   }
 };
 
index 84f95d44c5bc144ef78c31a545e85f968e121dc8..4e66d52a38eec3eb7fffdc087a9a574a050472ec 100644 (file)
@@ -1,6 +1,5 @@
 #ifndef PDNS_NAMESPACES_HH
 #define PDNS_NAMESPACES_HH
-#include <boost/lexical_cast.hpp>
 #include <boost/tuple/tuple.hpp>
 
 #include <boost/shared_array.hpp>
@@ -37,7 +36,6 @@ using std::min; // these are a bit scary, everybody uses 'min'
 using std::max;
 using std::string;
 
-using boost::lexical_cast;
 using boost::tie;
 using std::shared_ptr;
 using std::unique_ptr;
index 1b496df66f0568863b90e53ad717fb317347f974..c82468e76a7528b37ed61e13710a28dd6c516149 100644 (file)
@@ -275,7 +275,7 @@ try
 
   if(g_vm.count("setgid")) {
     if(setgid(g_vm["setgid"].as<int>()) < 0)
-      throw runtime_error("while changing gid to "+boost::lexical_cast<std::string>(g_vm["setgid"].as<int>()));
+      throw runtime_error("while changing gid to "+std::to_string(g_vm["setgid"].as<int>()));
     syslogFmt(boost::format("Changed gid to %d") % g_vm["setgid"].as<int>());
     if(setgroups(0, NULL) < 0)
       throw runtime_error("while dropping supplementary groups");
@@ -283,7 +283,7 @@ try
 
   if(g_vm.count("setuid")) {
     if(setuid(g_vm["setuid"].as<int>()) < 0)
-      throw runtime_error("while changing uid to "+boost::lexical_cast<std::string>(g_vm["setuid"].as<int>()));
+      throw runtime_error("while changing uid to "+std::to_string(g_vm["setuid"].as<int>()));
     syslogFmt(boost::format("Changed uid to %d") % g_vm["setuid"].as<int>());
   }
 
index ae0e9796c14211f3a8179f4672eb9a4217e82f8e..d6217e412dd210b1cfb90613ae5a15457f6b918a 100644 (file)
@@ -221,7 +221,7 @@ bool PacketHandler::addCDS(DNSPacket *p, DNSPacket *r, const SOAData& sd)
       continue;
     }
     for(auto const &digestAlgo : digestAlgos){
-      rr.content=makeDSFromDNSKey(p->qdomain, value.first.getDNSKEY(), lexical_cast<int>(digestAlgo)).getZoneRepresentation();
+      rr.content=makeDSFromDNSKey(p->qdomain, value.first.getDNSKEY(), std::stoi(digestAlgo)).getZoneRepresentation();
       r->addRecord(rr);
       haveOne=true;
     }
index acfa45c860c6a3420f91eb8154dadd0f0aae3374..8ae0f05e04f7d5d1aa9203e04769603267be76e4 100644 (file)
@@ -1,7 +1,6 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
-#include <boost/lexical_cast.hpp>
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/ordered_index.hpp>
 #include <boost/tuple/tuple_comparison.hpp>
@@ -18,6 +17,6 @@
 int main()
 {
         ostringstream str;
-        str << "Everything is ok!"<< boost::lexical_cast<string>("") <<"\n";
+        str << "Everything is ok!"<<"\n"; // FIXME400: boost test?
         exit(0);
 }
index 30387464f30a89851d114a4ca58aea8e809e4925..b92e30c9871f36a6356cb3c5504a06aca14e8ff8 100644 (file)
@@ -56,7 +56,6 @@ extern SortList g_sortlist;
 #include <boost/tuple/tuple.hpp>
 #include <boost/tuple/tuple_comparison.hpp>
 #include <boost/shared_array.hpp>
-#include <boost/lexical_cast.hpp>
 #include <boost/function.hpp>
 #include <boost/algorithm/string.hpp>
 #ifdef MALLOC_TRACE
@@ -382,7 +381,7 @@ public:
   {
     socks_t::iterator i=d_socks.find(fd);
     if(i==d_socks.end()) {
-      throw PDNSException("Trying to return a socket (fd="+lexical_cast<string>(fd)+") not in the pool");
+      throw PDNSException("Trying to return a socket (fd="+std::to_string(fd)+") not in the pool");
     }
     returnSocketLocked(i);
   }
@@ -414,7 +413,7 @@ public:
       return ret;
 
     if(ret<0)
-      throw PDNSException("Making a socket for resolver (family = "+lexical_cast<string>(family)+"): "+stringerror());
+      throw PDNSException("Making a socket for resolver (family = "+std::to_string(family)+"): "+stringerror());
 
     setCloseOnExec(ret);
 
@@ -974,7 +973,7 @@ void makeControlChannelSocket(int processNum=-1)
 {
   string sockname=::arg()["socket-dir"]+"/"+s_programname;
   if(processNum >= 0)
-    sockname += "."+lexical_cast<string>(processNum);
+    sockname += "."+std::to_string(processNum);
   sockname+=".controlsocket";
   s_rcc.listen(sockname);
 
@@ -1421,7 +1420,7 @@ void makeUDPServerSockets()
 
     int socklen=sin.sin4.sin_family==AF_INET ? sizeof(sin.sin4) : sizeof(sin.sin6);
     if (::bind(fd, (struct sockaddr *)&sin, socklen)<0)
-      throw PDNSException("Resolver binding to server socket on port "+ lexical_cast<string>(st.port) +" for "+ st.host+": "+stringerror());
+      throw PDNSException("Resolver binding to server socket on port "+ std::to_string(st.port) +" for "+ st.host+": "+stringerror());
 
     setNonBlocking(fd);
 
@@ -2023,7 +2022,7 @@ static void checkLinuxIPv6Limits()
 #ifdef __linux__
   string line;
   if(readFileIfThere("/proc/sys/net/ipv6/route/max_size", &line)) {
-    int lim=atoi(line.c_str());
+    int lim=std::stoi(line);
     if(lim < 16384) {
       L<<Logger::Error<<"If using IPv6, please raise sysctl net.ipv6.route.max_size, currently set to "<<lim<<" which is < 16384"<<endl;
     }
index ad8a2c55a254fc460fbbaafaafc7a5b0737d54e4..857c5901f077936f813bccacc7c2185950cc66a9 100644 (file)
@@ -374,7 +374,7 @@ void dbBench(const std::string& fname)
     while(B.get(rr)) {
       hits++;
     }
-    B.lookup(QType(QType::A), DNSName(boost::lexical_cast<string>(random()))+domain);
+    B.lookup(QType(QType::A), DNSName(std::to_string(random()))+domain);
     while(B.get(rr)) {
     }
     misses++;
@@ -796,7 +796,7 @@ void listKey(DomainInfo const &di, DNSSECKeeper& dk, bool printHeader = true) {
 
     cout<<(key.second.keyOrZone ? "KSK" : "ZSK")<<"     ";
 
-    spacelen = (lexical_cast<string>(key.first.getKey()->getBits()).length() >= 8) ? 1 : 8 - lexical_cast<string>(key.first.getKey()->getBits()).length();
+    spacelen = (std::to_string(key.first.getKey()->getBits()).length() >= 8) ? 1 : 8 - std::to_string(key.first.getKey()->getBits()).length();
     if (key.first.getKey()->getBits() < 1) {
       cout<<"invalid "<<endl;
       continue; 
@@ -809,7 +809,7 @@ void listKey(DomainInfo const &di, DNSSECKeeper& dk, bool printHeader = true) {
     spacelen = (algname.length() >= 13) ? 1 : 13 - algname.length();
     cout<<algname<<string(spacelen, ' ');
 
-    spacelen = (lexical_cast<string>(key.second.id).length() > 5) ? 1 : 5 - lexical_cast<string>(key.second.id).length();
+    spacelen = (std::to_string(key.second.id).length() > 5) ? 1 : 5 - std::to_string(key.second.id).length();
     cout<<key.second.id<<string(spacelen, ' ');
 
 #ifdef HAVE_P11KIT1
@@ -1478,7 +1478,7 @@ try
       cerr << "Syntax: pdnsutil test-algorithm algonum"<<endl;
       return 0;
     }
-    if (testAlgorithm(lexical_cast<int>(cmds[1])))
+    if (testAlgorithm(pdns_stou(cmds[1])))
       return 0;
     return 1;
   }
@@ -1587,7 +1587,7 @@ try
       cerr << "Syntax: pdnsutil test-speed numcores [signing-server]"<<endl;
       return 0;
     }
-    testSpeed(dk, DNSName(cmds[1]),  (cmds.size() > 3) ? cmds[3] : "", atoi(cmds[2].c_str()));
+    testSpeed(dk, DNSName(cmds[1]),  (cmds.size() > 3) ? cmds[3] : "", pdns_stou(cmds[2]));
   }
   else if(cmds[0] == "verify-crypto") {
     if(cmds.size() != 2) {
@@ -1621,7 +1621,7 @@ try
       return 0;
     }
     DNSName zone(cmds[1]);
-    unsigned int id=atoi(cmds[2].c_str());
+    unsigned int id=pdns_stou(cmds[2]);
     if(!id)
     {
       cerr<<"Invalid KEY-ID"<<endl;
@@ -1639,7 +1639,7 @@ try
       return 0;
     }
     DNSName zone(cmds[1]);
-    unsigned int id=atoi(cmds[2].c_str());
+    unsigned int id=pdns_stou(cmds[2]);
     if(!id)
     {
       cerr<<"Invalid KEY-ID"<<endl;
@@ -1683,8 +1683,8 @@ try
         active=true;
       } else if(pdns_iequals(cmds[n], "inactive") || pdns_iequals(cmds[n], "passive")) {
         active=false;
-      } else if(atoi(cmds[n].c_str())) {
-        bits = atoi(cmds[n].c_str());
+      } else if(pdns_stou(cmds[n])) {
+        bits = pdns_stou(cmds[n]);
       } else { 
         cerr<<"Unknown algorithm, key flag or size '"<<cmds[n]<<"'"<<endl;
         exit(EXIT_FAILURE);;
@@ -1706,7 +1706,7 @@ try
       return 0;
     }
     DNSName zone(cmds[1]);
-    unsigned int id=atoi(cmds[2].c_str());
+    unsigned int id=pdns_stou(cmds[2]);
     if (!dk.removeKey(zone, id)) {
        cerr<<"Cannot remove key " << id << " from " << zone <<endl;
       return 1;
@@ -1954,7 +1954,7 @@ try
     }
 
     string zone=cmds[1];
-    unsigned int id=atoi(cmds[2].c_str());
+    unsigned int id=pdns_stou(cmds[2]);
     DNSSECPrivateKey dpk=dk.getKeyById(DNSName(zone), id);
     cout << dpk.getKey()->convertToISC() <<endl;
   }  
@@ -1987,7 +1987,7 @@ try
     shared_ptr<DNSCryptoKeyEngine> key(DNSCryptoKeyEngine::makeFromPEMString(drc, raw));
     dpk.setKey(key);
     
-    dpk.d_algorithm = atoi(cmds[3].c_str());
+    dpk.d_algorithm = pdns_stou(cmds[3]);
     
     if(dpk.d_algorithm == 7)
       dpk.d_algorithm = 5;
@@ -2058,7 +2058,7 @@ try
     }
 
     DNSName zone(cmds[1]);
-    unsigned int id=atoi(cmds[2].c_str());
+    unsigned int id=pdns_stou(cmds[2]);
     DNSSECPrivateKey dpk=dk.getKeyById(zone, id);
     cout << zone<<" IN DNSKEY "<<dpk.getDNSKEY().getZoneRepresentation() <<endl;
     if(dpk.d_flags == 257) {
@@ -2083,8 +2083,8 @@ try
         keyOrZone = true;
       else if((tmp_algo = shorthand2algorithm(cmds[n]))>0) {
         algorithm = tmp_algo;
-      } else if(atoi(cmds[n].c_str()))
-        bits = atoi(cmds[n].c_str());
+      } else if(pdns_stou(cmds[n]))
+        bits = pdns_stou(cmds[n]);
       else {
         cerr<<"Unknown algorithm, key flag or size '"<<cmds[n]<<"'"<<endl;
         return 0;
@@ -2105,7 +2105,7 @@ try
         else if(algorithm == 14)
           bits = 384;
         else {
-          throw runtime_error("Can't guess key size for algorithm "+lexical_cast<string>(algorithm));
+          throw runtime_error("Can't guess key size for algorithm "+std::to_string(algorithm));
         }
       }
     }
@@ -2420,7 +2420,7 @@ try
         return 1;
       }
  
-      id = boost::lexical_cast<unsigned int>(cmds[3]);
+      id = pdns_stou(cmds[3]);
       std::vector<DNSBackend::KeyData> keys; 
       if (!B.getDomainKeys(zone, 0, keys)) {
         cerr << "No keys found for zone " << zone << std::endl;
@@ -2442,7 +2442,7 @@ try
         return 1;
       }
       if (cmds.size() > 4) {
-        bits = boost::lexical_cast<int>(cmds[4]);
+        bits = pdns_stou(cmds[4]);
       }
       if (bits < 1) {
         cerr << "Invalid bit size " << bits << "given, must be positive integer";
index 1ecaec880d6f0fdd1f22007e5462a6062550d5c2..2276781d11455ea32092a51cf0895ece6c7d1107 100644 (file)
@@ -231,7 +231,7 @@ class Pkcs11Slot {
         d_logged_in = !((tokenInfo.flags & CKF_LOGIN_REQUIRED) == CKF_LOGIN_REQUIRED);
       } else {
         logError("C_GetTokenInfo");
-        throw PDNSException("Cannot get token info for slot " + boost::lexical_cast<std::string>(slot));
+        throw PDNSException("Cannot get token info for slot " + std::to_string(slot));
       }
     }
 
@@ -658,7 +658,7 @@ CK_RV Pkcs11Slot::HuntSlot(const string& tokenId, CK_SLOT_ID &slotId, _CK_SLOT_I
 
   // see if we can find it with slotId
   try {
-    slotId = boost::lexical_cast<int>(tokenId);
+    slotId = std::stoi(tokenId);
     if ((err = functions->C_GetSlotInfo(slotId, info))) {
       L<<Logger::Warning<<"C_GetSlotList("<<slotId<<", info) = " << err << std::endl;
       return err;
@@ -711,7 +711,7 @@ std::shared_ptr<Pkcs11Token> Pkcs11Token::GetToken(const std::string& module, co
   // see if we can find module
   std::string tidx = module;
   tidx.append("|");
-  tidx.append(boost::lexical_cast<std::string>(tokenId));
+  tidx.append(tokenId);
   tidx.append("|");
   tidx.append(label);
   std::map<std::string, std::shared_ptr<Pkcs11Token> >::iterator tokenIter;
@@ -930,7 +930,7 @@ DNSCryptoKeyEngine::storvector_t PKCS11DNSCryptoKeyEngine::convertToISCVector()
   outputs_t outputs;
 
   boost::assign::push_back(storvect)
-   (make_pair("Algorithm", boost::lexical_cast<std::string>(d_algorithm)))
+   (make_pair("Algorithm", std::to_string(d_algorithm)))
    (make_pair("Engine", d_module))
    (make_pair("Slot", d_slot_id))
    (make_pair("PIN", d_pin))
@@ -939,7 +939,7 @@ DNSCryptoKeyEngine::storvector_t PKCS11DNSCryptoKeyEngine::convertToISCVector()
 };
 
 void PKCS11DNSCryptoKeyEngine::fromISCMap(DNSKEYRecordContent& drc, stormap_t& stormap) {
-  drc.d_algorithm = atoi(stormap["algorithm"].c_str());
+  drc.d_algorithm = pdns_stou(stormap["algorithm"]);
   d_module = stormap["engine"];
   d_slot_id = stormap["slot"];
   boost::trim(d_slot_id);
index 5b38341bb6ba8d9dcd514dbf3732a240a1a7658d..08f126eb4e770e4b2a2ccd117d9490589156c534 100644 (file)
@@ -6,7 +6,6 @@
 #include <iostream>
 #include <poll.h>
 #include "misc.hh"
-#include <boost/lexical_cast.hpp>
 #include "syncres.hh"
 #include "utility.hh" 
 #include "namespaces.hh"
@@ -32,7 +31,7 @@ void PollFDMultiplexer::addFD(callbackmap_t& cbmap, int fd, callbackfunc_t toDo,
   cb.d_parameter=parameter;
   memset(&cb.d_ttd, 0, sizeof(cb.d_ttd));
   if(cbmap.count(fd))
-    throw FDMultiplexerException("Tried to add fd "+lexical_cast<string>(fd)+ " to multiplexer twice");
+    throw FDMultiplexerException("Tried to add fd "+std::to_string(fd)+ " to multiplexer twice");
   cbmap[fd]=cb;
 }
 
@@ -42,7 +41,7 @@ void PollFDMultiplexer::removeFD(callbackmap_t& cbmap, int fd)
     d_iter++;
 
   if(!cbmap.erase(fd))
-    throw FDMultiplexerException("Tried to remove unlisted fd "+lexical_cast<string>(fd)+ " from multiplexer");
+    throw FDMultiplexerException("Tried to remove unlisted fd "+std::to_string(fd)+ " from multiplexer");
 }
 
 bool pollfdcomp(const struct pollfd& a, const struct pollfd& b)
index 03ad0ed0d728a6fb8f16f8773ef5f9435e35d262..58d05f7eeed4059ea01331cc6d9442d77c007000 100644 (file)
@@ -11,7 +11,6 @@
 #include <iostream>
 
 #include "misc.hh"
-#include <boost/lexical_cast.hpp>
 #include "syncres.hh"
 
 #include "namespaces.hh"
@@ -75,7 +74,7 @@ void PortsFDMultiplexer::addFD(callbackmap_t& cbmap, int fd, callbackfunc_t toDo
 void PortsFDMultiplexer::removeFD(callbackmap_t& cbmap, int fd)
 {
   if(!cbmap.erase(fd))
-    throw FDMultiplexerException("Tried to remove unlisted fd "+lexical_cast<string>(fd)+ " from multiplexer");
+    throw FDMultiplexerException("Tried to remove unlisted fd "+std::to_string(fd)+ " from multiplexer");
 
   if(port_dissociate(d_portfd, PORT_SOURCE_FD, fd) < 0 && errno != ENOENT) // it appears under some circumstances, ENOENT will be returned, without this being an error. Apache has this same "fix"
     throw FDMultiplexerException("Removing fd from port set: "+stringerror());
index dbb30ec0e9ac98fd7dd74ef23a1f519bfe86f978..dd34186de32b06f24dbb4af38df422d788910efb 100644 (file)
@@ -27,7 +27,6 @@
 #include "dnsparser.hh"
 #include "misc.hh"
 #include "utility.hh"
-#include <boost/lexical_cast.hpp>
 #include <boost/algorithm/string.hpp>
 #include <iostream>
 #include "base32.hh"
@@ -41,6 +40,8 @@ RecordTextReader::RecordTextReader(const string& str, const string& zone) : d_st
 void RecordTextReader::xfr48BitInt(uint64_t &val)
 {
   xfr64BitInt(val);
+  if (val > 281474976710655LL)
+    throw RecordTextException("Overflow reading 48 bit integer from record content"); // fixme improve
 }
 
 void RecordTextReader::xfr64BitInt(uint64_t &val)
@@ -48,12 +49,12 @@ void RecordTextReader::xfr64BitInt(uint64_t &val)
   skipSpaces();
 
   if(!isdigit(d_string.at(d_pos)))
-    throw RecordTextException("expected digits at position "+lexical_cast<string>(d_pos)+" in '"+d_string+"'");
+    throw RecordTextException("expected digits at position "+std::to_string(d_pos)+" in '"+d_string+"'");
 
-  char *endptr;
-  val=strtoull(d_string.c_str() + d_pos, &endptr, 10);
+  size_t pos;
+  val=std::stoull(d_string.substr(d_pos), &pos);
   
-  d_pos = endptr - d_string.c_str();
+  d_pos += pos;
 }
 
 
@@ -62,14 +63,12 @@ void RecordTextReader::xfr32BitInt(uint32_t &val)
   skipSpaces();
 
   if(!isdigit(d_string.at(d_pos)))
-    throw RecordTextException("expected digits at position "+lexical_cast<string>(d_pos)+" in '"+d_string+"'");
+    throw RecordTextException("expected digits at position "+std::to_string(d_pos)+" in '"+d_string+"'");
 
-  char *endptr;
-  unsigned long ret=pdns_strtoui(d_string.c_str() + d_pos, &endptr, 10);
-  if (ret == UINT_MAX && errno == ERANGE) throw RecordTextException("serial number too large in '"+d_string+"'");
-  val=ret;
-  
-  d_pos = endptr - d_string.c_str();
+  size_t pos;
+  val=pdns_stou(d_string.substr(d_pos), &pos);
+  d_pos += pos;
 }
 
 void RecordTextReader::xfrTime(uint32_t &val)
@@ -98,7 +97,7 @@ void RecordTextReader::xfrIP(uint32_t &val)
   skipSpaces();
 
   if(!isdigit(d_string.at(d_pos)))
-    throw RecordTextException("while parsing IP address, expected digits at position "+lexical_cast<string>(d_pos)+" in '"+d_string+"'");
+    throw RecordTextException("while parsing IP address, expected digits at position "+std::to_string(d_pos)+" in '"+d_string+"'");
 
   uint32_t octet=0;
   val=0;
@@ -149,7 +148,7 @@ void RecordTextReader::xfrIP6(std::string &val)
     len++);
 
   if(!len)
-    throw RecordTextException("while parsing IPv6 address, expected xdigits at position "+lexical_cast<string>(d_pos)+" in '"+d_string+"'");
+    throw RecordTextException("while parsing IPv6 address, expected xdigits at position "+std::to_string(d_pos)+" in '"+d_string+"'");
 
   // end of value is here, try parse as IPv6
   string address=d_string.substr(d_pos, len);
@@ -245,7 +244,7 @@ void RecordTextReader::xfrBlobNoSpaces(string& val, int len) {
   B64Decode(tmp, val);
   
   if (len>-1 && val.size() != static_cast<size_t>(len))
-    throw RecordTextException("Record length "+lexical_cast<string>(val.size()) + " does not match expected length '"+lexical_cast<string>(len));
+    throw RecordTextException("Record length "+std::to_string(val.size()) + " does not match expected length '"+std::to_string(len));
 }
 
 void RecordTextReader::xfrBlob(string& val, int)
@@ -273,7 +272,7 @@ static inline uint8_t hextodec(uint8_t val)
   else if(val >= 'a' && val<='f')
     return 10+(val-'a');
   else
-    throw RecordTextException("Unknown hexadecimal character '"+lexical_cast<string>(val)+"'");
+    throw RecordTextException("Unknown hexadecimal character '"+std::to_string(val)+"'");
 }
 
 
@@ -355,7 +354,7 @@ void RecordTextReader::xfrText(string& val, bool multi)
         d_pos = d_end;
         break;
       }
-      throw RecordTextException("Data field in DNS should start with quote (\") at position "+lexical_cast<string>(d_pos)+" of '"+d_string+"'");
+      throw RecordTextException("Data field in DNS should start with quote (\") at position "+std::to_string(d_pos)+" of '"+d_string+"'");
     }
     val.append(1, '"');
     while(++d_pos < d_end && d_string[d_pos]!='"') {
@@ -407,7 +406,7 @@ void RecordTextWriter::xfr48BitInt(const uint64_t& val)
 {
   if(!d_string.empty())
     d_string.append(1,' ');
-  d_string+=lexical_cast<string>(val);
+  d_string+=std::to_string(val);
 }
 
 
@@ -415,7 +414,7 @@ void RecordTextWriter::xfr32BitInt(const uint32_t& val)
 {
   if(!d_string.empty())
     d_string.append(1,' ');
-  d_string+=lexical_cast<string>(val);
+  d_string+=std::to_string(val);
 }
 
 void RecordTextWriter::xfrType(const uint16_t& val)
index e2050f1315cbf8b70b9b11b0b9654edefda0288a..c80d643971c0a1550e47e836f9ab3806216ee685 100644 (file)
@@ -3,7 +3,6 @@
 #endif
 #include "utility.hh"
 #include "rec_channel.hh"
-#include <boost/lexical_cast.hpp>
 #include <boost/bind.hpp>
 #include <vector>
 #ifdef MALLOC_TRACE
@@ -71,15 +70,15 @@ map<string,string> getAllStatsMap()
   map<string,string> ret;
   
   for(const auto& the32bits :  d_get32bitpointers) {
-    ret.insert(make_pair(the32bits.first, lexical_cast<string>(*the32bits.second)));
+    ret.insert(make_pair(the32bits.first, std::to_string(*the32bits.second)));
   }
   for(const auto& the64bits :  d_get64bitpointers) {
-    ret.insert(make_pair(the64bits.first, lexical_cast<string>(*the64bits.second)));
+    ret.insert(make_pair(the64bits.first, std::to_string(*the64bits.second)));
   }
   for(const auto& the32bitmembers :  d_get32bitmembers) { 
     if(the32bitmembers.first == "cache-bytes" || the32bitmembers.first=="packetcache-bytes")
       continue; // too slow for 'get-all'
-    ret.insert(make_pair(the32bitmembers.first, lexical_cast<string>(the32bitmembers.second())));
+    ret.insert(make_pair(the32bitmembers.first, std::to_string(the32bitmembers.second())));
   }
   return ret;
 }
@@ -103,7 +102,7 @@ string doGet(T begin, T end)
   for(T i=begin; i != end; ++i) {
     optional<uint64_t> num=get(*i);
     if(num)
-      ret+=lexical_cast<string>(*num)+"\n";
+      ret+=std::to_string(*num)+"\n";
     else
       ret+="UNKNOWN\n";
   }
@@ -182,7 +181,7 @@ string doDumpNSSpeeds(T begin, T end)
   catch(...){}
 
   close(fd);
-  return "dumped "+lexical_cast<string>(total)+" records\n";
+  return "dumped "+std::to_string(total)+" records\n";
 }
 
 template<typename T>
@@ -204,7 +203,7 @@ string doDumpCache(T begin, T end)
   catch(...){}
   
   close(fd);
-  return "dumped "+lexical_cast<string>(total)+" records\n";
+  return "dumped "+std::to_string(total)+" records\n";
 }
 
 template<typename T>
@@ -303,7 +302,7 @@ string setMinimumTTL(T begin, T end)
 {
   if(end-begin != 1) 
     return "Need to supply new minimum TTL number\n";
-  SyncRes::s_minimumTTL = atoi(begin->c_str());
+  SyncRes::s_minimumTTL = pdns_stou(*begin);
   return "New minimum TTL: " + std::to_string(SyncRes::s_minimumTTL) + "\n";
 }
 
index e665c569acb60ac05448fa2b759f089b849ba1a9..0d71d8021ff66ab2c87781c835bb4179f8428f89 100644 (file)
@@ -201,14 +201,14 @@ ComboAddress parseIPAndPort(const std::string& input, uint16_t port)
 
   try { // case 2
     both=splitField(input,':');
-    uint16_t newport=boost::lexical_cast<uint16_t>(both.second);
+    uint16_t newport=static_cast<uint16_t>(pdns_stou(both.second));
     return ComboAddress(both.first, newport);
   } 
   catch(...){}
 
   if(input[0]=='[') { // case 4
     both=splitField(input.substr(1),']');
-    return ComboAddress(both.first, both.second.empty() ? port : boost::lexical_cast<uint16_t>(both.second.substr(1)));
+    return ComboAddress(both.first, both.second.empty() ? port : static_cast<uint16_t>(pdns_stou(both.second.substr(1))));
   }
 
   return ComboAddress(input, port); // case 3
@@ -464,7 +464,7 @@ SyncRes::domainmap_t* parseAuthAndForwards()
         ad.d_rdForward = false;
       if(domain.empty()) {
         delete newMap;
-        throw PDNSException("Error parsing line "+lexical_cast<string>(linenum)+" of " +::arg()["forward-zones-file"]);
+        throw PDNSException("Error parsing line "+std::to_string(linenum)+" of " +::arg()["forward-zones-file"]);
       }
 
       try {
@@ -472,7 +472,7 @@ SyncRes::domainmap_t* parseAuthAndForwards()
       }
       catch(...) {
         delete newMap;
-        throw PDNSException("Conversion error parsing line "+lexical_cast<string>(linenum)+" of " +::arg()["forward-zones-file"]);
+        throw PDNSException("Conversion error parsing line "+std::to_string(linenum)+" of " +::arg()["forward-zones-file"]);
       }
 
       (*newMap)[DNSName(domain)]=ad;
@@ -528,7 +528,7 @@ SyncRes::domainmap_t* parseAuthAndForwards()
     parts[0]="192.168";
     makeIPToNamesZone(newMap, parts);
     for(int n=16; n < 32; n++) {
-      parts[0]="172."+lexical_cast<string>(n);
+      parts[0]="172."+std::to_string(n);
       makeIPToNamesZone(newMap,parts);
     }
   }
index 5bf0c65bd5916ebe4cf9bae82f53c7a3e95510f1..d0eafe6ecbae74dd5baf88ca259d844834b282b0 100644 (file)
@@ -360,7 +360,7 @@ void Resolver::getSoaSerial(const string &ipport, const DNSName &domain, uint32_
   if(parts.size()<3)
     throw ResolverException("Query to '" + ipport + "' for SOA of '" + domain.toString() + "' produced an unparseable response");
   
-  *serial=(uint32_t)atol(parts[2].c_str());
+  *serial=pdns_stou(parts[2]);
 }
 
 AXFRRetriever::AXFRRetriever(const ComboAddress& remote,
index 08fa33b6103dd28fbf8875b7935dd4f16ab01fc7..b5c0d750542bf2d181f94c55155885169c6092e2 100644 (file)
@@ -164,7 +164,7 @@ try
 
        MOADNSParser mdp(string(creply, len));
        if (mdp.d_header.rcode != 0) {
-         throw PDNSException(string("Remote server refused: ") + boost::lexical_cast<string>(mdp.d_header.rcode));
+         throw PDNSException(string("Remote server refused: ") + std::to_string(mdp.d_header.rcode));
        }
        for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i!=mdp.d_answers.end(); ++i) {
          if(i->first.d_type != QType::TKEY) continue;
@@ -231,7 +231,7 @@ try
 
     MOADNSParser mdp(packet);
     if (mdp.d_header.rcode != 0) {
-      throw PDNSException(string("Remote server refused: ") + boost::lexical_cast<string>(mdp.d_header.rcode));
+      throw PDNSException(string("Remote server refused: ") + std::to_string(mdp.d_header.rcode));
     }
     for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i!=mdp.d_answers.end(); ++i) {
       if (i->first.d_type == QType::TSIG) {
index 5d4e3785cc15e0fdd1fbed4fcb5598ee0338875d..e3db28b15b8e48808b5f64fc8f6d0fcd7742a81d 100644 (file)
@@ -161,7 +161,7 @@ void doSecPoll(bool first)
 
     pair<string, string> split = splitField(content, ' ');
 
-    security_status = atoi(split.first.c_str());
+    security_status = std::stoi(split.first);
     g_security_message = split.second;
 
   }
index cc211c19348a1f0ab7e6867b5783bc81facca6ba..bccfd4a8f2748f660b4a55f23ea3b54f167bb5d7 100644 (file)
@@ -45,7 +45,7 @@ void doSecPoll(time_t* last_secpoll)
       
     pair<string, string> split = splitField(content, ' ');
     
-    g_security_status = atoi(split.first.c_str());
+    g_security_status = std::stoi(split.first);
     g_security_message = split.second;
 
     *last_secpoll=now.tv_sec;
index bb20b095e143630ce73833142190c6982dd5988e..34aa0fc3f3a8c6982b5bf31e198f4f2eec29c37c 100644 (file)
@@ -5,7 +5,6 @@
 #include "sstuff.hh"
 #include <iostream>
 #include "misc.hh"
-#include <boost/lexical_cast.hpp>
 #include "syncres.hh"
 #include "utility.hh" 
 
@@ -32,7 +31,7 @@ void SelectFDMultiplexer::addFD(callbackmap_t& cbmap, int fd, callbackfunc_t toD
   cb.d_parameter=parameter;
   memset(&cb.d_ttd, 0, sizeof(cb.d_ttd));
   if(cbmap.count(fd))
-    throw FDMultiplexerException("Tried to add fd "+lexical_cast<string>(fd)+ " to multiplexer twice");
+    throw FDMultiplexerException("Tried to add fd "+std::to_string(fd)+ " to multiplexer twice");
   cbmap[fd]=cb;
 }
 
@@ -42,7 +41,7 @@ void SelectFDMultiplexer::removeFD(callbackmap_t& cbmap, int fd)
     d_iter++;
 
   if(!cbmap.erase(fd))
-    throw FDMultiplexerException("Tried to remove unlisted fd "+lexical_cast<string>(fd)+ " from multiplexer");
+    throw FDMultiplexerException("Tried to remove unlisted fd "+std::to_string(fd)+ " from multiplexer");
 }
 
 int SelectFDMultiplexer::run(struct timeval* now)
index fbbecce26f3ec4af98ca39a6edc0f610583d0882..2a7f4e135e47f505d67723c7d94c01fd74276e87 100644 (file)
@@ -127,7 +127,7 @@ uint32_t calculateIncreaseSOA(SOAData sd, const string& increaseKind, const stri
   localtime_r(&now, &tm);
   boost::format fmt("%04d%02d%02d%02d");
   string newdate = (fmt % (tm.tm_year + 1900) % (tm.tm_mon + 1) % tm.tm_mday % 1).str();
-  uint32_t new_serial = atol(newdate.c_str());
+  uint32_t new_serial = pdns_stou(newdate);
   if (new_serial <= sd.serial) {
     new_serial = sd.serial + 1;
   }
index b0b5f447dabde5b5ed31ddb8009fb998ed74df99..71d0f997ec7408e0b6a4afb2bd31fcee2f210bbd 100644 (file)
@@ -161,7 +161,7 @@ pair<vector<int>, vector<int> > ChunkedSigningPipe::waitForRW(bool rd, bool wr,
   
   int res = poll(&pfds[0], pfds.size(), (seconds < 0) ? -1 : (seconds * 1000)); // -1 = infinite
   if(res < 0)
-    unixDie("polling for activity from signers, "+lexical_cast<string>(d_sockets.size()));
+    unixDie("polling for activity from signers, "+std::to_string(d_sockets.size()));
   pair<vector<int>, vector<int> > vects;
   for(unsigned int n = 0; n < pfds.size(); ++n) 
     if(pfds[n].revents & POLLIN)
index fb7bdf4310b8f307032007c2fec365ed9e33d40c..40dd15948cb66f0646a9e6075b3529f219419d1f 100644 (file)
@@ -40,7 +40,6 @@
 #include "arguments.hh"
 #include "packetcache.hh"
 
-#include <boost/lexical_cast.hpp>
 #include "base64.hh"
 #include "inflighter.cc"
 #include "lua-auth.hh"
index a7db67900e5e044caa6beec5aa4e60a55d9bc5d5..7c6d744dae6547b285002b40c049df7e1edd50c5 100644 (file)
@@ -38,7 +38,7 @@ private:
 void SodiumED25519DNSCryptoKeyEngine::create(unsigned int bits)
 {
   if(bits != crypto_sign_ed25519_SEEDBYTES * 8) {
-    throw runtime_error("Unsupported key length of "+lexical_cast<string>(bits)+" bits requested, SodiumED25519 class");
+    throw runtime_error("Unsupported key length of "+std::to_string(bits)+" bits requested, SodiumED25519 class");
   }
   crypto_sign_ed25519_keypair(d_pubkey, d_seckey);
 }
@@ -74,7 +74,7 @@ void SodiumED25519DNSCryptoKeyEngine::fromISCMap(DNSKEYRecordContent& drc, std::
     PrivateKey: GU6SnQ/Ou+xC5RumuIUIuJZteXT2z0O/ok1s38Et6mQ=
   */
 
-  drc.d_algorithm = atoi(stormap["algorithm"].c_str());
+  drc.d_algorithm = pdns_stou(stormap["algorithm"]);
   string privateKey = stormap["privatekey"];
 
   if (privateKey.length() != crypto_sign_ed25519_SEEDBYTES)
index 7f6baaf9608868a4b2481d33ea9769fe67fb064c..4ee8524d00a82eaa70546cb229b1de3f562fcb09 100644 (file)
@@ -1024,7 +1024,7 @@ int SyncRes::doResolveAt(set<DNSName> nameservers, DNSName auth, bool flawedNSSe
           }
           else {
             s_outqueries++; d_outqueries++;
-            if(d_outqueries + d_throttledqueries > s_maxqperq) throw ImmediateServFailException("more than "+lexical_cast<string>(s_maxqperq)+" (max-qperq) queries sent while resolving "+qname.toString());
+            if(d_outqueries + d_throttledqueries > s_maxqperq) throw ImmediateServFailException("more than "+std::to_string(s_maxqperq)+" (max-qperq) queries sent while resolving "+qname.toString());
           TryTCP:
             if(doTCP) {
               LOG(prefix<<qname.toString()<<": using TCP with "<< remoteIP->toStringWithPort() <<endl);
@@ -1032,7 +1032,7 @@ int SyncRes::doResolveAt(set<DNSName> nameservers, DNSName auth, bool flawedNSSe
             }
 
            if(s_maxtotusec && d_totUsec > s_maxtotusec)
-             throw ImmediateServFailException("Too much time waiting for "+qname.toString()+"|"+qtype.getName()+", timeouts: "+boost::lexical_cast<string>(d_timeouts) +", throttles: "+boost::lexical_cast<string>(d_throttledqueries) + ", queries: "+lexical_cast<string>(d_outqueries)+", "+lexical_cast<string>(d_totUsec/1000)+"msec");
+             throw ImmediateServFailException("Too much time waiting for "+qname.toString()+"|"+qtype.getName()+", timeouts: "+std::to_string(d_timeouts) +", throttles: "+std::to_string(d_throttledqueries) + ", queries: "+std::to_string(d_outqueries)+", "+std::to_string(d_totUsec/1000)+"msec");
 
            if(d_pdl && d_pdl->preoutquery(*remoteIP, d_requestor, qname, qtype, lwr.d_records, resolveret)) {
              LOG(prefix<<qname.toString()<<": query handled by Lua"<<endl);
@@ -1081,7 +1081,7 @@ int SyncRes::doResolveAt(set<DNSName> nameservers, DNSName auth, bool flawedNSSe
               continue;
             }
 
-//         if(d_timeouts + 0.5*d_throttledqueries > 6.0 && d_timeouts > 2) throw ImmediateServFailException("Too much work resolving "+qname+"|"+qtype.getName()+", timeouts: "+boost::lexical_cast<string>(d_timeouts) +", throttles: "+boost::lexical_cast<string>(d_throttledqueries));
+//         if(d_timeouts + 0.5*d_throttledqueries > 6.0 && d_timeouts > 2) throw ImmediateServFailException("Too much work resolving "+qname+"|"+qtype.getName()+", timeouts: "+std::to_string(d_timeouts) +", throttles: "+std::to_string(d_throttledqueries));
 
             if(lwr.d_rcode==RCode::ServFail || lwr.d_rcode==RCode::Refused) {
               LOG(prefix<<qname.toString()<<": "<<tns->toString()<<" returned a "<< (lwr.d_rcode==RCode::ServFail ? "ServFail" : "Refused") << ", trying sibling IP or NS"<<endl);
index bc6aff1d0c399b82bdd7bf5b82486a2c61abc866..9824a0410269c252af09e040afd2865badea1c39 100644 (file)
@@ -689,7 +689,7 @@ int TCPNameserver::doAXFR(const DNSName &target, shared_ptr<DNSPacket> q, int ou
         vector<string> digestAlgos;
         stringtok(digestAlgos, publishCDS, ", ");
         for(auto const &digestAlgo : digestAlgos) {
-          rr.content=makeDSFromDNSKey(target, value.first.getDNSKEY(), lexical_cast<int>(digestAlgo)).getZoneRepresentation();
+          rr.content=makeDSFromDNSKey(target, value.first.getDNSKEY(), pdns_stou(digestAlgo)).getZoneRepresentation();
           cds.push_back(rr);
         }
       }
@@ -1002,7 +1002,7 @@ int TCPNameserver::doIXFR(shared_ptr<DNSPacket> q, int outsock)
       vector<string>parts;
       stringtok(parts, rr->d_content->getZoneRepresentation());
       if (parts.size() >= 3) {
-        serial=atoi(parts[2].c_str());
+        serial=pdns_stou(parts[2]);
       } else {
         L<<Logger::Error<<"No serial in IXFR query"<<endl;
         outpacket->setRcode(RCode::FormErr);
index b1342565915585e6497fba65ac934a08f4c0c8e3..77e17bed6171aa5c5f7aff2c9101e123b9df8687 100644 (file)
@@ -221,7 +221,7 @@ BOOST_AUTO_TEST_CASE(test_record_types) {
  }
 }
 
-bool test_dnsrecords_cc_predicate( std::runtime_error const &ex ) { return true; }
+bool test_dnsrecords_cc_predicate( std::exception const &ex ) { return true; }
 
 // these *MUST NOT* parse properly!
 BOOST_AUTO_TEST_CASE(test_record_types_bad_values) {
@@ -265,10 +265,10 @@ BOOST_AUTO_TEST_CASE(test_record_types_bad_values) {
 
     if (val.get<2>()) {
       bool success=true;
-      BOOST_WARN_EXCEPTION( { boost::scoped_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(q.getCode(), 1, val.get<1>())); pw.startRecord(DNSName("unit.test"), q.getCode()); drc->toPacket(pw); success=false; }, std::runtime_error, test_dnsrecords_cc_predicate );
+      BOOST_WARN_EXCEPTION( { boost::scoped_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(q.getCode(), 1, val.get<1>())); pw.startRecord(DNSName("unit.test"), q.getCode()); drc->toPacket(pw); success=false; }, std::exception, test_dnsrecords_cc_predicate );
       if (success==false) REC_FAIL_XSUCCESS2(q.getName() << " test #" << n << " has unexpectedly passed"); // a bad record was detected when it was supposed not to be detected
     } else {
-      BOOST_CHECK_EXCEPTION( { boost::scoped_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(q.getCode(), 1, val.get<1>())); pw.startRecord(DNSName("unit.test"), q.getCode()); drc->toPacket(pw); }, std::runtime_error, test_dnsrecords_cc_predicate );
+      BOOST_CHECK_EXCEPTION( { boost::scoped_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(q.getCode(), 1, val.get<1>())); pw.startRecord(DNSName("unit.test"), q.getCode()); drc->toPacket(pw); }, std::exception, test_dnsrecords_cc_predicate );
     }
   };
 }
index e806ecfa23517192d0117b9858833d6d5a6b306d..ad6353cb1651e148c83ccfbe37e7d41408ed2a17 100644 (file)
@@ -39,7 +39,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheSimple) {
   int counter=0;
   try {
     for(counter = 0; counter < 100000; ++counter) {
-      DNSName a=DNSName("hello ")+DNSName(boost::lexical_cast<string>(counter));
+      DNSName a=DNSName("hello ")+DNSName(std::to_string(counter));
       BOOST_CHECK_EQUAL(DNSName(a.toString()), a);
 
       PC.insert(a, QType(QType::A), PacketCache::QUERYCACHE, "something", 3600, 1);
@@ -52,7 +52,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheSimple) {
     
     int delcounter=0;
     for(delcounter=0; delcounter < counter/100; ++delcounter) {
-      DNSName a=DNSName("hello ")+DNSName(boost::lexical_cast<string>(delcounter));
+      DNSName a=DNSName("hello ")+DNSName(std::to_string(delcounter));
       PC.purge(a.toString());
     }
     
@@ -62,7 +62,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheSimple) {
     vector<DNSResourceRecord> entry;
     int expected=counter-delcounter;
     for(; delcounter < counter; ++delcounter) {
-      if(PC.getEntry(DNSName("hello ")+DNSName(boost::lexical_cast<string>(delcounter)), QType(QType::A), PacketCache::QUERYCACHE, entry, 1)) {
+      if(PC.getEntry(DNSName("hello ")+DNSName(std::to_string(delcounter)), QType(QType::A), PacketCache::QUERYCACHE, entry, 1)) {
        matches++;
       }
     }
@@ -83,7 +83,7 @@ try
 {
   unsigned int offset=(unsigned int)(unsigned long)a;
   for(unsigned int counter=0; counter < 100000; ++counter)
-    g_PC->insert(DNSName("hello ")+DNSName(boost::lexical_cast<string>(counter+offset)), QType(QType::A), PacketCache::QUERYCACHE, "something", 3600, 1);    
+    g_PC->insert(DNSName("hello ")+DNSName(std::to_string(counter+offset)), QType(QType::A), PacketCache::QUERYCACHE, "something", 3600, 1);    
   return 0;
 }
  catch(PDNSException& e) {
@@ -99,7 +99,7 @@ try
   unsigned int offset=(unsigned int)(unsigned long)a;
   vector<DNSResourceRecord> entry;
   for(unsigned int counter=0; counter < 100000; ++counter)
-    if(!g_PC->getEntry(DNSName("hello ")+DNSName(boost::lexical_cast<string>(counter+offset)), QType(QType::A), PacketCache::QUERYCACHE, entry, 1)) {
+    if(!g_PC->getEntry(DNSName("hello ")+DNSName(std::to_string(counter+offset)), QType(QType::A), PacketCache::QUERYCACHE, entry, 1)) {
        g_missing++;
     }
   return 0;
@@ -160,7 +160,7 @@ BOOST_AUTO_TEST_CASE(test_PacketCacheClean) {
     PacketCache PC;
 
     for(unsigned int counter = 0; counter < 1000000; ++counter) {
-      PC.insert(DNSName("hello ")+DNSName(boost::lexical_cast<string>(counter)), QType(QType::A), PacketCache::QUERYCACHE, "something", 1, 1);
+      PC.insert(DNSName("hello ")+DNSName(std::to_string(counter)), QType(QType::A), PacketCache::QUERYCACHE, "something", 1, 1);
     }
 
     sleep(1);
index bc785186d0a89833e776bdf7b12e12b3bcd90e2a..f45de57a0325496098c1f7f7f8f577b252228bd4 100644 (file)
@@ -9,7 +9,6 @@
 #include <boost/tuple/tuple.hpp>
 #include <boost/iostreams/stream.hpp>
 #include <boost/iostreams/device/file.hpp>
-#include <boost/lexical_cast.hpp>
 #include "dns.hh"
 #include "zoneparser-tng.hh"
 #include "dnsrecords.hh"
@@ -35,10 +34,10 @@ BOOST_AUTO_TEST_CASE(test_tng_record_types) {
   while(zp.get(rr)) {
     // make sure these concur.
     std::string host, type, data;
-    int ttl;
+    unsigned int ttl;
     std::getline(ifs, host, ' ');
     std::getline(ifs, type, ' ');
-    ttl = boost::lexical_cast<int>(type);
+    ttl = pdns_stou(type);
     std::getline(ifs, type, ' ');
     std::getline(ifs, type, ' ');
     std::getline(ifs, data, '\n');
index b2e213d9230b15cfa9a12fddf587fcb919513dd8..e37933eaf59386080282f5cf1538ba96b04e5183 100644 (file)
@@ -114,7 +114,7 @@ void validateWithKeySet(const cspmap_t& rrsets, cspmap_t& validated, const keyse
          ; // cerr<<"signature invalid"<<endl;
        if(signature->d_type != QType::DNSKEY) {
          dotEdge(signature->d_signer,
-                 "DNSKEY", signature->d_signer, lexical_cast<string>(signature->d_tag),
+                 "DNSKEY", signature->d_signer, std::to_string(signature->d_tag),
                  DNSRecordContent::NumberToType(signature->d_type), i->first.first, "", isValid ? "green" : "red");
          
        }
@@ -201,7 +201,7 @@ vState getKeysFor(DNSRecordOracle& dro, const DNSName& zone, keyset_t &keyset)
         auto drc=getRR<DNSKEYRecordContent> (rec);
         tkeys.insert(*drc);
        //      cerr<<"Inserting key with tag "<<drc->getTag()<<": "<<drc->getZoneRepresentation()<<endl;
-       dotNode("DNSKEY", qname, lexical_cast<string>(drc->getTag()), (boost::format("tag=%d, algo=%d") % drc->getTag() % static_cast<int>(drc->d_algorithm)).str());
+       dotNode("DNSKEY", qname, std::to_string(drc->getTag()), (boost::format("tag=%d, algo=%d") % drc->getTag() % static_cast<int>(drc->d_algorithm)).str());
 
         toSign.push_back(rec.d_content);
         toSignTags.push_back(drc->getTag());
@@ -231,13 +231,13 @@ vState getKeysFor(DNSRecordOracle& dro, const DNSName& zone, keyset_t &keyset)
          //          cerr<<"got valid DNSKEY (it matches the DS) for "<<qname<<endl;
          
           validkeys.insert(drc);
-         dotNode("DS", qname, "" /*lexical_cast<string>(dsrc.d_tag)*/, (boost::format("tag=%d, digest algo=%d, algo=%d") % dsrc.d_tag % static_cast<int>(dsrc.d_digesttype) % static_cast<int>(dsrc.d_algorithm)).str());
+         dotNode("DS", qname, "" /*std::to_string(dsrc.d_tag)*/, (boost::format("tag=%d, digest algo=%d, algo=%d") % dsrc.d_tag % static_cast<int>(dsrc.d_digesttype) % static_cast<int>(dsrc.d_algorithm)).str());
         }
        else {
          //      cerr<<"DNSKEY did not match the DS, parent DS: "<<drc.getZoneRepresentation() << " ! = "<<dsrc2.getZoneRepresentation()<<endl;
        }
         // cout<<"    subgraph "<<dotEscape("cluster "+qname)<<" { "<<dotEscape("DS "+qname)<<" -> "<<dotEscape("DNSKEY "+qname)<<" [ label = \""<<dsrc.d_tag<<"/"<<static_cast<int>(dsrc.d_digesttype)<<"\" ]; label = \"zone: "<<qname<<"\"; }"<<endl;
-       dotEdge(DNSName("."), "DS", qname, "" /*lexical_cast<string>(dsrc.d_tag)*/, "DNSKEY", qname, lexical_cast<string>(drc.getTag()), isValid ? "green" : "red");
+       dotEdge(DNSName("."), "DS", qname, "" /*std::to_string(dsrc.d_tag)*/, "DNSKEY", qname, std::to_string(drc.getTag()), isValid ? "green" : "red");
         // dotNode("DNSKEY", qname, (boost::format("tag=%d, algo=%d") % drc.getTag() % static_cast<int>(drc.d_algorithm)).str());
       }
     }
@@ -269,8 +269,8 @@ vState getKeysFor(DNSRecordOracle& dro, const DNSName& zone, keyset_t &keyset)
          }
          for(uint16_t tag : toSignTags) {
            dotEdge(qname,
-                   "DNSKEY", qname, lexical_cast<string>(i->d_tag),
-                   "DNSKEY", qname, lexical_cast<string>(tag), isValid ? "green" : "red");
+                   "DNSKEY", qname, std::to_string(i->d_tag),
+                   "DNSKEY", qname, std::to_string(tag), isValid ? "green" : "red");
          }
          
           if(isValid)
@@ -328,7 +328,7 @@ vState getKeysFor(DNSRecordOracle& dro, const DNSName& zone, keyset_t &keyset)
           dsmap.insert(make_pair(dsrc->d_tag, *dsrc));
           // dotEdge(keyqname,
           //         "DNSKEY", keyqname, ,
-          //         "DS", qname, lexical_cast<string>(dsrc.d_tag));
+          //         "DS", qname, std::to_string(dsrc.d_tag));
           // cout<<"    "<<dotEscape("DNSKEY "+keyqname)<<" -> "<<dotEscape("DS "+qname)<<";"<<endl;
         }
       }
index 25387739a8f2b7ad6d43dfcd3132e4143ee8affd..81b2cd14043407a6dfa166e4f36511074c2b5a69 100644 (file)
@@ -275,7 +275,7 @@ HttpResponse WebServer::handleRequest(HttpRequest req)
   if (req.method == "HEAD") {
     resp.body = "";
   } else {
-    resp.headers["Content-Length"] = lexical_cast<string>(resp.body.size());
+    resp.headers["Content-Length"] = std::to_string(resp.body.size());
   }
 
   return resp;
index 6f7a2659b4fc1379c3f297074216c28e514ddbf6..aa9ceb48ecc0086fc48a8c4133b63593e5cf3da5 100644 (file)
@@ -210,9 +210,9 @@ void AuthWebServer::indexfunction(HttpRequest* req, HttpResponse* resp)
     return;
   }
   if(!req->getvars["resizering"].empty()){
-    int size=atoi(req->getvars["size"].c_str());
+    int size=std::stoi(req->getvars["size"]);
     if (S.ringExists(req->getvars["resizering"]) && size > 0 && size <= 500000)
-      S.resizeRing(req->getvars["resizering"], atoi(req->getvars["size"].c_str()));
+      S.resizeRing(req->getvars["resizering"], std::stoi(req->getvars["size"]));
     resp->status = 301;
     resp->headers["Location"] = req->url.path;
     return;
@@ -399,11 +399,11 @@ void productServerStatisticsFetch(map<string,string>& out)
 {
   vector<string> items = S.getEntries();
   for(const string& item :  items) {
-    out[item] = lexical_cast<string>(S.read(item));
+    out[item] = std::to_string(S.read(item));
   }
 
   // add uptime
-  out["uptime"] = lexical_cast<string>(time(0) - s_starttime);
+  out["uptime"] = std::to_string(time(0) - s_starttime);
 }
 
 static void gatherRecords(const Value& container, vector<DNSResourceRecord>& new_records, vector<DNSResourceRecord>& new_ptrs) {
@@ -538,8 +538,8 @@ static void apiZoneCryptokeys(HttpRequest* req, HttpResponse* resp) {
 
   for(DNSSECKeeper::keyset_t::value_type value :  keyset) {
     if (req->parameters.count("key_id")) {
-      int keyid = lexical_cast<int>(req->parameters["key_id"]);
-      int curid = lexical_cast<int>(value.second.id);
+      int keyid = std::stoi(req->parameters["key_id"]);
+      int curid = value.second.id;
       if (keyid != curid)
         continue;
     }
@@ -552,7 +552,7 @@ static void apiZoneCryptokeys(HttpRequest* req, HttpResponse* resp) {
     Value dnskey(value.first.getDNSKEY().getZoneRepresentation().c_str(), doc.GetAllocator());
     key.AddMember("dnskey", dnskey, doc.GetAllocator());
     if (req->parameters.count("key_id")) {
-      DNSSECPrivateKey dpk=dk.getKeyById(zonename, lexical_cast<int>(req->parameters["key_id"]));
+      DNSSECPrivateKey dpk=dk.getKeyById(zonename, std::stoi(req->parameters["key_id"]));
       Value content(dpk.getKey()->convertToISC().c_str(), doc.GetAllocator());
       key.AddMember("content", content, doc.GetAllocator());
     }
@@ -1078,7 +1078,7 @@ static void apiServerSearchData(HttpRequest* req, HttpResponse* resp) {
   if (q.empty())
     throw ApiException("Query q can't be blank");
   if (sMax.empty() == false)
-    maxEnts = boost::lexical_cast<int>(sMax);
+    maxEnts = std::stoi(sMax);
   if (maxEnts < 1)
     throw ApiException("Maximum entries must be larger than 0");
 
@@ -1170,7 +1170,7 @@ void apiServerCacheFlush(HttpRequest* req, HttpResponse* resp) {
   int count = PC.purgeExact(canon);
 
   map<string, string> object;
-  object["count"] = lexical_cast<string>(count);
+  object["count"] = std::to_string(count);
   object["result"] = "Flushed cache.";
   resp->body = returnJsonObject(object);
 }
index b818d0cdeb2f5e8b60ee00e13962a397d2f24a4e..f26ba23ddd60ec7ba9cfc0c9737724cf01fef7c1 100644 (file)
@@ -422,7 +422,7 @@ static void apiServerCacheFlush(HttpRequest* req, HttpResponse* resp) {
   count += broadcastAccFunction<uint64_t>(boost::bind(pleaseWipePacketCache, canon, false));
   count += broadcastAccFunction<uint64_t>(boost::bind(pleaseWipeAndCountNegCache, canon, false));
   map<string, string> object;
-  object["count"] = lexical_cast<string>(count);
+  object["count"] = std::to_string(count);
   object["result"] = "Flushed cache.";
   resp->body = returnJsonObject(object);
 }
index 30b5fc5e90b391d0a40575a2c01de84fd2e0e89d..fc569215854557ef468d28fa00b6a382018aa822 100644 (file)
@@ -59,7 +59,7 @@ static Json::object emitRecord(const string& zoneName, const DNSName &DNSqname,
   g_numRecords++;
   string content(ocontent);
   if(qtype == "MX" || qtype == "SRV") { 
-    prio=atoi(content.c_str());
+    prio=pdns_stou(content);
     
     string::size_type pos = content.find_first_not_of("0123456789");
     if(pos != string::npos)
index b38207663ffe9d5f370033a69390ed5676e4949b..d675051218e9e69de3d371ba8776d05b38054674 100644 (file)
@@ -173,7 +173,7 @@ static void emitRecord(const string& zoneName, const DNSName &DNSqname, const st
     return; // NSECs do not go in the database
 
   if((qtype == "MX" || qtype == "SRV") && g_mode!=ORACLE) {
-    prio=atoi(content.c_str());
+    prio=pdns_stou(content);
     
     string::size_type pos = content.find_first_not_of("0123456789");
     if(pos != string::npos)
@@ -259,8 +259,8 @@ static void emitRecord(const string& zoneName, const DNSName &DNSqname, const st
       stringtok(parts, content);
  
       cout<<"INSERT INTO soa(origin, ns, mbox, serial, refresh, retry, expire, minimum, ttl) VALUES("<<
-      sqlstr(toLower(zoneNameDot))<<", "<<sqlstr(parts[0])<<", "<<sqlstr(parts[1])<<", "<<atoi(parts[2].c_str())<<", "<<
-      atoi(parts[3].c_str())<<", "<<atoi(parts[4].c_str())<<", "<<atoi(parts[5].c_str())<<", "<<atoi(parts[6].c_str())<<", "<<ttl<<");\n";
+      sqlstr(toLower(zoneNameDot))<<", "<<sqlstr(parts[0])<<", "<<sqlstr(parts[1])<<", "<<pdns_stou(parts[2])<<", "<<
+      pdns_stou(parts[3])<<", "<<pdns_stou(parts[4])<<", "<<pdns_stou(parts[5])<<", "<<pdns_stou(parts[6])<<", "<<ttl<<");\n";
     }
     else
     {
index acbde6eec90baf72cc64143a99408ad0c5143247..569aef0db468cff8a93143cf4f23abe643051bff 100644 (file)
@@ -34,7 +34,6 @@
 #include "zoneparser-tng.hh"
 #include <deque>
 #include <boost/algorithm/string.hpp>
-#include <boost/lexical_cast.hpp>
 
 ZoneParserTNG::ZoneParserTNG(const string& fname, const DNSName& zname, const string& reldir) : d_reldir(reldir), 
                                                                                                d_zonename(zname), d_defaultttl(3600), 
@@ -98,7 +97,7 @@ unsigned int ZoneParserTNG::makeTTLFromZone(const string& str)
   if(str.empty())
     return 0;
 
-  unsigned int val=atoi(str.c_str());
+  unsigned int val=pdns_stou(str);
   char lc=toupper(str[str.length()-1]);
   if(!isdigit(lc))
     switch(lc) {
@@ -163,7 +162,7 @@ bool ZoneParserTNG::getTemplateLine()
       }
       if(c=='$') {
         if(pos + 1 == part.size() || part[pos+1]!='{') {  // a trailing $, or not followed by {
-          outpart.append(lexical_cast<string>(d_templatecounter));
+          outpart.append(std::to_string(d_templatecounter));
           continue;
         }
         
@@ -245,9 +244,9 @@ DNSName ZoneParserTNG::getZoneName()
 string ZoneParserTNG::getLineOfFile()
 {
   if (d_zonedata.size() > 0)
-    return "on line "+lexical_cast<string>(std::distance(d_zonedata.begin(), d_zonedataline))+" of given string";
+    return "on line "+std::to_string(std::distance(d_zonedata.begin(), d_zonedataline))+" of given string";
 
-  return "on line "+lexical_cast<string>(d_filestates.top().d_lineno)+" of file '"+d_filestates.top().d_filename+"'";
+  return "on line "+std::to_string(d_filestates.top().d_lineno)+" of file '"+d_filestates.top().d_filename+"'";
 }
 
 // ODD: this function never fills out the prio field! rest of pdns compensates though
@@ -444,7 +443,7 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment)
         rr.content.append(1,' ');
 
       if(n > 1)
-        rr.content+=lexical_cast<string>(makeTTLFromZone(recparts[n]));
+        rr.content+=std::to_string(makeTTLFromZone(recparts[n]));
       else
         rr.content+=recparts[n];