#include "pdns/logger.hh"
#include "pdns/arguments.hh"
-/*
- virtual bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth)
- virtual bool updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const std::string& qname, const std::string& ordername, bool auth)
- virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& unhashed, std::string& before, std::string& after)
- virtual bool getDomainKeys(const string& name, unsigned int kind, std::vector<KeyData>& keys)
- virtual bool removeDomainKey(const string& name, unsigned int id)
- virtual int addDomainKey(const string& name, const KeyData& key)
- virtual bool activateDomainKey(const string& name, unsigned int id)
- virtual bool deactivateDomainKey(const string& name, unsigned int id)
-
- virtual bool getTSIGKey(const string& name, string* algorithm, string* content) { return false; }
-
- virtual bool setDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta)
- virtual bool getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta)
- virtual void alsoNotifies(const string &domain, set<string> *ips)
-
-*/
-
-bool LUABackend::updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth) {
+bool LUABackend::updateDNSSECOrderAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, bool auth) {
if(f_lua_updatednssecorderandauth == 0) {
if(logging)
L << Logger::Info << backend_name << "(updateDNSSECOrderAndAuth) domain_id: '" << domain_id << "' zonename: '" << zonename << "' qname: '" << qname << "' auth: '" << auth << "'" << endl;
- string ins=toLower(labelReverse(makeRelative(qname, zonename)));
+ string ins=toLower(labelReverse(qname.makeRelative(zonename).toString()));
return this->updateDNSSECOrderAndAuthAbsolute(domain_id, qname, ins, auth);
-
}
if(logging)
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_updatednssecorderandauth);
- lua_pushnumber(lua, domain_id);
- lua_pushstring(lua, zonename.c_str());
- lua_pushstring(lua, qname.c_str());
+ lua_pushinteger(lua, domain_id);
+ lua_pushstring(lua, zonename.toString().c_str());
+ lua_pushstring(lua, qname.toString().c_str());
lua_pushboolean(lua, auth);
if(lua_pcall(lua, 4, 1, f_lua_exec_error) != 0) {
return ok;
}
-bool LUABackend::updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const std::string& qname, const std::string& ordername, bool auth) {
+bool LUABackend::updateDNSSECOrderNameAndAuth(unsigned int, DNSName const&, DNSName const&, DNSName const&, bool, unsigned short)
+{
+ return false;
+}
+
+bool LUABackend::updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const DNSName& qname, const std::string& ordername, bool auth) {
if(f_lua_updatednssecorderandauthabsolute == 0)
return false;
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_updatednssecorderandauthabsolute);
- lua_pushnumber(lua, domain_id);
- lua_pushstring(lua, qname.c_str());
+ lua_pushinteger(lua, domain_id);
+ lua_pushstring(lua, qname.toString().c_str());
lua_pushstring(lua, ordername.c_str());
lua_pushboolean(lua, auth);
return ok;
}
-bool LUABackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& unhashed, std::string& before, std::string& after) {
+bool LUABackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, DNSName& unhashed, std::string& before, std::string& after) {
if(f_lua_getbeforeandafternamesabsolute == 0)
return false;
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_updatednssecorderandauthabsolute);
- lua_pushnumber(lua, id);
+ lua_pushinteger(lua, id);
lua_pushstring(lua, qname.c_str());
if(lua_pcall(lua, 2, 3, f_lua_exec_error) != 0) {
}
//will this be correct since we are poping one at the time?
- unhashed = lua_tostring(lua, -1);
+ unhashed = DNSName(lua_tostring(lua, -1));
lua_pop(lua, 1);
returnedwhat = lua_type(lua, -1);
return ok;
}
-bool LUABackend::updateDomainKey(const string& name, unsigned int &id, bool toowhat ) {
+bool LUABackend::updateDomainKey(const DNSName& name, unsigned int &id, bool toowhat ) {
if(f_lua_updatedomainkey == 0)
return false;
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_updatedomainkey);
- lua_pushstring(lua, name.c_str());
- lua_pushnumber(lua, id);
+ lua_pushstring(lua, name.toString().c_str());
+ lua_pushinteger(lua, id);
lua_pushboolean(lua, toowhat);
if(lua_pcall(lua, 3, 1, f_lua_exec_error) != 0) {
return ok;
}
-bool LUABackend::activateDomainKey(const string& name, unsigned int id) {
+bool LUABackend::activateDomainKey(const DNSName& name, unsigned int id) {
if(f_lua_activatedomainkey == 0)
return updateDomainKey(name, id, true);
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_activatedomainkey);
- lua_pushstring(lua, name.c_str());
- lua_pushnumber(lua, id);
+ lua_pushstring(lua, name.toString().c_str());
+ lua_pushinteger(lua, id);
if(lua_pcall(lua, 2, 1, f_lua_exec_error) != 0) {
string e = backend_name + lua_tostring(lua, -1);
return ok;
}
-bool LUABackend::deactivateDomainKey(const string& name, unsigned int id) {
+bool LUABackend::deactivateDomainKey(const DNSName& name, unsigned int id) {
if(f_lua_deactivatedomainkey == 0)
return updateDomainKey(name, id, false);
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_deactivatedomainkey);
- lua_pushstring(lua, name.c_str());
- lua_pushnumber(lua, id);
+ lua_pushstring(lua, name.toString().c_str());
+ lua_pushinteger(lua, id);
if(lua_pcall(lua, 2, 1, f_lua_exec_error) != 0) {
string e = backend_name + lua_tostring(lua, -1);
return ok;
}
-bool LUABackend::removeDomainKey(const string& name, unsigned int id) {
+bool LUABackend::removeDomainKey(const DNSName& name, unsigned int id) {
if(f_lua_removedomainkey == 0)
return false;
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_removedomainkey);
- lua_pushstring(lua, name.c_str());
- lua_pushnumber(lua, id);
+ lua_pushstring(lua, name.toString().c_str());
+ lua_pushinteger(lua, id);
if(lua_pcall(lua, 2, 1, f_lua_exec_error) != 0) {
string e = backend_name + lua_tostring(lua, -1);
return ok;
}
-int LUABackend::addDomainKey(const string& name, const KeyData& key) {
+int LUABackend::addDomainKey(const DNSName& name, const KeyData& key) {
// there is no logging function in pdnsutil when running this routine?
//key = id, flags, active, content
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_adddomainkey);
- lua_pushstring(lua, name.c_str());
+ lua_pushstring(lua, name.toString().c_str());
lua_newtable(lua);
lua_pushliteral(lua, "flags");
- lua_pushnumber(lua, key.flags);
+ lua_pushinteger(lua, key.flags);
lua_settable(lua, -3);
lua_pushliteral(lua, "active");
return ok;
}
-bool LUABackend::getDomainKeys(const string& name, unsigned int kind, std::vector<KeyData>& keys) {
+bool LUABackend::getDomainKeys(const DNSName& name, unsigned int kind, std::vector<KeyData>& keys) {
//what is kind used for?
if(f_lua_getdomainkeys == 0)
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_getdomainkeys);
- lua_pushstring(lua, name.c_str());
- lua_pushnumber(lua, kind);
+ lua_pushstring(lua, name.toString().c_str());
+ lua_pushinteger(lua, kind);
if(lua_pcall(lua, 2, 1, f_lua_exec_error) != 0) {
string e = backend_name + lua_tostring(lua, -1);
return j > 0;
}
-bool LUABackend::getTSIGKey(const string& name, string* algorithm, string* content) {
+bool LUABackend::getTSIGKey(const DNSName& name, DNSName* algorithm, string* content) {
if(f_lua_gettsigkey == 0)
return false;
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_gettsigkey);
- lua_pushstring(lua, name.c_str());
+ lua_pushstring(lua, name.toString().c_str());
if(lua_pcall(lua, 1, 2, f_lua_exec_error) != 0) {
string e = backend_name + lua_tostring(lua, -1);
c = lua_tostring(lua, -1);
lua_pop(lua, 1);
- *algorithm = a;
+ *algorithm = DNSName(a);
*content = c;
if(logging)
return true;
}
-bool LUABackend::setDomainMetadata(const string& name, const std::string& kind, const std::vector<std::string>& meta) {
+bool LUABackend::setDomainMetadata(const DNSName& name, const std::string& kind, const std::vector<std::string>& meta) {
if(f_lua_setdomainmetadata == 0)
return false;
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_setdomainmetadata);
- lua_pushstring(lua, name.c_str());
+ lua_pushstring(lua, name.toString().c_str());
lua_pushstring(lua, kind.c_str());
lua_newtable(lua);
for(i = meta.begin(); i<meta.end(); i++ ) {
c++;
- lua_pushnumber(lua, c);
+ lua_pushinteger(lua, c);
lua_pushstring(lua, i->c_str());
lua_settable(lua, -3);
}
}
-bool LUABackend::getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta) {
+bool LUABackend::getDomainMetadata(const DNSName& name, const std::string& kind, std::vector<std::string>& meta) {
if(f_lua_getdomainmetadata == 0)
return false;
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_getdomainmetadata);
- lua_pushstring(lua, name.c_str());
+ lua_pushstring(lua, name.toString().c_str());
lua_pushstring(lua, kind.c_str());
if(lua_pcall(lua, 2, 1, f_lua_exec_error) != 0) {
return false;
}
+ if (lua_type(lua, -1) != LUA_TTABLE)
+ return false;
+
lua_pushnil(lua);
int j = 0;
}
-void LUABackend::alsoNotifies(const string &domain, set<string> *ips) {
+void LUABackend::alsoNotifies(const DNSName& domain, set<string> *ips) {
if(f_lua_alsonotifies == 0)
return;
lua_rawgeti(lua, LUA_REGISTRYINDEX, f_lua_alsonotifies);
- lua_pushstring(lua, domain.c_str());
+ lua_pushstring(lua, domain.toString().c_str());
if(lua_pcall(lua, 1, 1, f_lua_exec_error) != 0) {
string e = backend_name + lua_tostring(lua, -1);
return;
}
+ if (lua_type(lua, -1) != LUA_TTABLE)
+ return;
+
lua_pushnil(lua);
size_t returnedwhat;
// SLAVE BACKEND
- bool getDomainInfo(const string &domain, DomainInfo &di);
- bool isMaster(const string &name, const string &ip);
- void getUnfreshSlaveInfos(vector<DomainInfo>* domains);
- void setFresh(uint32_t id);
+ bool getDomainInfo(const DNSName& domain, DomainInfo &di) override;
+ bool isMaster(const DNSName& name, const string &ip) override;
+ void getUnfreshSlaveInfos(vector<DomainInfo>* domains) override;
+ void setFresh(uint32_t id) override;
- bool startTransaction(const string &qname, int id);
- bool commitTransaction();
- bool abortTransaction();
- bool feedRecord(const DNSResourceRecord &rr, string *ordername=0);
+ bool startTransaction(const DNSName &qname, int id) override;
+ bool commitTransaction() override;
+ bool abortTransaction() override;
+ bool feedRecord(const DNSResourceRecord &rr, string *ordername=0) override;
// SUPERMASTER BACKEND
- bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db);
- bool createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account);
+ bool superMasterBackend(const string &ip, const DNSName &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db) override;
+ bool createSlaveDomain(const string &ip, const DNSName &domain, const string &nameserver, const string &account) override;
// DNSSEC BACKEND
//! get a list of IP addresses that should also be notified for a domain
- void alsoNotifies(const string &domain, set<string> *ips);
- bool getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta);
- bool setDomainMetadata(const string& name, const std::string& kind, const std::vector<std::string>& meta);
-
- bool getDomainKeys(const string& name, unsigned int kind, std::vector<KeyData>& keys);
- bool removeDomainKey(const string& name, unsigned int id);
- bool activateDomainKey(const string& name, unsigned int id);
- bool deactivateDomainKey(const string& name, unsigned int id);
- bool getTSIGKey(const string& name, string* algorithm, string* content);
- int addDomainKey(const string& name, const KeyData& key);
-
- bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& unhashed, std::string& before, std::string& after);
- bool updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const std::string& qname, const std::string& ordername, bool auth);
- bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth);
-
-
+ void alsoNotifies(const DNSName &domain, set<string> *ips) override;
+ bool getDomainMetadata(const DNSName& name, const std::string& kind, std::vector<std::string>& meta) override;
+ bool setDomainMetadata(const DNSName& name, const std::string& kind, const std::vector<std::string>& meta) override;
+
+ bool getDomainKeys(const DNSName& name, unsigned int kind, std::vector<KeyData>& keys) override ;
+ bool removeDomainKey(const DNSName& name, unsigned int id) override ;
+ bool activateDomainKey(const DNSName& name, unsigned int id) override ;
+ bool deactivateDomainKey(const DNSName& name, unsigned int id) override ;
+ bool getTSIGKey(const DNSName& name, DNSName* algorithm, string* content) override ;
+ int addDomainKey(const DNSName& name, const KeyData& key) override ;
+ bool updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const DNSName& qname, const std::string& ordername, bool auth);
+ bool getBeforeAndAfterNamesAbsolute(uint32_t id, const string& qname, DNSName& unhashed, string& before, string& after) override;
+ bool updateDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, const DNSName& ordername, bool auth, const uint16_t qtype=QType::ANY) override;
+ bool updateDNSSECOrderAndAuth(uint32_t domain_id, const DNSName& zonename, const DNSName& qname, bool auth);
// OTHER
- void reload();
- void rediscover(string* status=0);
+ void reload() override ;
+ void rediscover(string* status=0) override ;
string backend_name;
bool logging;
//dnssec.cc
- bool updateDomainKey(const string& name, unsigned int &id, bool toowhat);
+ bool updateDomainKey(const DNSName& name, unsigned int &id, bool toowhat);
/*