return bbd;
}
-bool Bind2Backend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account)
+bool Bind2Backend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId)
{
string filename = getArg("supermaster-destdir") + '/' + domain.toStringNoDot();
bbd.d_masters.push_back(ComboAddress(ip, 53));
bbd.setCtime();
safePutBBDomainInfo(bbd);
+
+ if (zoneId) {
+ if (!safeGetBBDomainInfo(domain, &bbd))
+ return false;
+ *zoneId = bbd.d_id;
+ }
+
return true;
}
// for supermaster support
bool superMasterBackend(const string& ip, const DNSName& domain, const vector<DNSResourceRecord>& nsset, string* nameserver, string* account, DNSBackend** db) override;
static std::mutex s_supermaster_config_lock;
- bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account) override;
+ bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId = nullptr) override;
private:
void setupDNSSEC();
return true;
}
-bool RemoteBackend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account)
+bool RemoteBackend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId)
{
Json query = Json::object{
{"method", "createSlaveDomain"},
void setNotified(uint32_t id, uint32_t serial) override;
bool doesDNSSEC() override;
bool superMasterBackend(const string& ip, const DNSName& domain, const vector<DNSResourceRecord>& nsset, string* nameserver, string* account, DNSBackend** ddb) override;
- bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account) override;
+ bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId = nullptr) override;
bool replaceRRSet(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector<DNSResourceRecord>& rrset) override;
bool feedRecord(const DNSResourceRecord& r, const DNSName& ordername, bool ordernameIsNSEC3 = false) override;
bool feedEnts(int domain_id, map<DNSName, bool>& nonterm) override;
return true;
}
-bool GSQLBackend::createSlaveDomain(const string &ip, const DNSName &domain, const string &nameserver, const string &account)
+bool GSQLBackend::createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId)
{
string name;
vector<ComboAddress> masters({ComboAddress(ip, 53)});
masters = tmp;
}
}
- createDomain(domain, DomainInfo::Slave, masters, account, nullptr);
+ createDomain(domain, DomainInfo::Slave, masters, account, zoneId);
}
catch(SSqlException &e) {
throw PDNSException("Database error trying to insert new slave domain '"+domain.toLogString()+"': "+ e.txtReason());
bool feedEnts(int domain_id, map<DNSName,bool>& nonterm) override;
bool feedEnts3(int domain_id, const DNSName &domain, map<DNSName,bool> &nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow) override;
bool createDomain(const DNSName &domain, const DomainInfo::DomainKind kind, const vector<ComboAddress> &masters, const string &account, int* zoneId=nullptr) override;
- bool createSlaveDomain(const string &ip, const DNSName &domain, const string &nameserver, const string &account) override;
+ bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId = nullptr) override;
bool deleteDomain(const DNSName &domain) override;
bool superMasterAdd(const string &ip, const string &nameserver, const string &account) override;
bool superMasterBackend(const string &ip, const DNSName &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db) override;
}
//! called by PowerDNS to create a slave record for a superMaster
- virtual bool createSlaveDomain(const string &ip, const DNSName &domain, const string &nameserver, const string &account)
+ virtual bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account, int* zoneId = nullptr)
{
return false;
}
return RCode::Refused;
}
try {
- db->createSlaveDomain(remote.toString(), p.qdomain, nameserver, account);
+ int zoneId{-1};
+ db->createSlaveDomain(remote.toString(), p.qdomain, nameserver, account, &zoneId);
+ g_zoneCache.add(p.qdomain, zoneId);
if (tsigkeyname.empty() == false) {
vector<string> meta;
meta.push_back(tsigkeyname.toStringNoDot());
launch=gsqlite3
gsqlite3-dnssec=yes
gsqlite3-database=slave.db
+zone-cache-refresh-interval=900
EOF
rm -f master.db slave.db
sqlite3 master.db < ../modules/gsqlite3backend/schema.sqlite3.sql