[Pdns-dev] Patch to allow changing of default table names in config file

Grant Kaufmann grant at sandpit.org
Tue Oct 2 00:22:14 CEST 2007


In the depreciated MySQL backend, there was a configuration option 
"mysql-table" that would allow the setting of the name of the records 
table to a user-configurable value. When this was replaced with the 
Generic MySQL backend, it became possible to provide the full SQL code 
to be used for each database query, but there's no way to change just 
the table name.

In order to keep future management simple and avoid 19 long SQL lines in 
the pdns.conf file that may break future compatibility, I've written 
this patch to add the mysql-table-records, mysql-table-domains and 
mysql-table-supermasters options that will change the current tablenames 
of "records", "domains" and "supermasters".

This has been tested on FreeBSD 6.2 but it's standard C++ so should work 
everywhere. If anyone would like more info on what the code is doing, 
let me know.

--
Grant
-------------- next part --------------
diff -ru pdns-2.9.21-orig/pdns/backends/gsql/gsqlbackend.cc pdns-2.9.21/pdns/backends/gsql/gsqlbackend.cc
--- pdns-2.9.21-orig/pdns/backends/gsql/gsqlbackend.cc	Sat Apr 21 08:56:35 2007
+++ pdns-2.9.21/pdns/backends/gsql/gsqlbackend.cc	Mon Oct  1 13:39:35 2007
@@ -209,6 +209,21 @@
   return a;
 }
 
+void GSQLBackend::replaceString(string &s, string searchstr, string replacestr)  {
+  unsigned int found = s.find(searchstr);
+  if (found != string::npos)
+    s.replace(found, searchstr.length(), replacestr);
+  return;
+}
+
+string GSQLBackend::UpdateTableNames(const string &s)
+{
+  string ns = s;
+  replaceString(ns, "RECORDS", getArg("table-records"));
+  replaceString(ns, "DOMAINS", getArg("table-domains"));
+  replaceString(ns, "SUPERMASTERS", getArg("table-supermasters"));
+  return ns;
+}
 
 GSQLBackend::GSQLBackend(const string &mode, const string &suffix)
 {
@@ -216,28 +231,28 @@
   d_db=0;
   d_logprefix="["+mode+"Backend"+suffix+"] ";
 		  
-  d_noWildCardNoIDQuery=getArg("basic-query");
-  d_noWildCardIDQuery=getArg("id-query");
-  d_wildCardNoIDQuery=getArg("wildcard-query");
-  d_wildCardIDQuery=getArg("wildcard-id-query");
+  d_noWildCardNoIDQuery=UpdateTableNames(getArg("basic-query"));
+  d_noWildCardIDQuery=UpdateTableNames(getArg("id-query"));
+  d_wildCardNoIDQuery=UpdateTableNames(getArg("wildcard-query"));
+  d_wildCardIDQuery=UpdateTableNames(getArg("wildcard-id-query"));
 
-  d_noWildCardANYNoIDQuery=getArg("any-query");
-  d_noWildCardANYIDQuery=getArg("any-id-query");
-  d_wildCardANYNoIDQuery=getArg("wildcard-any-query");
-  d_wildCardANYIDQuery=getArg("wildcard-any-id-query");
+  d_noWildCardANYNoIDQuery=UpdateTableNames(getArg("any-query"));
+  d_noWildCardANYIDQuery=UpdateTableNames(getArg("any-id-query"));
+  d_wildCardANYNoIDQuery=UpdateTableNames(getArg("wildcard-any-query"));
+  d_wildCardANYIDQuery=UpdateTableNames(getArg("wildcard-any-id-query"));
   
-  d_listQuery=getArg("list-query");
+  d_listQuery=UpdateTableNames(getArg("list-query"));
 
-  d_MasterOfDomainsZoneQuery=getArg("master-zone-query");
-  d_InfoOfDomainsZoneQuery=getArg("info-zone-query");
-  d_InfoOfAllSlaveDomainsQuery=getArg("info-all-slaves-query");
-  d_SuperMasterInfoQuery=getArg("supermaster-query");
-  d_InsertSlaveZoneQuery=getArg("insert-slave-query");
-  d_InsertRecordQuery=getArg("insert-record-query");
-  d_UpdateSerialOfZoneQuery=getArg("update-serial-query");
-  d_UpdateLastCheckofZoneQuery=getArg("update-lastcheck-query");
-  d_InfoOfAllMasterDomainsQuery=getArg("info-all-master-query");
-  d_DeleteZoneQuery=getArg("delete-zone-query");
+  d_MasterOfDomainsZoneQuery=UpdateTableNames(getArg("master-zone-query"));
+  d_InfoOfDomainsZoneQuery=UpdateTableNames(getArg("info-zone-query"));
+  d_InfoOfAllSlaveDomainsQuery=UpdateTableNames(getArg("info-all-slaves-query"));
+  d_SuperMasterInfoQuery=UpdateTableNames(getArg("supermaster-query"));
+  d_InsertSlaveZoneQuery=UpdateTableNames(getArg("insert-slave-query"));
+  d_InsertRecordQuery=UpdateTableNames(getArg("insert-record-query"));
+  d_UpdateSerialOfZoneQuery=UpdateTableNames(getArg("update-serial-query"));
+  d_UpdateLastCheckofZoneQuery=UpdateTableNames(getArg("update-lastcheck-query"));
+  d_InfoOfAllMasterDomainsQuery=UpdateTableNames(getArg("info-all-master-query"));
+  d_DeleteZoneQuery=UpdateTableNames(getArg("delete-zone-query"));
 }
 
 
