]> granicus.if.org Git - pdns/commitdiff
fix dual-stack superslave when multiple namservers share a ip
authorKees Monshouwer <mind04@monshouwer.org>
Fri, 27 Dec 2013 11:06:39 +0000 (12:06 +0100)
committermind04 <mind04@monshouwer.org>
Fri, 27 Dec 2013 15:05:15 +0000 (16:05 +0100)
22 files changed:
modules/bindbackend/bindbackend2.cc
modules/bindbackend/bindbackend2.hh
modules/gmysqlbackend/gmysqlbackend.cc
modules/goraclebackend/goraclebackend.cc
modules/gpgsqlbackend/gpgsqlbackend.cc
modules/gsqlite3backend/gsqlite3backend.cc
modules/luabackend/luabackend.hh
modules/luabackend/supermaster.cc
modules/opendbxbackend/odbxbackend.cc
modules/opendbxbackend/odbxbackend.hh
modules/oraclebackend/oraclebackend.cc
modules/oraclebackend/oraclebackend.hh
modules/remotebackend/remotebackend.cc
modules/remotebackend/remotebackend.hh
modules/remotebackend/test-remotebackend.cc
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh
pdns/dnsbackend.hh
pdns/packethandler.cc
pdns/pdnssec.cc
pdns/ueberbackend.cc
pdns/ueberbackend.hh

index 7191bf1665df1743d84f549816b06285428cfe08..251b1d5655e5bb595f3196f119859c2e5e52a75b 100644 (file)
@@ -1259,7 +1259,7 @@ bool Bind2Backend::isMaster(const string &name, const string &ip)
   return false;
 }
 
-bool Bind2Backend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db)
+bool Bind2Backend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db)
 {
   // Check whether we have a configfile available.
   if (getArg("supermaster-config").empty())
@@ -1317,7 +1317,7 @@ BB2DomainInfo &Bind2Backend::createDomainEntry(const string &domain, const strin
   return bbd;
 }
 
-bool Bind2Backend::createSlaveDomain(const string &ip, const string &domain, const string &account)
+bool Bind2Backend::createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account)
 {
 
   string filename = getArg("supermaster-destdir")+'/'+domain;
index a6dbb1b73e4b770c437a06d0afa3e6d56fa3911d..31853be346b73563f59249272591f57976f636c0 100644 (file)
@@ -182,9 +182,9 @@ public:
   bool isMaster(const string &name, const string &ip);
 
   // for supermaster support
-  bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db);
+  bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db);
   static pthread_mutex_t s_supermaster_config_lock;
-  bool createSlaveDomain(const string &ip, const string &domain, const string &account);
+  bool createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account);
 
 
 private:
index 00e8de16399656ad74348d4e113d9956d787de0a..3e080a7d00d9e39c7b396f468b28a72a79ec8573 100644 (file)
@@ -88,7 +88,6 @@ public:
     declare(suffix,"info-all-slaves-query","","select id,name,master,last_check,type from domains where type='SLAVE'");
     declare(suffix,"supermaster-query","", "select account from supermasters where ip='%s' and nameserver='%s'");
     declare(suffix,"supermaster-name-to-ips", "", "select ip from supermasters where nameserver='%s'");
-    declare(suffix,"supermaster-ip-to-name", "", "select nameserver from supermasters where ip='%s'");
 
     declare(suffix,"insert-zone-query","", "insert into domains (type,name) values('NATIVE','%s')");
     declare(suffix,"insert-slave-query","", "insert into domains (type,name,master,account) values('SLAVE','%s','%s','%s')");
index eebcef97f238589921bd8643d9119dc525311306..b9565a430b90c99b36f3f3adaa854f532cfeaed1 100644 (file)
@@ -89,7 +89,6 @@ public:
     declare(suffix,"info-all-slaves-query","","select id,name,master,last_check,type from domains where type='SLAVE'");
     declare(suffix,"supermaster-query","", "select account from supermasters where ip='%s' and nameserver='%s'");
     declare(suffix,"supermaster-name-to-ips", "", "select ip from supermasters where nameserver='%s'");
-    declare(suffix,"supermaster-ip-to-name", "", "select nameserver from supermasters where ip='%s'");
     declare(suffix,"insert-zone-query","", "insert into domains (id, type, name) values(domain_id_sequence.nextval, 'NATIVE','%s')");
     declare(suffix,"insert-slave-query","", "insert into domains (id, type,name,master,account) values(domain_id_sequence.nextval, 'SLAVE','%s','%s','%s')");
 
