isc_timer_t *max_time_timer;
isc_timer_t *max_idle_timer;
+
+ char info[DNS_NAME_MAXTEXT + 32];
};
#define XFRIN_MAGIC ISC_MAGIC('X', 'f', 'r', 'I')
static isc_result_t
render(dns_message_t *msg, isc_mem_t *mctx, isc_buffer_t *buf);
-static void
-xfrin_logv(dns_xfrin_t *xff, int level, const char *zonetext,
- const isc_sockaddr_t *primaryaddr, const char *fmt, va_list ap)
- ISC_FORMAT_PRINTF(5, 0);
-
static void
xfrin_log(dns_xfrin_t *xfr, int level, const char *fmt, ...)
ISC_FORMAT_PRINTF(3, 4);
axfr_finalize(dns_xfrin_t *xfr) {
isc_result_t result;
- LIBDNS_XFRIN_AXFR_FINALIZE_BEGIN(xfr);
+ LIBDNS_XFRIN_AXFR_FINALIZE_BEGIN(xfr, xfr->info);
result = dns_zone_replacedb(xfr->zone, xfr->db, true);
- LIBDNS_XFRIN_AXFR_FINALIZE_END(xfr, result);
+ LIBDNS_XFRIN_AXFR_FINALIZE_END(xfr, xfr->info, result);
return (result);
}
isc_timer_create(dns_zone_getloop(zone), xfrin_idledout, xfr,
&xfr->max_idle_timer);
+ dns_zone_name(xfr->zone, xfr->info, sizeof(xfr->info));
+
*xfrp = xfr;
}
CHECK(result);
}
- LIBDNS_XFRIN_START(xfr);
+ LIBDNS_XFRIN_START(xfr, xfr->info);
/* Set the maximum timer */
isc_interval_set(&interval, dns_zone_getmaxxfrin(xfr->zone), 0);
result = ISC_R_SHUTTINGDOWN;
}
- LIBDNS_XFRIN_CONNECTED(xfr, result);
+ LIBDNS_XFRIN_CONNECTED(xfr, xfr->info, result);
if (result != ISC_R_SUCCESS) {
xfrin_fail(xfr, result, "failed to connect");
dns_dbversion_t *ver = NULL;
dns_name_t *msgsoaname = NULL;
- LIBDNS_XFRIN_RECV_SEND_REQUEST(xfr);
+ LIBDNS_XFRIN_RECV_SEND_REQUEST(xfr, xfr->info);
/* Create the request message */
dns_message_create(xfr->mctx, DNS_MESSAGE_INTENTRENDER, &msg);
result = ISC_R_SHUTTINGDOWN;
}
- LIBDNS_XFRIN_SENT(xfr, result);
+ LIBDNS_XFRIN_SENT(xfr, xfr->info, result);
CHECK(result);
/* Stop the idle timer */
isc_timer_stop(xfr->max_idle_timer);
- LIBDNS_XFRIN_RECV_START(xfr, result);
+ LIBDNS_XFRIN_RECV_START(xfr, xfr->info, result);
CHECK(result);
isc_result_totext(result));
}
- LIBDNS_XFRIN_RECV_PARSED(xfr, result);
+ LIBDNS_XFRIN_RECV_PARSED(xfr, xfr->info, result);
if (result != ISC_R_SUCCESS || msg->rcode != dns_rcode_noerror ||
msg->opcode != dns_opcode_query || msg->rdclass != xfr->rdclass)
xfrin_log(xfr, ISC_LOG_DEBUG(3), "got %s, retrying with AXFR",
isc_result_totext(result));
try_axfr:
- LIBDNS_XFRIN_RECV_TRY_AXFR(xfr, result);
+ LIBDNS_XFRIN_RECV_TRY_AXFR(xfr, xfr->info, result);
dns_message_detach(&msg);
xfrin_reset(xfr);
xfr->reqtype = dns_rdatatype_soa;
{
dns_rdataset_t *rds = NULL;
- LIBDNS_XFRIN_RECV_QUESTION(xfr, msg);
+ LIBDNS_XFRIN_RECV_QUESTION(xfr, xfr->info, msg);
name = NULL;
dns_message_currentname(msg, DNS_SECTION_QUESTION, &name);
{
dns_rdataset_t *rds = NULL;
- LIBDNS_XFRIN_RECV_ANSWER(xfr, msg);
+ LIBDNS_XFRIN_RECV_ANSWER(xfr, xfr->info, msg);
name = NULL;
dns_message_currentname(msg, DNS_SECTION_ANSWER, &name);
* Close the journal.
*/
if (xfr->ixfr.journal != NULL) {
- LIBDNS_XFRIN_JOURNAL_DESTROY_BEGIN(xfr, result);
+ LIBDNS_XFRIN_JOURNAL_DESTROY_BEGIN(xfr, xfr->info,
+ result);
dns_journal_destroy(&xfr->ixfr.journal);
- LIBDNS_XFRIN_JOURNAL_DESTROY_END(xfr, result);
+ LIBDNS_XFRIN_JOURNAL_DESTROY_END(xfr, xfr->info,
+ result);
}
/*
* Inform the caller we succeeded.
*/
if (xfr->done != NULL) {
- LIBDNS_XFRIN_DONE_CALLBACK_BEGIN(xfr, result);
+ LIBDNS_XFRIN_DONE_CALLBACK_BEGIN(xfr, xfr->info,
+ result);
(xfr->done)(xfr->zone, ISC_R_SUCCESS);
xfr->done = NULL;
- LIBDNS_XFRIN_DONE_CALLBACK_END(xfr, result);
+ LIBDNS_XFRIN_DONE_CALLBACK_END(xfr, xfr->info, result);
}
atomic_store(&xfr->shuttingdown, true);
isc_timer_start(xfr->max_idle_timer, isc_timertype_once,
&interval);
- LIBDNS_XFRIN_READ(xfr, result);
+ LIBDNS_XFRIN_READ(xfr, xfr->info, result);
return;
}
dns_message_detach(&msg);
}
dns_xfrin_detach(&xfr);
- LIBDNS_XFRIN_RECV_DONE(xfr, result);
+ LIBDNS_XFRIN_RECV_DONE(xfr, xfr->info, result);
}
static void
* Log incoming zone transfer messages in a format like
* transfer of <zone> from <address>: <message>
*/
-static void
-xfrin_logv(dns_xfrin_t *xfr, int level, const char *zonetext,
- const isc_sockaddr_t *primaryaddr, const char *fmt, va_list ap) {
- char primarytext[ISC_SOCKADDR_FORMATSIZE];
- char msgtext[2048];
-
- isc_sockaddr_format(primaryaddr, primarytext, sizeof(primarytext));
- vsnprintf(msgtext, sizeof(msgtext), fmt, ap);
-
- isc_log_write(dns_lctx, DNS_LOGCATEGORY_XFER_IN, DNS_LOGMODULE_XFER_IN,
- level, "%p: transfer of '%s' from %s: %s", xfr, zonetext,
- primarytext, msgtext);
-}
-
-/*
- * Logging function for use when there is a xfrin_ctx_t.
- */
static void
xfrin_log(dns_xfrin_t *xfr, int level, const char *fmt, ...) {
va_list ap;
- char zonetext[DNS_NAME_MAXTEXT + 32];
+ char primarytext[ISC_SOCKADDR_FORMATSIZE];
+ char msgtext[2048];
if (!isc_log_wouldlog(dns_lctx, level)) {
return;
}
- dns_zone_name(xfr->zone, zonetext, sizeof(zonetext));
-
+ isc_sockaddr_format(&xfr->primaryaddr, primarytext,
+ sizeof(primarytext));
va_start(ap, fmt);
- xfrin_logv(xfr, level, zonetext, &xfr->primaryaddr, fmt, ap);
+ vsnprintf(msgtext, sizeof(msgtext), fmt, ap);
va_end(ap);
+
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_XFER_IN, DNS_LOGMODULE_XFER_IN,
+ level, "%p: transfer of '%s' from %s: %s", xfr, xfr->info,
+ primarytext, msgtext);
}