dns: fix outputs with 0-len A/AAAA records

pull/2531/merge
Victor Julien 8 years ago
parent 20990f7a7e
commit 71710f088e

@ -138,11 +138,11 @@ static void LogAnswer(LogDnsLogThread *aft, char *timebuf, char *srcip, char *ds
" [**] %s [**] TTL %u [**] ", record, entry->ttl); " [**] %s [**] TTL %u [**] ", record, entry->ttl);
uint8_t *ptr = (uint8_t *)((uint8_t *)entry + sizeof(DNSAnswerEntry) + entry->fqdn_len); uint8_t *ptr = (uint8_t *)((uint8_t *)entry + sizeof(DNSAnswerEntry) + entry->fqdn_len);
if (entry->type == DNS_RECORD_TYPE_A) { if (entry->type == DNS_RECORD_TYPE_A && entry->data_len == 4) {
char a[16] = ""; char a[16] = "";
PrintInet(AF_INET, (const void *)ptr, a, sizeof(a)); PrintInet(AF_INET, (const void *)ptr, a, sizeof(a));
MemBufferWriteString(aft->buffer, "%s", a); MemBufferWriteString(aft->buffer, "%s", a);
} else if (entry->type == DNS_RECORD_TYPE_AAAA) { } else if (entry->type == DNS_RECORD_TYPE_AAAA && entry->data_len == 16) {
char a[46]; char a[46];
PrintInet(AF_INET6, (const void *)ptr, a, sizeof(a)); PrintInet(AF_INET6, (const void *)ptr, a, sizeof(a));
MemBufferWriteString(aft->buffer, "%s", a); MemBufferWriteString(aft->buffer, "%s", a);

@ -479,11 +479,11 @@ static void OutputAnswer(LogDnsLogThread *aft, json_t *djs,
json_object_set_new(js, "ttl", json_integer(entry->ttl)); json_object_set_new(js, "ttl", json_integer(entry->ttl));
uint8_t *ptr = (uint8_t *)((uint8_t *)entry + sizeof(DNSAnswerEntry)+ entry->fqdn_len); uint8_t *ptr = (uint8_t *)((uint8_t *)entry + sizeof(DNSAnswerEntry)+ entry->fqdn_len);
if (entry->type == DNS_RECORD_TYPE_A) { if (entry->type == DNS_RECORD_TYPE_A && entry->data_len == 4) {
char a[16] = ""; char a[16] = "";
PrintInet(AF_INET, (const void *)ptr, a, sizeof(a)); PrintInet(AF_INET, (const void *)ptr, a, sizeof(a));
json_object_set_new(js, "rdata", json_string(a)); json_object_set_new(js, "rdata", json_string(a));
} else if (entry->type == DNS_RECORD_TYPE_AAAA) { } else if (entry->type == DNS_RECORD_TYPE_AAAA && entry->data_len == 16) {
char a[46] = ""; char a[46] = "";
PrintInet(AF_INET6, (const void *)ptr, a, sizeof(a)); PrintInet(AF_INET6, (const void *)ptr, a, sizeof(a));
json_object_set_new(js, "rdata", json_string(a)); json_object_set_new(js, "rdata", json_string(a));

@ -214,13 +214,17 @@ static int DnsGetAnswerTable(lua_State *luastate)
ptr = (uint8_t *)((uint8_t *)answer + sizeof(DNSAnswerEntry) + answer->fqdn_len); ptr = (uint8_t *)((uint8_t *)answer + sizeof(DNSAnswerEntry) + answer->fqdn_len);
if (answer->type == DNS_RECORD_TYPE_A) { if (answer->type == DNS_RECORD_TYPE_A) {
char a[16] = ""; char a[16] = "";
if (answer->data_len == 4) {
PrintInet(AF_INET, (const void *)ptr, a, sizeof(a)); PrintInet(AF_INET, (const void *)ptr, a, sizeof(a));
}
lua_pushstring(luastate, "addr"); lua_pushstring(luastate, "addr");
LuaPushStringBuffer(luastate, (uint8_t *)a, strlen(a)); LuaPushStringBuffer(luastate, (uint8_t *)a, strlen(a));
lua_settable(luastate, -3); lua_settable(luastate, -3);
} else if (answer->type == DNS_RECORD_TYPE_AAAA) { } else if (answer->type == DNS_RECORD_TYPE_AAAA) {
char a[46]; char a[46] = "";
if (answer->data_len == 16) {
PrintInet(AF_INET6, (const void *)ptr, a, sizeof(a)); PrintInet(AF_INET6, (const void *)ptr, a, sizeof(a));
}
lua_pushstring(luastate, "addr"); lua_pushstring(luastate, "addr");
LuaPushStringBuffer(luastate, (uint8_t *)a, strlen(a)); LuaPushStringBuffer(luastate, (uint8_t *)a, strlen(a));
lua_settable(luastate, -3); lua_settable(luastate, -3);

Loading…
Cancel
Save