index 80910c3d8c4006e7728cad38b960acae5ffeedd4..0619b643100bfd8cdc398a9eb07c0ce2a88cd1b3 100644 (file)
@@ -84,7 +84,6 @@ public:
     declare(suffix,"info-all-slaves-query","","select id,name,master,last_check,type from domains where type='SLAVE'");
     declare(suffix,"supermaster-query","", "select account from supermasters where ip='%s' and nameserver=E'%s'");
     declare(suffix,"supermaster-name-to-ips", "", "select ip from supermasters where nameserver=E'%s'");
-    declare(suffix,"supermaster-ip-to-name", "", "select nameserver from supermasters where ip='%s'");
     declare(suffix,"insert-zone-query","", "insert into domains (type,name) values('NATIVE',E'%s')");
     declare(suffix,"insert-slave-query","", "insert into domains (type,name,master,account) values('SLAVE',E'%s',E'%s',E'%s')");
 
index bba42491a7163ac2e1a8f8d68ff99eb4f58d913a..3f51a90ea3e07509f190eb9921c0e8884273a4e1 100644 (file)
@@ -105,8 +105,7 @@ public:
 
     declare( suffix, "info-all-slaves-query", "","select id,name,master,last_check,type from domains where type='SLAVE'");
     declare( suffix, "supermaster-query", "", "select account from supermasters where ip='%s' and nameserver='%s'");
-    declare( suffix,"supermaster-name-to-ips", "", "select ip from supermasters where nameserver='%s'");
-    declare( suffix,"supermaster-ip-to-name", "", "select nameserver from supermasters where ip='%s'");
+    declare( suffix, "supermaster-name-to-ips", "", "select ip from supermasters where nameserver='%s'");
     declare( suffix, "insert-zone-query", "", "insert into domains (type,name) values('NATIVE','%s')");
     declare( suffix, "insert-slave-query", "", "insert into domains (type,name,master,account) values('SLAVE','%s','%s','%s')");
 
index f9eb31c4fd28217f8ef33141c4b5ad8175d2404f..0e8654d55eb36b036ff0a442fa5fcd28cb4dff27 100644 (file)
@@ -61,8 +61,8 @@ public:
 
 //  SUPERMASTER BACKEND
 
-    bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db);
-    bool createSlaveDomain(const string &ip, const string &domain, const string &account);
+    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);
 
 
 //  DNSSEC BACKEND
index fa6cc0d45626e2c9c86bf663906487ecfc396372..0421e10d10de7709ca99629e5439ec1c387e3075 100644 (file)
 
 /* 
  //! determine if ip is a supermaster or a domain
-  virtual bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db)
+  virtual bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db)
 
   //! called by PowerDNS to create a slave record for a superMaster
-  virtual bool createSlaveDomain(const string &ip, const string &domain, const string &account)
+  virtual bool createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account)
 
 */
 
