summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
f9ba6e0)
We are going to want to deal with labstart and dgram separately.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
((labnum) ? (rps)->map : (1 << NREVDOMAINS) - 1)
int adns__revparse_label(struct revparse_state *rps, int labnum,
((labnum) ? (rps)->map : (1 << NREVDOMAINS) - 1)
int adns__revparse_label(struct revparse_state *rps, int labnum,
- const char *label, int lablen) {
+ const char *dgram, int labstart, int lablen) {
+ const char *label = dgram+labstart;
unsigned f= REVDOMAIN_MAP(rps, labnum);
const struct revparse_domain *rpd;
const char *tp;
unsigned f= REVDOMAIN_MAP(rps, labnum);
const struct revparse_domain *rpd;
const char *tp;
-int adns__revparse_done(struct revparse_state *rps, int nlabels,
+int adns__revparse_done(struct revparse_state *rps,
+ const char *dgram, int nlabels,
adns_rrtype *rrtype_r, adns_sockaddr *addr_r) {
unsigned f= REVDOMAIN_MAP(rps, nlabels);
const struct revparse_domain *rpd;
adns_rrtype *rrtype_r, adns_sockaddr *addr_r) {
unsigned f= REVDOMAIN_MAP(rps, nlabels);
const struct revparse_domain *rpd;
adns_status (*checklabel)(adns_state ads, adns_queryflags flags,
union checklabel_state *cls, qcontext *ctx,
adns_status (*checklabel)(adns_state ads, adns_queryflags flags,
union checklabel_state *cls, qcontext *ctx,
- int labnum, const char *label, int lablen);
+ int labnum, const char *dgram,
+ int labstart, int lablen);
/* Check a label from the query domain string. The label is not
* necessarily null-terminated. The hook can refuse the query's submission
* by returning a nonzero status. State can be stored in *cls between
/* Check a label from the query domain string. The label is not
* necessarily null-terminated. The hook can refuse the query's submission
* by returning a nonzero status. State can be stored in *cls between
adns_status adns__ckl_hostname(adns_state ads, adns_queryflags flags,
union checklabel_state *cls,
qcontext *ctx, int labnum,
adns_status adns__ckl_hostname(adns_state ads, adns_queryflags flags,
union checklabel_state *cls,
qcontext *ctx, int labnum,
- const char *label, int lablen);
+ const char *dgram, int labstart, int lablen);
/* implemented in query.c, used by types.c as default
* and as part of implementation for some fancier types
* doesn't require any state */
/* implemented in query.c, used by types.c as default
* and as part of implementation for some fancier types
* doesn't require any state */
*/
extern int adns__revparse_label(struct revparse_state *rps, int labnum,
*/
extern int adns__revparse_label(struct revparse_state *rps, int labnum,
- const char *label, int lablen);
+ const char *dgram,
+ int labstart, int lablen);
/* Parse a label in a reverse-domain name, given its index labnum (starting
* from zero), a pointer to its contents (which need not be null-terminated),
* and its length. The state in *rps is initialized implicitly when labnum
/* Parse a label in a reverse-domain name, given its index labnum (starting
* from zero), a pointer to its contents (which need not be null-terminated),
* and its length. The state in *rps is initialized implicitly when labnum
* definitely invalid and the parse must be abandoned.
*/
* definitely invalid and the parse must be abandoned.
*/
-extern int adns__revparse_done(struct revparse_state *rps, int nlabels,
+extern int adns__revparse_done(struct revparse_state *rps,
+ const char *dgram, int nlabels,
adns_rrtype *rrtype_r, adns_sockaddr *addr_r);
/* Finishes parsing a reverse-domain name, given the total number of
* labels in the name. On success, fills in the af and protocol
adns_rrtype *rrtype_r, adns_sockaddr *addr_r);
/* Finishes parsing a reverse-domain name, given the total number of
* labels in the name. On success, fills in the af and protocol
adns_status adns__ckl_hostname(adns_state ads, adns_queryflags flags,
union checklabel_state *cls,
qcontext *ctx, int labnum,
adns_status adns__ckl_hostname(adns_state ads, adns_queryflags flags,
union checklabel_state *cls,
qcontext *ctx, int labnum,
- const char *label, int lablen)
+ const char *dgram, int labstart, int lablen)
+ const char *label = dgram+labstart;
if (flags & adns_qf_quoteok_query) return adns_s_ok;
for (i=0; i<lablen; i++) {
if (flags & adns_qf_quoteok_query) return adns_s_ok;
for (i=0; i<lablen; i++) {
err= adns__findlabel_next(&fls, &lablen,&labstart);
assert(!err); assert(lablen >= 0);
err= typei->checklabel(ads,flags, &cls,ctx,
err= adns__findlabel_next(&fls, &lablen,&labstart);
assert(!err); assert(lablen >= 0);
err= typei->checklabel(ads,flags, &cls,ctx,
- labnum++, dgram+labstart,lablen);
+ labnum++, dgram,labstart,lablen);
if (err) return err;
} while (lablen);
return adns_s_ok;
if (err) return err;
} while (lablen);
return adns_s_ok;
static adns_status ckl_ptr(adns_state ads, adns_queryflags flags,
union checklabel_state *cls, qcontext *ctx,
static adns_status ckl_ptr(adns_state ads, adns_queryflags flags,
union checklabel_state *cls, qcontext *ctx,
- int labnum, const char *label, int lablen) {
+ int labnum, const char *dgram,
+ int labstart, int lablen) {
- if (adns__revparse_label(&cls->ptr, labnum, label,lablen))
+ if (adns__revparse_label(&cls->ptr, labnum, dgram,labstart,lablen))
return adns_s_querydomainwrong;
} else {
return adns_s_querydomainwrong;
} else {
- if (adns__revparse_done(&cls->ptr, labnum,
+ if (adns__revparse_done(&cls->ptr, dgram, labnum,
&ctx->tinfo.ptr.rev_rrtype,
&ctx->tinfo.ptr.addr))
return adns_s_querydomainwrong;
&ctx->tinfo.ptr.rev_rrtype,
&ctx->tinfo.ptr.addr))
return adns_s_querydomainwrong;
static adns_status ckl_srv(adns_state ads, adns_queryflags flags,
union checklabel_state *cls, qcontext *ctx,
static adns_status ckl_srv(adns_state ads, adns_queryflags flags,
union checklabel_state *cls, qcontext *ctx,
- int labnum, const char *label, int lablen) {
+ int labnum, const char *dgram,
+ int labstart, int lablen) {
+ const char *label = dgram+labstart;
if (labnum < 2 && !(flags & adns_qf_quoteok_query)) {
if (!lablen || label[0] != '_') return adns_s_querydomaininvalid;
return adns_s_ok;
}
if (labnum < 2 && !(flags & adns_qf_quoteok_query)) {
if (!lablen || label[0] != '_') return adns_s_querydomaininvalid;
return adns_s_ok;
}
- return adns__ckl_hostname(ads, flags, cls, ctx, labnum, label, lablen);
+ return adns__ckl_hostname(ads,flags, cls,ctx, labnum, dgram,labstart,lablen);
}
static adns_status pap_srv_begin(const parseinfo *pai, int *cbyte_io, int max,
}
static adns_status pap_srv_begin(const parseinfo *pai, int *cbyte_io, int max,