diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-05-26 06:02:50 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-05-26 06:02:50 +0000 |
| commit | feffa899990da7d1d113894daaac6ed3d15031ad (patch) | |
| tree | 6343fb3c53b584809317f30053e1172f69c8bb1c | |
| parent | 27fbd3626d5507f458c1233f4b66df36a11d60c5 (diff) | |
| download | shibari-feffa899990da7d1d113894daaac6ed3d15031ad.tar.gz | |
fix wildcard handling (and also the bug we just introduced)
| -rw-r--r-- | src/server/shibari_packet_add_rr.c | 7 | ||||
| -rw-r--r-- | src/server/shibari_packet_tdb_answer_query.c | 6 | ||||
| -rw-r--r-- | src/server/shibari_tdb_read_entry.c | 3 |
3 files changed, 6 insertions, 10 deletions
diff --git a/src/server/shibari_packet_add_rr.c b/src/server/shibari_packet_add_rr.c index b92e8dd..62712fa 100644 --- a/src/server/shibari_packet_add_rr.c +++ b/src/server/shibari_packet_add_rr.c @@ -12,13 +12,8 @@ int shibari_packet_add_rr (shibari_packet *p, shibari_tdb_entry const *entry, int prefixlen, uint16_t offset, unsigned int section) { uint16_t *count[4] = { &p->hdr.counts.qd, &p->hdr.counts.an, &p->hdr.counts.ns, &p->hdr.counts.nr } ; - uint16_t rrlen = 10 + entry->data.len + (entry->flags & 1 ? 2 : 0) + (prefixlen >= 0 ? prefixlen + 2 : entry->key.len) ; + uint16_t rrlen = 10 + entry->data.len + (prefixlen >= 0 ? prefixlen + 2 : entry->key.len) ; if (p->max - p->pos < rrlen) return 0 ; - if (entry->flags & 1) - { - p->buf[p->pos++] = 1 ; - p->buf[p->pos++] = '*' ; - } if (prefixlen >= 0) { memcpy(p->buf + p->pos, entry->key.s, prefixlen) ; diff --git a/src/server/shibari_packet_tdb_answer_query.c b/src/server/shibari_packet_tdb_answer_query.c index 74b08a2..a57eb79 100644 --- a/src/server/shibari_packet_tdb_answer_query.c +++ b/src/server/shibari_packet_tdb_answer_query.c @@ -62,7 +62,7 @@ unsigned int shibari_packet_tdb_answer_query (shibari_packet *pkt, cdb const *td int r = shibari_tdb_read_entry(tdb, &state, &entry, ql.s + wildpos, ql.len - wildpos, qtype, !!wildpos, loc, stamp, &flagyxdomain) ; if (r == -1) return 2 ; if (!r) break ; - if (!shibari_packet_add_rr(pkt, &entry, 0, wildpos, 2)) + if (!shibari_packet_add_rr(pkt, &entry, 0, 0, 2)) { pkt->hdr.tc = 1 ; return 0 ; @@ -77,8 +77,8 @@ unsigned int shibari_packet_tdb_answer_query (shibari_packet *pkt, cdb const *td default : break ; } } - if (pkt->hdr.counts.an || flagyxdomain) break ; - wildpos += 1 + q->s[wildpos] ; + if (pkt->hdr.counts.an || flagyxdomain || (ql.s[wildpos] == 1 && ql.s[wildpos+1] == '*')) break ; + wildpos += 1 + ql.s[wildpos] ; } got: diff --git a/src/server/shibari_tdb_read_entry.c b/src/server/shibari_tdb_read_entry.c index 15dd0c2..140e63c 100644 --- a/src/server/shibari_tdb_read_entry.c +++ b/src/server/shibari_tdb_read_entry.c @@ -12,11 +12,12 @@ int shibari_tdb_read_entry (cdb const *tdb, cdb_find_state *state, shibari_tdb_e { r = cdb_findnext(tdb, &data, s, len, state) ; if (r <= 0) return r ; - if (flags && !!wild) *flags |= 1 ; + if (flags && !wild) *flags |= 1 ; r = shibari_tdb_entry_parse(out, data.s, data.len, qtype, wild, loc, stamp) ; if (r == -1) return -1 ; } out->key.s = s ; out->key.len = len ; + if (flags) *flags |= 1 ; return 1 ; } |
