Add reload of dns server settings

This commit is contained in:
Ai Lin Chia
2017-07-11 11:39:34 +02:00
parent afffa35e56
commit 2ef35d1d7e
4 changed files with 58 additions and 19 deletions

@ -98,6 +98,34 @@ static void* processing_thread(void *args) {
return 0;
}
bool GbDns::initializeSettings() {
log(LOG_INFO, "dns: Initializing settings");
// setup dns servers
AresList<ares_addr_port_node> servers;
for (int i = 0; i < g_conf.m_numDns; ++i) {
ares_addr_port_node *server = (ares_addr_port_node*)mmalloc(sizeof(ares_addr_port_node), "ares-server");
if (server == NULL) {
logError("Unable allocate ares server");
return false;
}
server->addr.addr4.s_addr = g_conf.m_dnsIps[i];
server->family = AF_INET;
server->udp_port = g_conf.m_dnsPorts[i];
servers.append(server);
}
ScopedLock sl(s_requestMtx);
if (ares_set_servers_ports(s_channel, servers.getHead()) != ARES_SUCCESS) {
logError("Unable to set ares server settings");
return false;
}
return true;
}
bool GbDns::initialize() {
log(LOG_INFO, "dns: Initializing library");
@ -127,24 +155,7 @@ bool GbDns::initialize() {
return false;
}
// setup dns servers
AresList<ares_addr_port_node> servers;
for (int i = 0; i < g_conf.m_numDns; ++i) {
ares_addr_port_node *server = (ares_addr_port_node*)mmalloc(sizeof(ares_addr_port_node), "ares-server");
if (server == NULL) {
logError("Unable allocate ares server");
return false;
}
server->addr.addr4.s_addr = g_conf.m_dnsIps[i];
server->family = AF_INET;
server->udp_port = g_conf.m_dnsPorts[i];
servers.append(server);
}
if (ares_set_servers_ports(s_channel, servers.getHead()) != ARES_SUCCESS) {
logError("Unable to set ares server settings");
if (!initializeSettings()) {
return false;
}

@ -12,6 +12,8 @@ namespace GbDns {
};
bool initialize();
bool initializeSettings();
void finalize();
void getARecord(const char *hostname, void (*callback)(DnsResponse *response, void *state), void *state);

@ -34,6 +34,7 @@
#include "Tagdb.h"
#include "Clusterdb.h"
#include "Collectiondb.h"
#include "GbDns.h"
#include <set>
@ -5404,6 +5405,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
// default to google public dns #1
m->m_def = (char*)PUBLICLY_AVAILABLE_DNS1;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5419,6 +5421,7 @@ void Parms::init ( ) {
// default to google public dns #2
m->m_def = (char*)PUBLICLY_AVAILABLE_DNS2;
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5431,6 +5434,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5442,6 +5446,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5453,6 +5458,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5464,6 +5470,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5475,6 +5482,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5486,6 +5494,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5497,6 +5506,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5508,6 +5518,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5519,6 +5530,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5530,6 +5542,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5541,6 +5554,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5552,6 +5566,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5563,6 +5578,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -5574,6 +5590,7 @@ void Parms::init ( ) {
m->m_type = TYPE_IP;
m->m_def = "0.0.0.0";
m->m_group = false;
m->m_flags = PF_REBUILDDNSSETTINGS;
m->m_page = PAGE_MASTER;
m->m_obj = OBJ_CONF;
m++;
@ -10052,6 +10069,7 @@ void Parms::handleRequest3fLoop(void *weArg) {
CollectionRec *cx = NULL;
bool rebuildRankingSettings = false;
bool rebuildDnsSettings = false;
// process them
const char *p = we->m_parmPtr;
@ -10111,6 +10129,10 @@ void Parms::handleRequest3fLoop(void *weArg) {
if ( parm->m_flags & PF_REBUILDRANKINGSETTINGS )
rebuildRankingSettings = true;
if (parm->m_flags & PF_REBUILDDNSSETTINGS) {
rebuildDnsSettings = true;
}
// get collnum i guess
if ( parm->m_type != TYPE_CMD )
we->m_collnum = getCollnumFromParmRec ( rec );
@ -10175,6 +10197,10 @@ void Parms::handleRequest3fLoop(void *weArg) {
if ( rebuildRankingSettings )
reinitializeRankingSettings();
if (rebuildDnsSettings) {
GbDns::initializeSettings();
}
// note it
if ( ! we->m_sentReply )
log("parms: sending parm update reply");

@ -59,7 +59,7 @@ enum parameter_type_t {
#define PF_API 0x00000010
#define PF_REBUILDURLFILTERS 0x00000020
#define PF_NOSYNC 0x00000040 // Don't synchronize the parameter value across hosts
//#define PF_UNUSED 0x00000080
#define PF_REBUILDDNSSETTINGS 0x00000080
#define PF_HIDDEN 0x00000100 // Hidden parameter/setting
#define PF_NOSAVE 0x00000200 // Don't save to gb.conf/coll.conf/..
#define PF_DUP 0x00000400 // Underlying variable is coverd by other parameter already