Move common flags logging to shared functions
Query and response log shares the same flags. Move flags logging out of
log_query to share it with log_response. Use buffer instead of snprintf
to fill flags a bit faster.
Signed-off-by: Petr Menšík <pemensik@redhat.com>
(cherry picked from commit e6b19af2dd)
This commit is contained in:
committed by
Mark Andrews
parent
d9d50f6274
commit
59770f281c
104
lib/ns/query.c
104
lib/ns/query.c
@@ -548,6 +548,51 @@ inc_stats(ns_client_t *client, isc_statscounter_t counter) {
|
||||
}
|
||||
}
|
||||
|
||||
#define NS_CLIENT_FLAGS_FORMATSIZE sizeof("+E(255)STDCV")
|
||||
|
||||
static inline void
|
||||
ns_client_log_flags(ns_client_t *client, unsigned int flags,
|
||||
unsigned int extflags, char *buf, size_t len) {
|
||||
isc_buffer_t b;
|
||||
|
||||
isc_buffer_init(&b, buf, len);
|
||||
isc_buffer_putuint8(&b, WANTRECURSION(client) ? '+' : '-');
|
||||
if (client->ednsversion >= 0) {
|
||||
char ednsbuf[sizeof("E(255)")] = { 0 };
|
||||
|
||||
snprintf(ednsbuf, sizeof(ednsbuf), "E(%hhu)",
|
||||
(unsigned char)client->ednsversion);
|
||||
isc_buffer_putstr(&b, ednsbuf);
|
||||
}
|
||||
if (client->signer != NULL) {
|
||||
isc_buffer_putuint8(&b, 'S');
|
||||
}
|
||||
if (TCP(client)) {
|
||||
isc_buffer_putuint8(&b, 'T');
|
||||
}
|
||||
if ((extflags & DNS_MESSAGEEXTFLAG_DO) != 0) {
|
||||
isc_buffer_putuint8(&b, 'D');
|
||||
}
|
||||
if ((flags & DNS_MESSAGEFLAG_CD) != 0) {
|
||||
isc_buffer_putuint8(&b, 'C');
|
||||
}
|
||||
if (HAVECOOKIE(client)) {
|
||||
isc_buffer_putuint8(&b, 'V');
|
||||
} else if (WANTCOOKIE(client)) {
|
||||
isc_buffer_putuint8(&b, 'K');
|
||||
}
|
||||
isc_buffer_putuint8(&b, 0);
|
||||
}
|
||||
|
||||
#define NS_CLIENT_ECS_FORMATSIZE (DNS_ECS_FORMATSIZE + sizeof(" [ECS ]") - 1)
|
||||
|
||||
static inline void
|
||||
ns_client_log_ecs(ns_client_t *client, char *ecsbuf, size_t len) {
|
||||
strlcpy(ecsbuf, " [ECS ", len);
|
||||
dns_ecs_format(&client->ecs, ecsbuf + 6, len - 6);
|
||||
strlcat(ecsbuf, "]", len);
|
||||
}
|
||||
|
||||
static inline void
|
||||
log_response(ns_client_t *client, dns_rcode_t rcode) {
|
||||
char namebuf[DNS_NAME_FORMATSIZE];
|
||||
@@ -555,11 +600,9 @@ log_response(ns_client_t *client, dns_rcode_t rcode) {
|
||||
char classbuf[DNS_RDATACLASS_FORMATSIZE];
|
||||
char rcodebuf[20];
|
||||
char onbuf[ISC_NETADDR_FORMATSIZE];
|
||||
char ecsbuf[DNS_ECS_FORMATSIZE + sizeof(" [ECS ]") - 1] = { 0 };
|
||||
char ednsbuf[sizeof("E(65535)")] = { 0 };
|
||||
char ecsbuf[NS_CLIENT_ECS_FORMATSIZE] = { 0 };
|
||||
char flagsbuf[NS_CLIENT_FLAGS_FORMATSIZE] = { 0 };
|
||||
isc_buffer_t b;
|
||||
uint16_t extflags;
|
||||
unsigned int flags;
|
||||
int level = ISC_LOG_INFO;
|
||||
|
||||
if (!isc_log_wouldlog(ns_lctx, level))
|
||||
@@ -574,34 +617,18 @@ log_response(ns_client_t *client, dns_rcode_t rcode) {
|
||||
isc_buffer_putuint8(&b, 0);
|
||||
isc_netaddr_format(&client->destaddr, onbuf, sizeof(onbuf));
|
||||
|
||||
if (client->ednsversion >= 0) {
|
||||
snprintf(ednsbuf, sizeof(ednsbuf), "E(%hd)",
|
||||
client->ednsversion);
|
||||
}
|
||||
|
||||
if (HAVEECS(client)) {
|
||||
strlcpy(ecsbuf, " [ECS ", sizeof(ecsbuf));
|
||||
dns_ecs_format(&client->ecs, ecsbuf + 6, sizeof(ecsbuf) - 6);
|
||||
strlcat(ecsbuf, "]", sizeof(ecsbuf));
|
||||
ns_client_log_ecs(client, ecsbuf, sizeof(ecsbuf));
|
||||
}
|
||||
|
||||
extflags = client->extflags;
|
||||
flags = client->message->flags;
|
||||
ns_client_log_flags(client, client->message->flags, client->extflags,
|
||||
flagsbuf, sizeof(flagsbuf));
|
||||
ns_client_log(client, NS_LOGCATEGORY_RESPONSES, NS_LOGMODULE_QUERY,
|
||||
level,
|
||||
"response: %s %s %s %s %d %d %d %s%s%s%s%s%s%s (%s)%s",
|
||||
level, "response: %s %s %s %s %u %u %u %s (%s)%s",
|
||||
namebuf, classbuf, typebuf, rcodebuf,
|
||||
client->message->counts[DNS_SECTION_ANSWER],
|
||||
client->message->counts[DNS_SECTION_AUTHORITY],
|
||||
client->message->counts[DNS_SECTION_ADDITIONAL],
|
||||
RECURSIONOK(client) ? "+" : "-",
|
||||
(client->signer != NULL) ? "S" : "", ednsbuf,
|
||||
TCP(client) ? "T" : "",
|
||||
((extflags & DNS_MESSAGEEXTFLAG_DO) != 0) ? "D" : "",
|
||||
((flags & DNS_MESSAGEFLAG_CD) != 0) ? "C" : "",
|
||||
HAVECOOKIE(client) ? "V"
|
||||
: WANTCOOKIE(client) ? "K"
|
||||
: "",
|
||||
client->message->counts[DNS_SECTION_ADDITIONAL], flagsbuf,
|
||||
onbuf, ecsbuf);
|
||||
}
|
||||
|
||||
@@ -11859,8 +11886,8 @@ log_query(ns_client_t *client, unsigned int flags, unsigned int extflags) {
|
||||
char typebuf[DNS_RDATATYPE_FORMATSIZE];
|
||||
char classbuf[DNS_RDATACLASS_FORMATSIZE];
|
||||
char onbuf[ISC_NETADDR_FORMATSIZE];
|
||||
char ecsbuf[DNS_ECS_FORMATSIZE + sizeof(" [ECS ]") - 1] = { 0 };
|
||||
char ednsbuf[sizeof("E(65535)")] = { 0 };
|
||||
char ecsbuf[NS_CLIENT_ECS_FORMATSIZE] = { 0 };
|
||||
char flagsbuf[NS_CLIENT_FLAGS_FORMATSIZE] = { 0 };
|
||||
dns_rdataset_t *rdataset;
|
||||
int level = ISC_LOG_INFO;
|
||||
|
||||
@@ -11875,28 +11902,15 @@ log_query(ns_client_t *client, unsigned int flags, unsigned int extflags) {
|
||||
dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
|
||||
isc_netaddr_format(&client->destaddr, onbuf, sizeof(onbuf));
|
||||
|
||||
if (client->ednsversion >= 0) {
|
||||
snprintf(ednsbuf, sizeof(ednsbuf), "E(%hd)",
|
||||
client->ednsversion);
|
||||
}
|
||||
|
||||
if (HAVEECS(client)) {
|
||||
strlcpy(ecsbuf, " [ECS ", sizeof(ecsbuf));
|
||||
dns_ecs_format(&client->ecs, ecsbuf + 6, sizeof(ecsbuf) - 6);
|
||||
strlcat(ecsbuf, "]", sizeof(ecsbuf));
|
||||
ns_client_log_ecs(client, ecsbuf, sizeof(ecsbuf));
|
||||
}
|
||||
ns_client_log_flags(client, flags, extflags, flagsbuf,
|
||||
sizeof(flagsbuf));
|
||||
|
||||
ns_client_log(client, NS_LOGCATEGORY_QUERIES, NS_LOGMODULE_QUERY, level,
|
||||
"query: %s %s %s %s%s%s%s%s%s%s (%s)%s", namebuf,
|
||||
classbuf, typebuf, WANTRECURSION(client) ? "+" : "-",
|
||||
(client->signer != NULL) ? "S" : "", ednsbuf,
|
||||
TCP(client) ? "T" : "",
|
||||
((extflags & DNS_MESSAGEEXTFLAG_DO) != 0) ? "D" : "",
|
||||
((flags & DNS_MESSAGEFLAG_CD) != 0) ? "C" : "",
|
||||
HAVECOOKIE(client) ? "V"
|
||||
: WANTCOOKIE(client) ? "K"
|
||||
: "",
|
||||
onbuf, ecsbuf);
|
||||
"query: %s %s %s %s (%s)%s", namebuf, classbuf, typebuf,
|
||||
flagsbuf, onbuf, ecsbuf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user