From: Michal 'vorner' Vaner Date: Sat, 17 Nov 2012 12:56:06 +0000 (+0100) Subject: [2376] Implement the createCallbacks function X-Git-Tag: bind10-1.0.0-beta-release~84^2~4^2~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=94b80d73b69ecbd781d449798a8e993bcd2f098a;p=thirdparty%2Fkea.git [2376] Implement the createCallbacks function --- diff --git a/src/lib/datasrc/datasrc_messages.mes b/src/lib/datasrc/datasrc_messages.mes index 94b4d4249e..cf086bfec9 100644 --- a/src/lib/datasrc/datasrc_messages.mes +++ b/src/lib/datasrc/datasrc_messages.mes @@ -305,6 +305,18 @@ Therefore, the zone will not be available for this process. If this is a problem, you should move the zone to some database backend (sqlite3, for example) and use it from there. +% DATASRC_LOAD_CONTEXT_ERROR %1:%2: Zone '%3/%4' contains error: %5 +There's an error in the given master file. The zone won't be loaded for +this reason. Parsing might follow, so you might get further errors and +warnings to fix everything at once. But in case the error is serious enough, +the parser might just give up or get confused and generate false errors +afterwards. + +% DATASRC_LOAD_CONTEXT_WARN %1:%2: Zone '%3/%4' has a potential problem: %5 +There's something suspicious in the master file. This is a warning only. +It may be a problem or it may be harmless, but it should be checked. +This problem does not stop the zone from being loaded. + % DATASRC_MASTERLOAD_ERROR %1 An error was found in the zone data for a MasterFiles zone. The zone is not loaded. The specific error is shown in the message, and should diff --git a/src/lib/datasrc/loader_callbacks.cc b/src/lib/datasrc/loader_callbacks.cc index abf02e8bf8..856efdf14f 100644 --- a/src/lib/datasrc/loader_callbacks.cc +++ b/src/lib/datasrc/loader_callbacks.cc @@ -13,10 +13,60 @@ // PERFORMANCE OF THIS SOFTWARE. #include +#include +#include + +#include +#include +#include + +#include +#include namespace isc { namespace datasrc { +namespace { + +void +logError(const dns::Name& name, const dns::RRClass& rrclass, bool* ok, + const std::string& source, size_t line, const std::string& reason) +{ + LOG_ERROR(logger, DATASRC_LOAD_CONTEXT_ERROR).arg(source).arg(line). + arg(name).arg(rrclass).arg(reason); + if (ok != NULL) { + *ok = false; + } +} + +void +logWarning(const dns::Name& name, const dns::RRClass& rrclass, + const std::string& source, size_t line, const std::string& reason) +{ + LOG_WARN(logger, DATASRC_LOAD_CONTEXT_WARN).arg(source).arg(line). + arg(name).arg(rrclass).arg(reason); +} + +} + +isc::dns::LoaderCallbacks +createCallbacks(ZoneUpdater& updater, const dns::Name& name, + const dns::RRClass& rrclass, bool* ok) +{ + return (isc::dns::LoaderCallbacks(boost::bind(&logError, name, rrclass, ok, + _1, _2, _3), + boost::bind(&logWarning, name, rrclass, + _1, _2, _3), + boost::bind(&ZoneUpdater::addRRset, + &updater, + // The callback provides a + // shared pointer, we need + // the object. This bind + // unpacks the object. + boost::bind(&dns::RRsetPtr:: + operator*, + _1)))); +} } }