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,"dnssec","Assume DNSSEC Schema is in place","false");
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");
/*
PowerDNS Versatile Database Driven Nameserver
- Copyright (C) 2002-2007 PowerDNS.COM BV
+ Copyright (C) 2002-2010 PowerDNS.COM BV
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
void getUpdatedMasters(vector<DomainInfo> *changedDomains);
bool getDomainInfo(const string &domain, DomainInfo &di);
time_t getCtime(const string &fname);
- virtual bool getBeforeAndAfterNames(uint32_t id, const std::string qname, std::string& before, std::string& after);
+ virtual bool getBeforeAndAfterNames(uint32_t id, const std::string& qname, std::string& before, std::string& after);
void lookup(const QType &, const string &qdomain, DNSPacket *p=0, int zoneId=-1);
bool list(const string &target, int id);
bool get(DNSResourceRecord &);
{
char output[1024];
snprintf(output,sizeof(output)-1,
- d_UpdateSerialOfZoneQuery.c_str(),
- serial, domain_id);
+ d_UpdateSerialOfZoneQuery.c_str(),
+ serial, domain_id);
try {
d_db->doCommand(output);
{
char output[1024];
snprintf(output,sizeof(output)-1,d_UpdateLastCheckofZoneQuery.c_str(),
- time(0),
- domain_id);
+ time(0),
+ domain_id);
try {
d_db->doCommand(output);
{
char output[1024];
snprintf(output,sizeof(output)-1,
- d_MasterOfDomainsZoneQuery.c_str(),
- sqlEscape(domain).c_str());
+ d_MasterOfDomainsZoneQuery.c_str(),
+ sqlEscape(domain).c_str());
try {
d_db->doQuery(output, d_result);
}
id,name,master IP,serial */
char output[1024];
snprintf(output,sizeof(output)-1,d_InfoOfDomainsZoneQuery.c_str(),
- sqlEscape(domain).c_str());
+ sqlEscape(domain).c_str());
try {
d_db->doQuery(output,d_result);
}
try {
SOAData sd;
if(!getSOA(domain,sd))
- L<<Logger::Notice<<"No serial for '"<<domain<<"' found - zone is missing?"<<endl;
+ L<<Logger::Notice<<"No serial for '"<<domain<<"' found - zone is missing?"<<endl;
else
- di.serial=sd.serial;
+ di.serial=sd.serial;
}
catch(AhuException &ae){
L<<Logger::Error<<"Error retrieving serial for '"<<domain<<"': "<<ae.reason<<endl;
setArgPrefix(mode+suffix);
d_db=0;
d_logprefix="["+mode+"Backend"+suffix+"] ";
-
+
d_noWildCardNoIDQuery=getArg("basic-query");
d_noWildCardIDQuery=getArg("id-query");
d_wildCardNoIDQuery=getArg("wildcard-query");
d_CheckACLQuery=getArg("check-acl-query");
}
+bool GSQLBackend::getBeforeAndAfterNames(uint32_t id, const std::string& qname, std::string& before, std::string& after)
+{
+ cerr<<"gsql before/after called for id="<<id<<", qname="<<qname<<endl;
+ string lcqname=toLower(qname);
+
+ lcqname=labelReverse(lcqname);
+
+ SSql::row_t row;
+
+ d_db->doQuery("select min(ordername) from records where ordername > '"+sqlEscape(lcqname)+"' and auth=1");
+ while(d_db->getRow(row)) {
+ after=labelReverse(row[0]);
+ }
+
+ d_db->doQuery("select max(ordername) from records where ordername < '"+sqlEscape(lcqname)+"' and auth=1");
+ while(d_db->getRow(row)) {
+ before=labelReverse(row[0]);
+ }
+
+ return false;
+}
+
void GSQLBackend::lookup(const QType &qtype,const string &qname, DNSPacket *pkt_p, int domain_id)
{
string lcqname=toLower(qname);
+ // lcqname=labelReverse(makeRelative(lcqname, "net"));
+
if(qtype.getCode()!=QType::ANY) {
// qtype qname domain_id
if(domain_id<0) {
if(qname[0]=='%')
- format=d_wildCardNoIDQuery;
+ format=d_wildCardNoIDQuery;
else
- format=d_noWildCardNoIDQuery;
+ format=d_noWildCardNoIDQuery;
snprintf(output,sizeof(output)-1, format.c_str(),sqlEscape(qtype.getName()).c_str(), sqlEscape(lcqname).c_str());
}
else {
if(qname[0]!='%')
- format=d_noWildCardIDQuery;
+ format=d_noWildCardIDQuery;
else
- format=d_wildCardIDQuery;
+ format=d_wildCardIDQuery;
snprintf(output,sizeof(output)-1, format.c_str(),sqlEscape(qtype.getName()).c_str(),sqlEscape(lcqname).c_str(),domain_id);
}
}
// qname domain_id
if(domain_id<0) {
if(qname[0]=='%')
- format=d_wildCardANYNoIDQuery;
+ format=d_wildCardANYNoIDQuery;
else
- format=d_noWildCardANYNoIDQuery;
+ format=d_noWildCardANYNoIDQuery;
snprintf(output,sizeof(output)-1, format.c_str(),sqlEscape(lcqname).c_str());
}
else {
if(qname[0]!='%')
- format=d_noWildCardANYIDQuery;
+ format=d_noWildCardANYIDQuery;
else
- format=d_wildCardANYIDQuery;
+ format=d_wildCardANYIDQuery;
snprintf(output,sizeof(output)-1, format.c_str(),sqlEscape(lcqname).c_str(),domain_id);
}
}
{
char output[1024];
snprintf(output,sizeof(output)-1,d_InsertRecordQuery.c_str(),
- sqlEscape(r.content).c_str(),
- r.ttl, r.priority,
- sqlEscape(r.qtype.getName()).c_str(),
- r.domain_id, toLower(sqlEscape(r.qname)).c_str());
+ sqlEscape(r.content).c_str(),
+ r.ttl, r.priority,
+ sqlEscape(r.qtype.getName()).c_str(),
+ r.domain_id, toLower(sqlEscape(r.qname)).c_str());
try {
d_db->doCommand(output);
}