16 #include <boost/bind.hpp> 17 #include <boost/scoped_ptr.hpp> 33 using namespace boost;
46 const NameComparisonResult cmp_result =
47 rrset->getName().compare(*origin);
48 if (cmp_result.getRelation() != NameComparisonResult::EQUAL &&
49 cmp_result.getRelation() != NameComparisonResult::SUBDOMAIN) {
50 isc_throw(MasterLoadError,
"Out-of-zone data for " << *origin
51 <<
"/" << rrset->getClass() <<
": " << rrset->getName());
53 if (rrset->getType() == RRType::SOA() &&
54 cmp_result.getRelation() != NameComparisonResult::EQUAL) {
55 isc_throw(MasterLoadError,
"SOA not at top of zone: " 62 template <
typename InputType>
64 loadHelper(InputType input,
const Name& origin,
67 RRCollator rr_collator(boost::bind(callbackWrapper, _1,
69 MasterLoader loader(input, origin, zone_class,
70 MasterLoaderCallbacks::getNullCallbacks(),
71 rr_collator.getCallback());
74 }
catch (
const MasterLoaderError& ex) {
85 if ((filename == NULL) || (*filename ==
'\0')) {
89 loadHelper<const char*>(filename, origin, zone_class, callback);
96 loadHelper<istream&>(input, origin, zone_class, callback);
The Name class encapsulates DNS names.
boost::function< void(RRsetPtr)> MasterLoadCallback
The type of the callback parameter of masterLoad().
An exception that is thrown if an error occurs while loading a master zone data.
The RRClass class encapsulates DNS resource record classes.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
Defines the logger used by the top-level component of kea-dhcp-ddns.
void masterLoad(istream &input, const Name &origin, const RRClass &zone_class, MasterLoadCallback callback, const char *)
Master zone file loader from input stream.
boost::shared_ptr< AbstractRRset > RRsetPtr
A pointer-like type pointing to an RRset object.