diff -ru pdns-2.9.21-orig/pdns/backends/gsql/gsqlbackend.hh pdns-2.9.21/pdns/backends/gsql/gsqlbackend.hh
--- pdns-2.9.21-orig/pdns/backends/gsql/gsqlbackend.hh	Sat Apr 21 08:56:35 2007
+++ pdns-2.9.21/pdns/backends/gsql/gsqlbackend.hh	Mon Oct  1 13:38:21 2007
@@ -66,5 +66,7 @@
   string d_UpdateLastCheckofZoneQuery;
   string d_InfoOfAllMasterDomainsQuery;
   string d_DeleteZoneQuery;		
+  void replaceString(string &s, string searchstr, string replacestr);
+  string UpdateTableNames(const string &s);
 
 };

diff -ru pdns-2.9.21-orig/modules/gmysqlbackend/gmysqlbackend.cc pdns-2.9.21/modules/gmysqlbackend/gmysqlbackend.cc
--- pdns-2.9.21-orig/modules/gmysqlbackend/gmysqlbackend.cc	Sat Apr 21 08:56:36 2007
+++ pdns-2.9.21/modules/gmysqlbackend/gmysqlbackend.cc	Mon Oct  1 13:37:30 2007
@@ -50,30 +50,34 @@
     declare(suffix,"port","Database backend port to connect to","0");
     declare(suffix,"socket","Pdns backend socket to connect to","");
     declare(suffix,"password","Pdns backend password to connect with","");
+    declare(suffix,"table-records","Name of table that stores records","records");
+    declare(suffix,"table-domains","Name of table that stores domains","domains");
+    declare(suffix,"table-supermasters","Name of table that stores supermasters","supermasters");
 
