[svn] commit: r2231 - in /branches/trac232/src: bin/auth/auth.spec.pre.in bin/auth/auth_srv.cc bin/auth/auth_srv.h bin/auth/main.cc lib/datasrc/sqlite3_datasrc.cc lib/datasrc/sqlite3_datasrc.h

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Jun 23 07:26:24 UTC 2010


Author: jelte
Date: Wed Jun 23 07:26:23 2010
New Revision: 2231

Log:
api function for ixfr + manual test helper stuff

Modified:
    branches/trac232/src/bin/auth/auth.spec.pre.in
    branches/trac232/src/bin/auth/auth_srv.cc
    branches/trac232/src/bin/auth/auth_srv.h
    branches/trac232/src/bin/auth/main.cc
    branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
    branches/trac232/src/lib/datasrc/sqlite3_datasrc.h

Modified: branches/trac232/src/bin/auth/auth.spec.pre.in
==============================================================================
--- branches/trac232/src/bin/auth/auth.spec.pre.in (original)
+++ branches/trac232/src/bin/auth/auth.spec.pre.in Wed Jun 23 07:26:23 2010
@@ -102,6 +102,27 @@
             "item_default": ""
           },
         ]
+      },
+      {
+        "command_name": "ixfr",
+        "command_description": "see what IXFR would do",
+        "command_args": [
+          { "item_name": "zone_name",
+            "item_type": "string",
+            "item_optional": false,
+            "item_default": ""
+          },
+          { "item_name": "rr_class",
+            "item_type": "string",
+            "item_optional": false,
+            "item_default": ""
+          },
+          { "item_name": "response_file",
+            "item_type": "string",
+            "item_optional": false,
+            "item_default": ""
+          }
+        ]
       }
     ]
   }

Modified: branches/trac232/src/bin/auth/auth_srv.cc
==============================================================================
--- branches/trac232/src/bin/auth/auth_srv.cc (original)
+++ branches/trac232/src/bin/auth/auth_srv.cc Wed Jun 23 07:26:23 2010
@@ -505,6 +505,76 @@
     } catch (isc::Exception exc) {
         return isc::config::createAnswer(1, exc.what());
     }
-
-}
-
+}
+
+ElementPtr
+AuthSrv::ixfr(isc::data::ElementPtr args)
+{
+    try {
+        Name zone_name = Name(args->get("zone_name")->stringValue());
+        RRClass rrclass = RRClass(args->get("rr_class")->stringValue());
+        
+        // fake ixfr response from file
+        ifstream myfile(args->get("response_file")->stringValue().c_str());
+
+        Message m(Message::RENDER);
+        m.setHeaderFlag(MessageFlag::AA());
+        m.setHeaderFlag(MessageFlag::QR());
+        m.setQid(1234);
+        m.setOpcode(isc::dns::Opcode::QUERY());
+        m.setRcode(isc::dns::Rcode::NOERROR());
+        if (myfile.is_open()) {
+            while (! myfile.eof() ) {
+                //stringstream ss;
+                //ss << myfile;
+                //cout << "X:      " << ss.str() << endl;
+                string s;
+                myfile >> s;
+                Name n(s);
+                myfile >> s;
+                RRTTL ttl(s);
+                myfile >> s;
+                RRClass rrclass(s);
+                myfile >> s;
+                RRType rrtype(s);
+                string line;
+                getline(myfile, line);
+                while (line[0] == ' ' || line[0] == '\t') {
+                    line.erase(0, 1);
+                }
+                std::cout << "[XX] rdata: " << line << std::endl;
+                RdataPtr rdata = createRdata(rrtype, rrclass, line);
+                std::cout << "[XX] rdata read: " << line << std::endl;
+                RRsetPtr rrset = RRsetPtr(new RRset(n,
+                                          rrclass,
+                                          rrtype,
+                                          ttl));
+                rrset->addRdata(rdata);
+                m.addRRset(Section::ANSWER(), rrset, false);
+            }
+        }
+        std::cout << "[XX] read IXFR 'message' file" << std::endl;
+        std::cout << m << std::endl;
+        std::cout << "[XX] end of IXFR 'message'" << std::endl;
+        
+        NameMatch match(zone_name);
+        impl_->data_sources_.findClosestEnclosure(match, rrclass);
+        DataSrc* datasource = (DataSrc*) match.bestDataSrc();
+        if (datasource) {
+            DataSrcTransaction* transaction = datasource->startTransaction(zone_name);
+            DataSrc result = datasource->doIXFR(transaction, m.beginSection(Section::ANSWER());
+            if (result != DataSrc::SUCCESS) {
+                return isc::config::createAnswer(result, "Error in doIXFR");
+            } else {
+                return isc::config::createAnswer();
+            }
+        } else {
+            return isc::config::createAnswer(1, "No data store found for zone");
+        }
+    } catch (isc::Exception exc) {
+        return isc::config::createAnswer(1, exc.what());
+    }
+}
+
+
+

Modified: branches/trac232/src/bin/auth/auth_srv.h
==============================================================================
--- branches/trac232/src/bin/auth/auth_srv.h (original)
+++ branches/trac232/src/bin/auth/auth_srv.h Wed Jun 23 07:26:23 2010
@@ -62,6 +62,7 @@
     isc::data::ElementPtr addRR(isc::data::ElementPtr arg);
     isc::data::ElementPtr delRR(isc::data::ElementPtr arg);
     isc::data::ElementPtr loadZone(isc::data::ElementPtr arg);
+    isc::data::ElementPtr ixfr(isc::data::ElementPtr arg);
     // end temp add
 private:
     AuthSrvImpl* impl_;

Modified: branches/trac232/src/bin/auth/main.cc
==============================================================================
--- branches/trac232/src/bin/auth/main.cc (original)
+++ branches/trac232/src/bin/auth/main.cc Wed Jun 23 07:26:23 2010
@@ -83,6 +83,8 @@
         answer = auth_server->delRR(args);
     } else if (command == "load_zone") {
         answer = auth_server->loadZone(args);
+    } else if (command == "ixfr") {
+        answer = auth_server->ixfr(args);
     } else if (command == "shutdown") {
         io_service->stop();
     }

Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc Wed Jun 23 07:26:23 2010
@@ -1135,6 +1135,17 @@
     return result;
 }
 
-
-}
-}
+DataSrc::Result
+doIXFR(DataSrcTransaction* transaction,
+       const RRsetIterator start,
+       const RRsetIterator end)
+{
+    (void)transaction;
+    (void)start;
+    (void)end;
+    return DataSrc::SUCCESS;
+}
+
+
+}
+}

Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.h (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.h Wed Jun 23 07:26:23 2010
@@ -27,6 +27,7 @@
 #include <dns/rrttl.h>
 #include <dns/rdata.h>
 #include <dns/rrset.h>
+#include <dns/message.h>
 
 namespace isc {
 
@@ -121,6 +122,9 @@
     DataSrc::Result replaceZone(DataSrcTransaction* transaction,
                                 isc::dns::RRsetList& rrsets);
     DataSrc::Result delZone(DataSrcTransaction* transaction);
+    DataSrc::Result doIXFR(DataSrcTransaction* transaction,
+                           const isc::dns::RRsetIterator start,
+                           const isc::dns::RRsetIterator end);
 
 private:
     DataSrc::Result addRR(int zone_id,




More information about the bind10-changes mailing list