diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2024-04-26 16:02:47 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2024-04-26 16:02:47 +0000 |
| commit | f67f36978ca9a9f8b1a6065db7d26763c1cc456c (patch) | |
| tree | d36e6c0c249c96672d6264f8ddf14b498b6c9e35 /src/server/shibari_packet_tdb_axfr.c | |
| parent | e9a0ed1fde6df9cee8ab093bce1624d89eb47ac2 (diff) | |
| download | shibari-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.c | 12 |
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 ; |