-    declare(suffix,"basic-query","Basic query","select content,ttl,prio,type,domain_id,name from records where type='%s' and name='%s'");
-    declare(suffix,"id-query","Basic with ID query","select content,ttl,prio,type,domain_id,name from records where type='%s' and name='%s' and domain_id=%d");
-    declare(suffix,"wildcard-query","Wildcard query","select content,ttl,prio,type,domain_id,name from records where type='%s' and name like '%s'");
-    declare(suffix,"wildcard-id-query","Wildcard with ID query","select content,ttl,prio,type,domain_id,name from records where type='%s' and name like '%s' and domain_id='%d'");
-
-    declare(suffix,"any-query","Any query","select content,ttl,prio,type,domain_id,name from records where name='%s'");
-    declare(suffix,"any-id-query","Any with ID query","select content,ttl,prio,type,domain_id,name from records where name='%s' and domain_id=%d");
-    declare(suffix,"wildcard-any-query","Wildcard ANY query","select content,ttl,prio,type,domain_id,name from records where name like '%s'");
-    declare(suffix,"wildcard-any-id-query","Wildcard ANY with ID query","select content,ttl,prio,type,domain_id,name from records where name like '%s' and domain_id='%d'");
-
-    declare(suffix,"list-query","AXFR query", "select content,ttl,prio,type,domain_id,name from records where domain_id='%d'");
-    declare(suffix,"master-zone-query","Data", "select master from domains where name='%s' and type='SLAVE'");
-
-    declare(suffix,"info-zone-query","","select id,name,master,last_check,notified_serial,type from domains where name='%s'");
-
-    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,"insert-slave-query","", "insert into domains (type,name,master,account) values('SLAVE','%s','%s','%s')");
-    declare(suffix,"insert-record-query","", "insert into records (content,ttl,prio,type,domain_id,name) values ('%s',%d,%d,'%s',%d,'%s')");
-    declare(suffix,"update-serial-query","", "update domains set notified_serial=%d where id=%d");
-    declare(suffix,"update-lastcheck-query","", "update domains set last_check=%d where id=%d");
-    declare(suffix,"info-all-master-query","", "select id,name,master,last_check,notified_serial,type from domains where type='MASTER'");
-    declare(suffix,"delete-zone-query","", "delete from records where domain_id=%d");
+
+    declare(suffix,"basic-query","Basic query","select content,ttl,prio,type,domain_id,name from RECORDS where type='%s' and name='%s'");
+    declare(suffix,"id-query","Basic with ID query","select content,ttl,prio,type,domain_id,name from RECORDS where type='%s' and name='%s' and domain_id=%d");
+    declare(suffix,"wildcard-query","Wildcard query","select content,ttl,prio,type,domain_id,name from RECORDS where type='%s' and name like '%s'");
+    declare(suffix,"wildcard-id-query","Wildcard with ID query","select content,ttl,prio,type,domain_id,name from RECORDS where type='%s' and name like '%s' and domain_id='%d'");
+
+    declare(suffix,"any-query","Any query","select content,ttl,prio,type,domain_id,name from RECORDS where name='%s'");
+    declare(suffix,"any-id-query","Any with ID query","select content,ttl,prio,type,domain_id,name from RECORDS where name='%s' and domain_id=%d");
+    declare(suffix,"wildcard-any-query","Wildcard ANY query","select content,ttl,prio,type,domain_id,name from RECORDS where name like '%s'");
+    declare(suffix,"wildcard-any-id-query","Wildcard ANY with ID query","select content,ttl,prio,type,domain_id,name from RECORDS where name like '%s' and domain_id='%d'");
+
+    declare(suffix,"list-query","AXFR query", "select content,ttl,prio,type,domain_id,name from RECORDS where domain_id='%d'");
+    declare(suffix,"master-zone-query","Data", "select master from DOMAINS where name='%s' and type='SLAVE'");
+
+    declare(suffix,"info-zone-query","","select id,name,master,last_check,notified_serial,type from DOMAINS where name='%s'");
+
+    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,"insert-slave-query","", "insert into DOMAINS (type,name,master,account) values('SLAVE','%s','%s','%s')");
+    declare(suffix,"insert-record-query","", "insert into RECORDS (content,ttl,prio,type,domain_id,name) values ('%s',%d,%d,'%s',%d,'%s')");
+    declare(suffix,"update-serial-query","", "update DOMAINS set notified_serial=%d where id=%d");
+    declare(suffix,"update-lastcheck-query","", "update DOMAINS set last_check=%d where id=%d");
+    declare(suffix,"info-all-master-query","", "select id,name,master,last_check,notified_serial,type from DOMAINS where type='MASTER'");
+    declare(suffix,"delete-zone-query","", "delete from RECORDS where domain_id=%d");
 
 
   }



More information about the Pdns-dev mailing list