-bool LUABackend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db) {
+bool LUABackend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db) {
        
     if (f_lua_supermasterbackend == 0)
         return false;
@@ -96,7 +96,7 @@ bool LUABackend::superMasterBackend(const string &ip, const string &domain, cons
     return ok;
 }
 
-bool LUABackend::createSlaveDomain(const string &ip, const string &domain, const string &account) {
+bool LUABackend::createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account) {
        
     if (f_lua_createslavedomain == 0)
         return false;
index bf354927d4b2d758634c1b37e5b490618581e19b..2a3764314cb832d8e06f0b54816c6f4884d4e7db 100644 (file)
@@ -560,7 +560,7 @@ void OdbxBackend::getUpdatedMasters( vector<DomainInfo>* updated )
 
 
 
-bool OdbxBackend::superMasterBackend( const string& ip, const string& domain, const vector<DNSResourceRecord>& set, string* account, DNSBackend** ddb )
+bool OdbxBackend::superMasterBackend( const string& ip, const string& domain, const vector<DNSResourceRecord>& set, string *nameserver, string* account, DNSBackend** ddb )
 {
         try
         {
@@ -604,7 +604,7 @@ bool OdbxBackend::superMasterBackend( const string& ip, const string& domain, co
 
 
 
-bool OdbxBackend::createSlaveDomain( const string& ip, const string& domain, const string& account )
+bool OdbxBackend::createSlaveDomain( const string& ip, const string& domain, const string &nameserver, const string& account )
 {
         try
         {
index a4b3649f62cd2db9338fe2fec50e19f040b2f84e..bc9a29aa2f8e28031217ce302c219cddddf96db3 100644 (file)
@@ -87,8 +87,8 @@ public:
         bool isMaster( const string& domain, const string& ip );
         bool getDomainInfo( const string& domain, DomainInfo& di );
         bool feedRecord( const DNSResourceRecord& rr, string *ordername=0 );
-        bool createSlaveDomain( const string& ip, const string& domain, const string& account );
-        bool superMasterBackend( const string& ip, const string& domain, const vector<DNSResourceRecord>& nsset, string* account, DNSBackend** ddb );
+        bool createSlaveDomain( const string& ip, const string& domain, const string &nameserver, const string& account );
+        bool superMasterBackend( const string& ip, const string& domain, const vector<DNSResourceRecord>& nsset, string *nameserver, string* account, DNSBackend** ddb );
 
         void getUpdatedMasters( vector<DomainInfo>* updated );
         void getUnfreshSlaveInfos( vector<DomainInfo>* unfresh );
index bf6dbd41ce3aa7f4cf7491dc4065b27e9f8d47b8..9dc732ac7750e9dd5f074789072547e97bc0c071 100644 (file)
@@ -1143,7 +1143,8 @@ OracleBackend::abortTransaction ()
 bool
 OracleBackend::superMasterBackend (const string &ip, const string &domain,
                                    const vector<DNSResourceRecord> &nsset,
-                                   string *account, DNSBackend **backend)
+                                   string *nameserver, string *account,
+                                   DNSBackend **backend)
 {
   sword rc;
   OCIStmt *stmt;
@@ -1186,7 +1187,7 @@ OracleBackend::superMasterBackend (const string &ip, const string &domain,
 
 bool
 OracleBackend::createSlaveDomain(const string &ip, const string &domain,
-                                 const string &account)
+                                 const string &nameserver, const string &account)
 {
   sword rc;
   OCIStmt *insertSlaveQueryHandle;
index 95aa90811c7fa370fe7a093378d7563ff77ac9f4..8d442dbdc3d1ebadd96d1feeba107369d7c01e98 100644 (file)
@@ -74,9 +74,10 @@ public:
   bool abortTransaction();
   bool superMasterBackend(const string &ip, const string &domain,
                           const vector<DNSResourceRecord> &nsset,
-                          string *account, DNSBackend **backend);
+                          string *account, string *nameserver,
+                          DNSBackend **backend);
   bool createSlaveDomain(const string &ip, const string &domain,
-                         const string &account);
+                         const string &nameserver, const string &account);
 
   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);
index a443b729bf872fa4990b6568a28db9b71bf1c628..e3243fc976b2274a82e1f63fe69154906ea14c24 100644 (file)
@@ -614,7 +614,7 @@ void RemoteBackend::setNotified(uint32_t id, uint32_t serial) {
    }
 }
 
-bool RemoteBackend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **ddb) 
+bool RemoteBackend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **ddb) 
 {
    rapidjson::Document query,answer;
    rapidjson::Value parameters;
@@ -657,7 +657,7 @@ bool RemoteBackend::superMasterBackend(const string &ip, const string &domain, c
    return true;
 }
 
-bool RemoteBackend::createSlaveDomain(const string &ip, const string &domain, const string &account) {
+bool RemoteBackend::createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account) {
    rapidjson::Document query,answer;
    rapidjson::Value parameters;
    query.SetObject();
index 568b94f9121f3878c0d4fc0d5f7d56587c6cb764..b2ed5209837a1d459dcb3b2a40f45838697ede64 100644 (file)
@@ -144,8 +144,8 @@ class RemoteBackend : public DNSBackend
   virtual bool getDomainInfo(const string&, DomainInfo&);
   virtual void setNotified(uint32_t id, uint32_t serial);
   virtual bool doesDNSSEC();
-  virtual bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **ddb);
-  virtual bool createSlaveDomain(const string &ip, const string &domain, const string &account);
+  virtual bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **ddb);
+  virtual bool createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account);
   virtual bool replaceRRSet(uint32_t domain_id, const string& qname, const QType& qt, const vector<DNSResourceRecord>& rrset);
   virtual bool feedRecord(const DNSResourceRecord &r, string *ordername);
   virtual bool feedEnts(int domain_id, set<string>& nonterm);
index f06f193e611790a5620d06979c842c9f095300f7..72cf1010cd5fa4581f502ebcbf02ddf1577d47fd 100644 (file)
@@ -199,7 +199,7 @@ BOOST_AUTO_TEST_CASE(test_method_superMasterBackend) {
    rr.content = "ns2.example.com";
    nsset.push_back(rr);
 
-   BOOST_CHECK(be->superMasterBackend("10.0.0.1", "example.com", nsset, NULL, &dbd));
+   BOOST_CHECK(be->superMasterBackend("10.0.0.1", "example.com", nsset, NULL, NULL, &dbd));
 
    // let's see what we got
    BOOST_CHECK_EQUAL(dbd, be);
@@ -207,7 +207,7 @@ BOOST_AUTO_TEST_CASE(test_method_superMasterBackend) {
 
 BOOST_AUTO_TEST_CASE(test_method_createSlaveDomain) {
    BOOST_TEST_MESSAGE("Testing createSlaveDomain method");
-   BOOST_CHECK(be->createSlaveDomain("10.0.0.1", "pirate.unit.test", ""));
+   BOOST_CHECK(be->createSlaveDomain("10.0.0.1", "pirate.unit.test", "", ""));
 }
 
 BOOST_AUTO_TEST_CASE(test_method_feedRecord) {
index fc795f8b57d8f1496cb623b3b5ceee8cf89639ae..ecd3203c592002bfcbaac5a131edeeaf6db0e61d 100644 (file)
@@ -290,7 +290,6 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix)
   d_InfoOfDomainsZoneQuery=getArg("info-zone-query");
   d_InfoOfAllSlaveDomainsQuery=getArg("info-all-slaves-query");
   d_SuperMasterInfoQuery=getArg("supermaster-query");
-  d_GetSuperMasterName=getArg("supermaster-ip-to-name");
   d_GetSuperMasterIPs=getArg("supermaster-name-to-ips");
   d_InsertZoneQuery=getArg("insert-zone-query");
   d_InsertSlaveZoneQuery=getArg("insert-slave-query");
@@ -874,7 +873,7 @@ bool GSQLBackend::listSubZone(const string &zone, int domain_id) {
 
 
 
-bool GSQLBackend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **ddb)
+bool GSQLBackend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **ddb)
 {
   string format;
   char output[1024];
@@ -890,6 +889,7 @@ bool GSQLBackend::superMasterBackend(const string &ip, const string &domain, con
     }
 
     if(!d_result.empty()) {
+      *nameserver=i->content;
       *account=d_result[0][0];
       *ddb=this;
       return true;
@@ -910,23 +910,18 @@ bool GSQLBackend::createDomain(const string &domain)
   return true;
 }
 
-bool GSQLBackend::createSlaveDomain(const string &ip, const string &domain, const string &account)
+bool GSQLBackend::createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account)
 {
   string format;
   string name;
-  string masters=ip;
+  string masters(ip);
 
   char output[1024];
   try {
-    // figure out if there is a supermaster record for the IP address
-    format = d_GetSuperMasterName;
-    snprintf(output,sizeof(output)-1,format.c_str(),sqlEscape(ip).c_str()); 
-    d_db->doQuery(output, d_result);
-    if (!d_result.empty()) {
-      // there is, now figure out all IP addresses for the master
-      name = d_result[0][0];
+    if (!nameserver.empty()) {
+      // figure out all IP addresses for the master
       format = d_GetSuperMasterIPs;
-      snprintf(output,sizeof(output)-1,format.c_str(),sqlEscape(name).c_str()); 
+      snprintf(output,sizeof(output)-1,format.c_str(),sqlEscape(nameserver).c_str()); 
       d_db->doQuery(output, d_result);
       if (!d_result.empty()) {
         // collect all IP addresses
@@ -935,9 +930,9 @@ bool GSQLBackend::createSlaveDomain(const string &ip, const string &domain, cons
           tmp.push_back(row[0]);
         }
         // set them as domain's masters, comma separated
-        masters = boost::join(tmp, ",");
+        masters = boost::join(tmp, ", ");
       }
-    } 
+    }
     format = d_InsertSlaveZoneQuery;
     snprintf(output,sizeof(output)-1,format.c_str(),sqlEscape(domain).c_str(),sqlEscape(masters).c_str(),sqlEscape(account).c_str());
     d_db->doCommand(output);
index 94dcde2ee28bd689550ce60b00288e94ccf30638..21f0caa66e3ac505c1fa3fd6b9fe86004f6095f5 100644 (file)
@@ -36,9 +36,9 @@ public:
   bool feedEnts(int domain_id, set<string>& nonterm);
   bool feedEnts3(int domain_id, const string &domain, set<string> &nonterm, unsigned int times, const string &salt, bool narrow);
   bool createDomain(const string &domain);
-  bool createSlaveDomain(const string &ip, const string &domain, const string &account);
+  bool createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account);
   bool deleteDomain(const string &domain);
-  bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db);
+  bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db);
   void setFresh(uint32_t domain_id);
   void getUnfreshSlaveInfos(vector<DomainInfo> *domains);
   void getUpdatedMasters(vector<DomainInfo> *updatedDomains);
index 0f9fea4aa6025e9d46893d83340e2ead1b9f2cfb..906ce81cb3cc8a0aa2f1dab23416d4d05b0f04e6 100644 (file)
@@ -296,7 +296,7 @@ public:
   void setArgPrefix(const string &prefix);
 
   //! determine if ip is a supermaster or a domain
-  virtual bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db)
+  virtual bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db)
   {
     return false;
   }
