mirror of
https://github.com/isc-projects/bind9.git
synced 2026-04-15 22:09:31 -04:00
fix byte order in EDE logging
When an EDE code is added to a message, the code is converted early in a big-endian order so it can be memcpy-ed directly in the EDE buffer that will go on the wire. This previous change forget to update debug logs which still assume the EDE code was in host byte order. Add a separate variable to differentiate both and avoid ambiguities
This commit is contained in:
parent
27f3b8950a
commit
39c2fc4670
1 changed files with 8 additions and 7 deletions
|
|
@ -234,7 +234,8 @@ client_extendederror_reset(ns_client_t *client) {
|
|||
|
||||
void
|
||||
ns_client_extendederror(ns_client_t *client, uint16_t code, const char *text) {
|
||||
const uint16_t codelen = sizeof(code);
|
||||
uint16_t becode;
|
||||
const uint16_t becodelen = sizeof(becode);
|
||||
uint16_t textlen = 0;
|
||||
size_t pos = 0;
|
||||
unsigned char *ede = NULL;
|
||||
|
|
@ -246,7 +247,7 @@ ns_client_extendederror(ns_client_t *client, uint16_t code, const char *text) {
|
|||
* As ede will be directly put in the DNS message we need to make sure
|
||||
* the code is in big-endian format
|
||||
*/
|
||||
code = htobe16(code);
|
||||
becode = htobe16(code);
|
||||
|
||||
for (pos = 0; pos < DNS_EDE_MAX_ERRORS; pos++) {
|
||||
edns = client->ede[pos];
|
||||
|
|
@ -255,7 +256,7 @@ ns_client_extendederror(ns_client_t *client, uint16_t code, const char *text) {
|
|||
break;
|
||||
}
|
||||
|
||||
if (memcmp(&code, edns->value, sizeof(code)) == 0) {
|
||||
if (memcmp(&becode, edns->value, becodelen) == 0) {
|
||||
ns_client_log(client, NS_LOGCATEGORY_CLIENT,
|
||||
NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(1),
|
||||
"ignoring duplicate ede %u %s", code,
|
||||
|
|
@ -288,16 +289,16 @@ ns_client_extendederror(ns_client_t *client, uint16_t code, const char *text) {
|
|||
}
|
||||
}
|
||||
|
||||
ede = isc_mem_get(client->manager->mctx, codelen + textlen);
|
||||
ede = isc_mem_get(client->manager->mctx, becodelen + textlen);
|
||||
|
||||
memcpy(ede, &code, sizeof(code));
|
||||
memcpy(ede, &becode, sizeof(code));
|
||||
if (textlen > 0) {
|
||||
memcpy(ede + codelen, text, textlen);
|
||||
memcpy(ede + becodelen, text, textlen);
|
||||
}
|
||||
|
||||
edns = isc_mem_get(client->manager->mctx, sizeof(*edns));
|
||||
*edns = (dns_ednsopt_t){ .code = DNS_OPT_EDE,
|
||||
.length = codelen + textlen,
|
||||
.length = becodelen + textlen,
|
||||
.value = ede };
|
||||
|
||||
client->ede[pos] = edns;
|
||||
|
|
|
|||
Loading…
Reference in a new issue