aboutsummaryrefslogtreecommitdiffstats
path: root/src/server/shibari_packet_tdb_axfr.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2024-04-26 16:02:47 +0000
committerLaurent Bercot <ska@appnovation.com>2024-04-26 16:02:47 +0000
commitf67f36978ca9a9f8b1a6065db7d26763c1cc456c (patch)
treed36e6c0c249c96672d6264f8ddf14b498b6c9e35 /src/server/shibari_packet_tdb_axfr.c
parente9a0ed1fde6df9cee8ab093bce1624d89eb47ac2 (diff)
downloadshibari-f67f36978ca9a9f8b1a6065db7d26763c1cc456c.tar.gz
Support dns-0x20 BULLSHIT
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/server/shibari_packet_tdb_axfr.c')
-rw-r--r--src/server/shibari_packet_tdb_axfr.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/server/shibari_packet_tdb_axfr.c b/src/server/shibari_packet_tdb_axfr.c
index 5613b67..c8ef4e7 100644
--- a/src/server/shibari_packet_tdb_axfr.c
+++ b/src/server/shibari_packet_tdb_axfr.c
@@ -34,15 +34,15 @@ int shibari_packet_tdb_axfr (buffer *b, char const *axfrok, char const *loc, cdb
{
shibari_tdb_entry soa ;
shibari_tdb_entry cur ;
+ s6dns_domain_t z = *zone ;
uint32_t pos = CDB_TRAVERSE_INIT() ;
if (axfrok && axfrok[0] != '*')
{
- s6dns_domain_t decoded = *zone ;
unsigned int zonelen ;
size_t len = strlen(axfrok) + 1 ;
char zbuf[256] ;
- if (!s6dns_domain_decode(&decoded)) return 1 ;
- zonelen = s6dns_domain_tostring(zbuf, 256, &decoded) ;
+ if (!s6dns_domain_decode(&z)) return 1 ;
+ zonelen = s6dns_domain_tostring(zbuf, 256, &z) ;
while (len)
{
size_t seppos = byte_in(axfrok, len, SEPS, sizeof(SEPS)) ;
@@ -53,9 +53,11 @@ int shibari_packet_tdb_axfr (buffer *b, char const *axfrok, char const *loc, cdb
if (!len) return 5 ;
}
+ shibari_util_canon_domain(&z, zone) ;
+
{
cdb_find_state state = CDB_FIND_STATE_ZERO ;
- int r = shibari_tdb_read_entry(tdb, &state, &soa, zone->s, zone->len, SHIBARI_T_SOA, 0, loc, wstamp, 0) ;
+ int r = shibari_tdb_read_entry(tdb, &state, &soa, z.s, z.len, SHIBARI_T_SOA, 0, loc, wstamp, 0) ;
if (r == -1) return 2 ;
if (!r) return 9 ;
}
@@ -71,7 +73,7 @@ int shibari_packet_tdb_axfr (buffer *b, char const *axfrok, char const *loc, cdb
int r = cdb_traverse_next(tdb, &cur.key, &data, &pos) ;
if (r == -1) return 2 ;
if (!r) break ;
- prefixlen = shibari_util_get_prefixlen(cur.key.s, cur.key.len, zone->s, zone->len) ;
+ prefixlen = shibari_util_get_prefixlen(cur.key.s, cur.key.len, z.s, z.len) ;
if (prefixlen == -1) continue ;
r = shibari_tdb_entry_parse(&cur, data.s, data.len, SHIBARI_T_ANY, 2, loc, wstamp) ;
if (r == -1) return 2 ;