@@ -308,7 +308,7 @@ public:
   }
 
   //! called by PowerDNS to create a slave record for a superMaster
-  virtual bool createSlaveDomain(const string &ip, const string &domain, const string &account)
+  virtual bool createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account)
   {
     return false;
   }
index 5efff7aed10dedd9184654d3ef155c69b9ed7eb1..fb7926b567404db267e1c52fd8a129cea8cfdabd 100644 (file)
@@ -786,9 +786,9 @@ int PacketHandler::trySuperMasterSynchronous(DNSPacket *p)
     }
   }
 
-  string account;
+  string nameserver, account;
   DNSBackend *db;
-  if(!B.superMasterBackend(p->getRemote(), p->qdomain, nsset, &account, &db)) {
+  if(!B.superMasterBackend(p->getRemote(), p->qdomain, nsset, &nameserver, &account, &db)) {
     L<<Logger::Error<<"Unable to find backend willing to host "<<p->qdomain<<" for potential supermaster "<<p->getRemote()<<". "<<nsset.size()<<" remote nameservers: "<<endl;
     BOOST_FOREACH(class DNSResourceRecord& rr, nsset) {
       L<<Logger::Error<<rr.content<<endl;
@@ -796,7 +796,7 @@ int PacketHandler::trySuperMasterSynchronous(DNSPacket *p)
     return RCode::Refused;
   }
   try {
-    db->createSlaveDomain(p->getRemote(),p->qdomain,account);
+    db->createSlaveDomain(p->getRemote(), p->qdomain, nameserver, account);
   }
   catch(PDNSException& ae) {
     L<<Logger::Error<<"Database error trying to create "<<p->qdomain<<" for potential supermaster "<<p->getRemote()<<": "<<ae.reason<<endl;
index fe0e5fadcbb2bee09dd6bb5f4cb1f81ad0f8efaa..eefb0f7541820ed35175ddb4d73adb290c6cbfba 100644 (file)
@@ -912,7 +912,7 @@ void testSchema(DNSSECKeeper& dk, const std::string& zone)
   cout<<"Picking first backend - if this is not what you want, edit launch line!"<<endl;
   DNSBackend *db = B.backends[0];
   cout<<"Creating slave domain "<<zone<<endl;
-  db->createSlaveDomain("127.0.0.1", zone, "_testschema");
+  db->createSlaveDomain("127.0.0.1", zone, "", "_testschema");
   cout<<"Slave domain created"<<endl;
 
   DomainInfo di;
index 01671204fb11898edfbed7ab76500c52619663ba..27d7a692f569a7d4c692a456206b646676154343 100644 (file)
@@ -297,13 +297,12 @@ bool UeberBackend::getSOA(const string &domain, SOAData &sd, DNSPacket *p)
   return false;
 }
 
-bool UeberBackend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db)
+bool UeberBackend::superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db)
 {
   for(vector<DNSBackend *>::const_iterator i=backends.begin();i!=backends.end();++i)
-    if((*i)->superMasterBackend(ip,domain,nsset,account, db))
+    if((*i)->superMasterBackend(ip, domain, nsset, nameserver, account, db))
       return true;
   return false;
-
 }
 
 void UeberBackend::setStatus(const string &st)
index 23d583663d8a253c0f952f4a1a9828e3255e6575..cf2fe237de70fe21d9d206ca275cc145ecfee03f 100644 (file)
@@ -59,7 +59,7 @@ public:
   ~UeberBackend();
   typedef DNSBackend *BackendMaker(); //!< typedef for functions returning pointers to new backends
 
-  bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *account, DNSBackend **db);
+  bool superMasterBackend(const string &ip, const string &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db);
 
   /** contains BackendReporter objects, which contain maker functions and information about
       weather a module has already been reported to existing instances of the UeberBackend