From: Bert Hubert Date: Tue, 25 Jan 2011 19:08:54 +0000 (+0000) Subject: teach backends not to delete a zone if a negative zone-id is passed to startTransacti... X-Git-Tag: auth-3.0~341 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=340a213ebca6810a096ad0c0f5ea9a859470c799;p=thirdparty%2Fpdns.git teach backends not to delete a zone if a negative zone-id is passed to startTransaction, but only to start a transaction in that case git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1906 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/modules/opendbxbackend/odbxbackend.cc b/modules/opendbxbackend/odbxbackend.cc index 136c91bbfd..378d8946be 100644 --- a/modules/opendbxbackend/odbxbackend.cc +++ b/modules/opendbxbackend/odbxbackend.cc @@ -715,9 +715,11 @@ bool OdbxBackend::startTransaction( const string& domain, int zoneid ) return false; } - string stmt = getArg( "sql-zonedelete" ); - stmtref = strbind( ":id", string( m_buffer, len ), stmt ); - if( !execStmt( stmtref.c_str(), stmtref.size(), WRITE ) ) { return false; } + if(zoneid >= 0) { + string stmt = getArg( "sql-zonedelete" ); + stmtref = strbind( ":id", string( m_buffer, len ), stmt ); + if( !execStmt( stmtref.c_str(), stmtref.size(), WRITE ) ) { return false; } + } } catch ( exception& e ) { diff --git a/modules/pdnsbackend/pdnsbackend.cc b/modules/pdnsbackend/pdnsbackend.cc index 4b9859feb5..2f7bd6c4e4 100644 --- a/modules/pdnsbackend/pdnsbackend.cc +++ b/modules/pdnsbackend/pdnsbackend.cc @@ -301,11 +301,13 @@ bool PdnsBackend::getDomainInfo(const string &domain, DomainInfo &di) bool PdnsBackend::startTransaction(const string &qname, int domain_id) { + ostringstream o; o << "delete from Records where ZoneId=" << domain_id; this->Execute("begin"); - this->Execute(o.str()); + if(domain_id >= 0) + this->Execute(o.str()); d_axfrcount = 0; diff --git a/pdns/backends/bind/bindbackend2.cc b/pdns/backends/bind/bindbackend2.cc index 8fd53a23fe..f3018f1c55 100644 --- a/pdns/backends/bind/bindbackend2.cc +++ b/pdns/backends/bind/bindbackend2.cc @@ -155,6 +155,11 @@ shared_ptr Bind2Backend::getState() bool Bind2Backend::startTransaction(const string &qname, int id) { + if(id < 0) { + d_transaction_tmpname.clear(); + d_transaction_id=id; + return true; + } shared_ptr state = getState(); const BB2DomainInfo &bbd=state->id_zone_map[d_transaction_id=id]; @@ -176,6 +181,8 @@ bool Bind2Backend::startTransaction(const string &qname, int id) bool Bind2Backend::commitTransaction() { + if(d_transaction_id < 0) + return true; delete d_of; d_of=0; shared_ptr state = getState(); @@ -193,7 +200,7 @@ bool Bind2Backend::commitTransaction() bool Bind2Backend::abortTransaction() { - if(d_transaction_id) { + if(d_transaction_id >= 0) { delete d_of; d_of=0; unlink(d_transaction_tmpname.c_str());