d_dolog = dolog;
d_residx = 0;
d_paridx = 0;
+ d_result = SQL_NO_DATA;
+ m_columncount = 0;
// Allocate statement handle.
result = SQLAllocHandle( SQL_HANDLE_STMT, d_conn, &d_statement );
private:
string d_query;
bool d_dolog;
- bool d_havenextrow;
int d_residx;
size_t d_paridx,d_parnum;
SQLRETURN d_result;
private:
pthread_t backend_pid;
- unsigned int backend_count;
+ unsigned int backend_count{0};
int f_lua_exec_error;
PipeBackend::PipeBackend(const string &suffix)
{
d_disavow=false;
+ d_regex=nullptr;
signal(SIGCHLD, SIG_IGN);
setArgPrefix("pipe"+suffix);
try {
sockets.push_back(sock);
}
new thread(recvThread, &sockets);
- int qps=atoi(argv[3]);
+ int qps;
ofstream plot("plot");
for(qps=qpsstart;;qps *= 1.1) {
void BackendMakerClass::load(const string &module)
{
- int res;
+ bool res;
if(module.find(".")==string::npos)
res=UeberBackend::loadmodule(arg()["module-dir"]+"/lib"+module+"backend.so");
includeboilerplate(TSIG)
TSIGRecordContent() {}
- uint16_t d_origID;
- uint16_t d_fudge;
+ uint16_t d_origID{0};
+ uint16_t d_fudge{0};
DNSName d_algoName;
string d_mac;
string d_otherData;
- uint64_t d_time;
+ uint64_t d_time{0};
// uint16_t d_macSize;
- uint16_t d_eRcode;
+ uint16_t d_eRcode{0};
// uint16_t d_otherLen
};
uint16_t getTag() const;
uint16_t getTag();
- uint16_t d_flags;
- uint8_t d_protocol;
- uint8_t d_algorithm;
+ uint16_t d_flags{0};
+ uint8_t d_protocol{0};
+ uint8_t d_algorithm{0};
string d_key;
bool operator<(const DNSKEYRecordContent& rhs) const
{
includeboilerplate(CDNSKEY)
uint16_t getTag();
- uint16_t d_flags;
- uint8_t d_protocol;
- uint8_t d_algorithm;
+ uint16_t d_flags{0};
+ uint8_t d_protocol{0};
+ uint8_t d_algorithm{0};
string d_key;
};
includeboilerplate(DS)
- uint16_t d_tag;
- uint8_t d_algorithm, d_digesttype;
+ uint16_t d_tag{0};
+ uint8_t d_algorithm{0}, d_digesttype{0};
string d_digest;
};
CDSRecordContent();
includeboilerplate(CDS)
- uint16_t d_tag;
- uint8_t d_algorithm, d_digesttype;
+ uint16_t d_tag{0};
+ uint8_t d_algorithm{0}, d_digesttype{0};
string d_digest;
};
DLVRecordContent();
includeboilerplate(DLV)
- uint16_t d_tag;
- uint8_t d_algorithm, d_digesttype;
+ uint16_t d_tag{0};
+ uint8_t d_algorithm{0}, d_digesttype{0};
string d_digest;
};
RRSIGRecordContent();
includeboilerplate(RRSIG)
- uint16_t d_type;
- uint16_t d_tag;
+ uint16_t d_type{0};
+ uint16_t d_tag{0};
DNSName d_signer;
string d_signature;
- uint32_t d_originalttl, d_sigexpire, d_siginception;
- uint8_t d_algorithm, d_labels;
+ uint32_t d_originalttl{0}, d_sigexpire{0}, d_siginception{0};
+ uint8_t d_algorithm{0}, d_labels{0};
};
//namespace {
public:
RKEYRecordContent();
includeboilerplate(RKEY)
- uint16_t d_flags;
- uint8_t d_protocol, d_algorithm;
+ uint16_t d_flags{0};
+ uint8_t d_protocol{0}, d_algorithm{0};
string d_key;
};
string getZoneRepresentation(bool noDot=false) const override;
void toPacket(DNSPacketWriter& pw) override;
- uint8_t d_algorithm, d_flags;
- uint16_t d_iterations;
+ uint8_t d_algorithm{0}, d_flags{0};
+ uint16_t d_iterations{0};
string d_salt;
string d_nexthash;
std::set<uint16_t> d_set;
}
- uint8_t d_algorithm, d_flags;
- uint16_t d_iterations;
+ uint8_t d_algorithm{0}, d_flags{0};
+ uint16_t d_iterations{0};
string d_salt;
};
string getZoneRepresentation(bool noDot=false) const override;
void toPacket(DNSPacketWriter& pw) override;
- uint8_t d_version, d_size, d_horizpre, d_vertpre;
- uint32_t d_latitude, d_longitude, d_altitude;
+ uint8_t d_version{0}, d_size{0}, d_horizpre{0}, d_vertpre{0};
+ uint32_t d_latitude{0}, d_longitude{0}, d_altitude{0};
uint16_t getType() const override
{
return QType::LOC;
string getZoneRepresentation(bool noDot=false) const override;
void toPacket(DNSPacketWriter& pw) override;
- uint32_t d_ip;
+ uint32_t d_ip{0};
std::bitset<65535> d_services;
private:
};
includeboilerplate(TKEY)
// storage for the bytes
- uint16_t d_othersize;
- uint16_t d_mode;
- uint32_t d_inception;
- uint32_t d_expiration;
+ uint16_t d_othersize{0};
+ uint16_t d_mode{0};
+ uint32_t d_inception{0};
+ uint32_t d_expiration{0};
DNSName d_algo;
string d_key;
string d_other;
- uint16_t d_error;
- uint16_t d_keysize;
+ uint16_t d_error{0};
+ uint16_t d_keysize{0};
private:
};
cerr<<"Fatal error: "<<ae.reason<<endl;
return 1;
}
+ catch(const std::runtime_error& e) {
+ cerr<<"Runtime error: "<<e.what()<<endl;
+ return 2;
+ }
return 0;
}
flags=LOG_PID|LOG_NDELAY;
d_facility=facility;
d_loglevel=Logger::None;
+ d_disableSyslog=false;
consoleUrgency=Error;
name=n;
LWResult() : d_usec(0) {}
vector<DNSRecord> d_records;
- int d_rcode;
- bool d_aabit, d_tcbit;
- uint32_t d_usec;
- bool d_haveEDNS;
+ int d_rcode{0};
+ bool d_aabit{false}, d_tcbit{false};
+ uint32_t d_usec{0};
+ bool d_haveEDNS{false};
};
int asyncresolve(const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, LWResult* res);
This limit applies solely to the stack, the heap is not limited in any way. If threads need to allocate a lot of data,
the use of new/delete is suggested.
*/
- MTasker(size_t stacksize=8192) : d_stacksize(stacksize)
+ MTasker(size_t stacksize=8192) : d_tid(0), d_maxtid(0), d_stacksize(stacksize), d_waitstatus(Error)
{
- d_maxtid=0;
}
typedef void tfunc_t(void *); //!< type of the pointer that starts a thread
bool d_logDNSDetails;
bool d_doIPv6AdditionalProcessing;
bool d_doDNAME;
- int d_sendRootReferral;
AuthLua* d_pdl;
UeberBackend B; // every thread an own instance
// do mode change if socket-mode is given
if(!::arg().isEmpty("socket-mode")) {
mode_t sockmode=::arg().asMode("socket-mode");
- chmod(sockname.c_str(), sockmode);
+ if(chmod(sockname.c_str(), sockmode) < 0) {
+ unixDie("Failed to chmod control socket");
+ }
}
}
{
d_fd=-1;
*d_local.sun_path=0;
+ d_local.sun_family=0;
}
RecursorControlChannel::~RecursorControlChannel()
JSON11_LIBS = $(top_srcdir)/ext/json11/libjson11.la
-AM_CPPFLAGS = $(LUA_CFLAGS) $(YAHTTP_CFLAGS) $(BOOST_CPPFLAGS) $(SANITIZER_FLAGS) -O3 -Wall -pthread -DSYSCONFDIR=\"${sysconfdir}\"
+AM_CPPFLAGS = $(LUA_CFLAGS) $(YAHTTP_CFLAGS) $(BOOST_CPPFLAGS) $(BOTAN110_CFLAGS) $(SANITIZER_FLAGS) -O3 -Wall -pthread -DSYSCONFDIR=\"${sysconfdir}\"
AM_CPPFLAGS += \
-I$(top_srcdir)/ext/json11 \
else
local = ComboAddress("::");
int sock = makeQuerySocket(local, false); // create TCP socket. RFC2136 section 6.2 seems to be ok with this.
+ if(sock < 0) {
+ L<<Logger::Error<<msgPrefix<<"Error creating socket: "<<stringerror()<<endl;
+ continue;
+ }
if( connect(sock, (struct sockaddr*)&remote, remote.getSocklen()) < 0 ) {
L<<Logger::Error<<msgPrefix<<"Failed to connect to "<<remote.toStringWithPort()<<": "<<stringerror()<<endl;
int numread;
while(n<len) {
numread=d_rsock.read(creply+n, len-n);
- if(numread<0)
+ if(numread<0) {
+ delete[] creply;
throw PDNSException("tcp read failed: "+std::string(strerror(errno)));
+ }
n+=numread;
}
return NULL;
}
-HttpResponse WebServer::handleRequest(HttpRequest req)
+void WebServer::handleRequest(HttpRequest& req, HttpResponse& resp)
{
- HttpResponse resp;
-
// set default headers
resp.headers["Content-Type"] = "text/html; charset=utf-8";
} else {
resp.headers["Content-Length"] = std::to_string(resp.body.size());
}
-
- return resp;
}
void WebServer::serveConnection(Socket *client)
// request stays incomplete
}
- HttpResponse resp = WebServer::handleRequest(req);
+ HttpResponse resp;
+ WebServer::handleRequest(req, resp);
ostringstream ss;
resp.write(ss);
string reply = ss.str();
void go();
void serveConnection(Socket *client);
- HttpResponse handleRequest(HttpRequest request);
+ void handleRequest(HttpRequest& request, HttpResponse& resp);
typedef boost::function<void(HttpRequest* req, HttpResponse* resp)> HandlerFunction;
void registerApiHandler(const string& url, HandlerFunction handler);
// request stays incomplete
}
- HttpResponse resp = handleRequest(req);
+ HttpResponse resp;
+ handleRequest(req, resp);
ostringstream ss;
resp.write(ss);
data = ss.str();