}
}
-void Bind2Backend::fixupOrderAndAuth(std::shared_ptr<recordstorage_t>& records, const DNSName& zoneName, bool nsec3zone, NSEC3PARAMRecordContent ns3pr)
+void Bind2Backend::fixupOrderAndAuth(std::shared_ptr<recordstorage_t>& records, const DNSName& zoneName, bool nsec3zone, const NSEC3PARAMRecordContent& ns3pr)
{
bool skip;
DNSName shorter;
}
}
-void Bind2Backend::doEmptyNonTerminals(std::shared_ptr<recordstorage_t>& records, const DNSName& zoneName, bool nsec3zone, NSEC3PARAMRecordContent ns3pr)
+void Bind2Backend::doEmptyNonTerminals(std::shared_ptr<recordstorage_t>& records, const DNSName& zoneName, bool nsec3zone, const NSEC3PARAMRecordContent& ns3pr)
{
bool auth;
DNSName shorter;
static string DLListRejectsHandler(const vector<string>&parts, Utility::pid_t ppid);
static string DLReloadNowHandler(const vector<string>&parts, Utility::pid_t ppid);
static string DLAddDomainHandler(const vector<string>&parts, Utility::pid_t ppid);
- static void fixupOrderAndAuth(std::shared_ptr<recordstorage_t>& records, const DNSName& zoneName, bool nsec3zone, NSEC3PARAMRecordContent ns3pr);
- static void doEmptyNonTerminals(std::shared_ptr<recordstorage_t>& records, const DNSName& zoneName, bool nsec3zone, NSEC3PARAMRecordContent ns3pr);
+ static void fixupOrderAndAuth(std::shared_ptr<recordstorage_t>& records, const DNSName& zoneName, bool nsec3zone, const NSEC3PARAMRecordContent& ns3pr);
+ static void doEmptyNonTerminals(std::shared_ptr<recordstorage_t>& records, const DNSName& zoneName, bool nsec3zone, const NSEC3PARAMRecordContent& ns3pr);
void loadConfig(string *status=nullptr);
};
return i->second(dr, pr);
}
-string DNSRecordContent::upgradeContent(const DNSName& qname, const QType qtype, const string& content) {
+string DNSRecordContent::upgradeContent(const DNSName& qname, const QType& qtype, const string& content) {
// seamless upgrade for previously unsupported but now implemented types.
UnknownRecordContent unknown_content(content);
shared_ptr<DNSRecordContent> rc = DNSRecordContent::deserialize(qname, qtype.getCode(), unknown_content.serialize(qname));
}
// method of operation: silently fail if it doesn't work - we're only trying to be nice, don't fall over on it
-void editDNSPacketTTL(char* packet, size_t length, std::function<uint32_t(uint8_t, uint16_t, uint16_t, uint32_t)> visitor)
+void editDNSPacketTTL(char* packet, size_t length, const std::function<uint32_t(uint8_t, uint16_t, uint16_t, uint32_t)>& visitor)
{
if(length < sizeof(dnsheader))
return;
static std::shared_ptr<DNSRecordContent> mastermake(const DNSRecord &dr, PacketReader& pr);
static std::shared_ptr<DNSRecordContent> mastermake(const DNSRecord &dr, PacketReader& pr, uint16_t opcode);
static std::shared_ptr<DNSRecordContent> mastermake(uint16_t qtype, uint16_t qclass, const string& zone);
- static string upgradeContent(const DNSName& qname, const QType qtype, const string& content);
+ static string upgradeContent(const DNSName& qname, const QType& qtype, const string& content);
virtual std::string getZoneRepresentation(bool noDot=false) const = 0;
virtual ~DNSRecordContent() {}
string simpleCompress(const string& label, const string& root="");
void ageDNSPacket(char* packet, size_t length, uint32_t seconds);
void ageDNSPacket(std::string& packet, uint32_t seconds);
-void editDNSPacketTTL(char* packet, size_t length, std::function<uint32_t(uint8_t, uint16_t, uint16_t, uint32_t)> visitor);
+void editDNSPacketTTL(char* packet, size_t length, const std::function<uint32_t(uint8_t, uint16_t, uint16_t, uint32_t)>& visitor);
uint32_t getDNSPacketMinTTL(const char* packet, size_t length, bool* seenAuthSOA=nullptr);
uint32_t getDNSPacketLength(const char* packet, size_t length);
uint16_t getRecordsOfTypeCount(const char* packet, size_t length, uint8_t section, uint16_t type);
using json11::Json;
-int intFromJson(const Json container, const std::string& key)
+int intFromJson(const Json& container, const std::string& key)
{
auto val = container[key];
if (val.is_number()) {
}
}
-int intFromJson(const Json container, const std::string& key, const int default_value)
+int intFromJson(const Json& container, const std::string& key, const int default_value)
{
auto val = container[key];
if (val.is_number()) {
}
}
-double doubleFromJson(const Json container, const std::string& key)
+double doubleFromJson(const Json& container, const std::string& key)
{
auto val = container[key];
if (val.is_number()) {
}
}
-double doubleFromJson(const Json container, const std::string& key, const double default_value)
+double doubleFromJson(const Json& container, const std::string& key, const double default_value)
{
auto val = container[key];
if (val.is_number()) {
}
}
-string stringFromJson(const Json container, const std::string &key)
+string stringFromJson(const Json& container, const std::string &key)
{
const Json val = container[key];
if (val.is_string()) {
}
}
-bool boolFromJson(const Json container, const std::string& key)
+bool boolFromJson(const Json& container, const std::string& key)
{
auto val = container[key];
if (val.is_bool()) {
throw JsonException("Key '" + string(key) + "' not present or not a Bool");
}
-bool boolFromJson(const Json container, const std::string& key, const bool default_value)
+bool boolFromJson(const Json& container, const std::string& key, const bool default_value)
{
auto val = container[key];
if (val.is_bool()) {
#include <stdexcept>
#include "json11.hpp"
-int intFromJson(const json11::Json container, const std::string& key);
-int intFromJson(const json11::Json container, const std::string& key, const int default_value);
-double doubleFromJson(const json11::Json container, const std::string& key);
-double doubleFromJson(const json11::Json container, const std::string& key, const double default_value);
-std::string stringFromJson(const json11::Json container, const std::string &key);
-bool boolFromJson(const json11::Json container, const std::string& key);
-bool boolFromJson(const json11::Json container, const std::string& key, const bool default_value);
+int intFromJson(const json11::Json& container, const std::string& key);
+int intFromJson(const json11::Json& container, const std::string& key, const int default_value);
+double doubleFromJson(const json11::Json& container, const std::string& key);
+double doubleFromJson(const json11::Json& container, const std::string& key, const double default_value);
+std::string stringFromJson(const json11::Json& container, const std::string &key);
+bool boolFromJson(const json11::Json& container, const std::string& key);
+bool boolFromJson(const json11::Json& container, const std::string& key, const bool default_value);
class JsonException : public std::runtime_error
{
}
-bool AuthLua4::updatePolicy(const DNSName &qname, QType qtype, const DNSName &zonename, const DNSPacket& packet) {
+bool AuthLua4::updatePolicy(const DNSName &qname, const QType& qtype, const DNSName &zonename, const DNSPacket& packet) {
// default decision is all goes
if (d_update_policy == nullptr) return true;
{
public:
AuthLua4();
- bool updatePolicy(const DNSName &qname, QType qtype, const DNSName &zonename, const DNSPacket& packet);
+ bool updatePolicy(const DNSName &qname, const QType& qtype, const DNSName &zonename, const DNSPacket& packet);
bool axfrfilter(const ComboAddress&, const DNSName&, const DNSResourceRecord&, std::vector<DNSResourceRecord>&);
LuaContext* getLua();
#include <future>
#include <mutex>
#include <boost/format.hpp>
+#include <utility>
#include "version.hh"
#include "ext/luawrapper/include/LuaContext.hpp"
#include "lua-auth4.hh"
return ret;
}
-static vector<pair<int, ComboAddress> > convWIplist(std::unordered_map<int, wiplist_t > src)
+static vector<pair<int, ComboAddress> > convWIplist(const std::unordered_map<int, wiplist_t >& src)
{
vector<pair<int,ComboAddress> > ret;
* @example pickwrandom({ {100, '1.2.3.4'}, {50, '5.4.3.2'}, {1, '192.168.1.0'} })
*/
lua.writeFunction("pickwrandom", [](std::unordered_map<int, wiplist_t> ips) {
- vector<pair<int,ComboAddress> > conv = convWIplist(ips);
+ vector<pair<int,ComboAddress> > conv = convWIplist(std::move(ips));
return pickwrandom(conv).toString();
});
#include "dns_random.hh"
#include "ipcipher.hh"
#include <fstream>
+#include <utility>
#include <termios.h> //termios, TCSANOW, ECHO, ICANON
#include "opensslsigners.hh"
#ifdef HAVE_LIBSODIUM
unixDie("Making temporary filename in "+string(tmpnam));
struct deleteme {
~deleteme() { unlink(d_name.c_str()); }
- deleteme(string name) : d_name(name) {}
+ deleteme(string name) : d_name(std::move(name)) {}
string d_name;
} dm(tmpnam);
}
-static int loadZone(DNSName zone, const string& fname) {
+static int loadZone(const DNSName& zone, const string& fname) {
UeberBackend B;
DomainInfo di;
#include <iostream>
#include <sstream>
#include <algorithm>
+#include <utility>
#include "arguments.hh"
#include "lock.hh"
#include "iputils.hh"
throw PDNSException("Attempt to re-declare func statbag '"+key+"'");
}
- d_funcstats[key]=func;
+ d_funcstats[key]=std::move(func);
d_keyDescrips[key]=descrip;
d_statTypes[key]=statType;
}
#include "misc.hh"
#include <thread>
#include "threadname.hh"
+#include <utility>
#include <vector>
#include "logger.hh"
#include <stdio.h>
this->status = status_;
}
-static void bareHandlerWrapper(WebServer::HandlerFunction handler, YaHTTP::Request* req, YaHTTP::Response* resp)
+static void bareHandlerWrapper(const WebServer::HandlerFunction& handler, YaHTTP::Request* req, YaHTTP::Response* resp)
{
// wrapper to convert from YaHTTP::* to our subclasses
handler(static_cast<HttpRequest*>(req), static_cast<HttpResponse*>(resp));
}
-void WebServer::registerBareHandler(const string& url, HandlerFunction handler)
+void WebServer::registerBareHandler(const string& url, const HandlerFunction& handler)
{
YaHTTP::THandlerFunction f = [=](YaHTTP::Request* req, YaHTTP::Response* resp){return bareHandlerWrapper(handler, req, resp);};
YaHTTP::Router::Any(url, f);
return false;
}
-void WebServer::apiWrapper(WebServer::HandlerFunction handler, HttpRequest* req, HttpResponse* resp, bool allowPassword) {
+void WebServer::apiWrapper(const WebServer::HandlerFunction& handler, HttpRequest* req, HttpResponse* resp, bool allowPassword) {
if (optionsHandler(req, resp)) return;
resp->headers["access-control-allow-origin"] = "*";
}
}
-void WebServer::registerApiHandler(const string& url, HandlerFunction handler, bool allowPassword) {
+void WebServer::registerApiHandler(const string& url, const HandlerFunction& handler, bool allowPassword) {
auto f = [=](HttpRequest *req, HttpResponse* resp){apiWrapper(handler, req, resp, allowPassword);};
registerBareHandler(url, f);
}
-void WebServer::webWrapper(WebServer::HandlerFunction handler, HttpRequest* req, HttpResponse* resp) {
+void WebServer::webWrapper(const WebServer::HandlerFunction& handler, HttpRequest* req, HttpResponse* resp) {
if (!d_webserverPassword.empty()) {
bool auth_ok = req->compareAuthorization(d_webserverPassword);
if (!auth_ok) {
handler(req, resp);
}
-void WebServer::registerWebHandler(const string& url, HandlerFunction handler) {
+void WebServer::registerWebHandler(const string& url, const HandlerFunction& handler) {
auto f = [=](HttpRequest *req, HttpResponse *resp){webWrapper(handler, req, resp);};
registerBareHandler(url, f);
}
static void *WebServerConnectionThreadStart(const WebServer* webServer, std::shared_ptr<Socket> client) {
setThreadName("pdns-r/webhndlr");
try {
- webServer->serveConnection(client);
+ webServer->serveConnection(std::move(client));
}
catch(PDNSException &e) {
g_log<<Logger::Error<<"PDNSException while serving a connection in main webserver thread: "<<e.reason<<endl;
}
}
-void WebServer::serveConnection(std::shared_ptr<Socket> client) const {
+void WebServer::serveConnection(const std::shared_ptr<Socket>& client) const {
const string logprefix = d_logprefix + to_string(getUniqueID()) + " ";
HttpRequest req(logprefix);
void bind();
void go();
- void serveConnection(std::shared_ptr<Socket> client) const;
+ void serveConnection(const std::shared_ptr<Socket>& client) const;
void handleRequest(HttpRequest& request, HttpResponse& resp) const;
typedef boost::function<void(HttpRequest* req, HttpResponse* resp)> HandlerFunction;
- void registerApiHandler(const string& url, HandlerFunction handler, bool allowPassword=false);
- void registerWebHandler(const string& url, HandlerFunction handler);
+ void registerApiHandler(const string& url, const HandlerFunction& handler, bool allowPassword=false);
+ void registerWebHandler(const string& url, const HandlerFunction& handler);
enum class LogLevel : uint8_t {
None = 0, // No logs from requests at all
};
protected:
- void registerBareHandler(const string& url, HandlerFunction handler);
+ void registerBareHandler(const string& url, const HandlerFunction& handler);
void logRequest(const HttpRequest& req, const ComboAddress& remote) const;
void logResponse(const HttpResponse& resp, const ComboAddress& remote, const string& logprefix) const;
std::shared_ptr<Server> d_server;
std::string d_apikey;
- void apiWrapper(WebServer::HandlerFunction handler, HttpRequest* req, HttpResponse* resp, bool allowPassword);
+ void apiWrapper(const WebServer::HandlerFunction& handler, HttpRequest* req, HttpResponse* resp, bool allowPassword);
std::string d_webserverPassword;
- void webWrapper(WebServer::HandlerFunction handler, HttpRequest* req, HttpResponse* resp);
+ void webWrapper(const WebServer::HandlerFunction& handler, HttpRequest* req, HttpResponse* resp);
ssize_t d_maxbodysize; // in bytes
}
}
-static void gatherRecords(UeberBackend& B, const string& logprefix, const Json container, const DNSName& qname, const QType qtype, const int ttl, vector<DNSResourceRecord>& new_records) {
+static void gatherRecords(UeberBackend& B, const string& logprefix, const Json& container, const DNSName& qname, const QType& qtype, const int ttl, vector<DNSResourceRecord>& new_records) {
DNSResourceRecord rr;
rr.qname = qname;
rr.qtype = qtype;
}
}
-static void gatherComments(const Json container, const DNSName& qname, const QType qtype, vector<Comment>& new_comments) {
+static void gatherComments(const Json& container, const DNSName& qname, const QType& qtype, vector<Comment>& new_comments) {
Comment c;
c.qname = qname;
c.qtype = qtype;
}
-static void extractDomainInfoFromDocument(const Json document, boost::optional<DomainInfo::DomainKind>& kind, boost::optional<vector<ComboAddress>>& masters, boost::optional<string>& account) {
+static void extractDomainInfoFromDocument(const Json& document, boost::optional<DomainInfo::DomainKind>& kind, boost::optional<vector<ComboAddress>>& masters, boost::optional<string>& account) {
if (document["kind"].is_string()) {
kind = DomainInfo::stringToKind(stringFromJson(document, "kind"));
} else {
}
}
-static void updateDomainSettingsFromDocument(UeberBackend& B, const DomainInfo& di, const DNSName& zonename, const Json document, bool rectifyTransaction=true) {
+static void updateDomainSettingsFromDocument(UeberBackend& B, const DomainInfo& di, const DNSName& zonename, const Json& document, bool rectifyTransaction=true) {
boost::optional<DomainInfo::DomainKind> kind;
boost::optional<vector<ComboAddress>> masters;
boost::optional<string> account;
}
// Throws 404 if the key with inquireKeyId does not exist
-static void apiZoneCryptoKeysCheckKeyExists(DNSName zonename, int inquireKeyId, DNSSECKeeper *dk) {
+static void apiZoneCryptoKeysCheckKeyExists(const DNSName& zonename, int inquireKeyId, DNSSECKeeper *dk) {
DNSSECKeeper::keyset_t keyset=dk->getKeys(zonename, false);
bool found = false;
for(const auto& value : keyset) {
}
}
-static void apiZoneCryptokeysGET(DNSName zonename, int inquireKeyId, HttpResponse *resp, DNSSECKeeper *dk) {
+static void apiZoneCryptokeysGET(const DNSName& zonename, int inquireKeyId, HttpResponse *resp, DNSSECKeeper *dk) {
DNSSECKeeper::keyset_t keyset=dk->getKeys(zonename, false);
bool inquireSingleKey = inquireKeyId >= 0;
* Case 3: the key or zone does not exist.
* The server returns 404 Not Found
* */
-static void apiZoneCryptokeysDELETE(DNSName zonename, int inquireKeyId, HttpRequest *req, HttpResponse *resp, DNSSECKeeper *dk) {
+static void apiZoneCryptokeysDELETE(const DNSName& zonename, int inquireKeyId, HttpRequest *req, HttpResponse *resp, DNSSECKeeper *dk) {
if (dk->removeKey(zonename, inquireKeyId)) {
resp->body = "";
resp->status = 204;
* The server returns 201 Created and all public data about the added cryptokey
*/
-static void apiZoneCryptokeysPOST(DNSName zonename, HttpRequest *req, HttpResponse *resp, DNSSECKeeper *dk) {
+static void apiZoneCryptokeysPOST(const DNSName& zonename, HttpRequest *req, HttpResponse *resp, DNSSECKeeper *dk) {
auto document = req->json();
string privatekey_fieldname = "privatekey";
auto privatekey = document["privatekey"];
* Case 3: the backend returns false on de/activation. An error occurred.
* The sever returns 422 Unprocessable Entity with message "Could not de/activate Key: :cryptokey_id in Zone: :zone_name"
* */
-static void apiZoneCryptokeysPUT(DNSName zonename, int inquireKeyId, HttpRequest *req, HttpResponse *resp, DNSSECKeeper *dk) {
+static void apiZoneCryptokeysPUT(const DNSName& zonename, int inquireKeyId, HttpRequest *req, HttpResponse *resp, DNSSECKeeper *dk) {
//throws an exception if the Body is empty
auto document = req->json();
//throws an exception if the key does not exist or is not a bool
}
}
-static void gatherRecordsFromZone(const std::string& zonestring, vector<DNSResourceRecord>& new_records, DNSName zonename) {
+static void gatherRecordsFromZone(const std::string& zonestring, vector<DNSResourceRecord>& new_records, const DNSName& zonename) {
DNSResourceRecord rr;
vector<string> zonedata;
stringtok(zonedata, zonestring, "\r\n");
stackFile(fname);
}
-ZoneParserTNG::ZoneParserTNG(const vector<string> zonedata, const DNSName& zname, bool upgradeContent):
+ZoneParserTNG::ZoneParserTNG(const vector<string>& zonedata, const DNSName& zname, bool upgradeContent):
d_zonename(zname), d_zonedata(zonedata), d_defaultttl(3600),
d_templatecounter(0), d_templatestop(0), d_templatestep(0),
d_havedollarttl(false), d_fromfile(false), d_upgradeContent(upgradeContent)
{
public:
ZoneParserTNG(const string& fname, const DNSName& zname=g_rootdnsname, const string& reldir="", bool upgradeContent=false);
- ZoneParserTNG(const vector<string> zonedata, const DNSName& zname, bool upgradeContent=false);
+ ZoneParserTNG(const vector<string>& zonedata, const DNSName& zname, bool upgradeContent=false);
~ZoneParserTNG();
bool get(DNSResourceRecord& rr, std::string* comment=0);