示例#1
0
int
tld_indexer(const void *vp)
{
    const dns_message *m = vp;
    const char *tld;
    tldobj *obj;
    if (m->malformed)
	return -1;
    tld = dns_message_tld((dns_message *) m);
    if (NULL == theHash) {
	theHash = hash_create(MAX_ARRAY_SZ, tld_hashfunc, tld_cmpfunc,
	    1, afree, afree);
	if (NULL == theHash)
	    return -1;
    }
    if ((obj = hash_find(tld, theHash)))
	return obj->index;
    obj = acalloc(1, sizeof(*obj));
    if (NULL == obj)
	return -1;
    obj->tld = astrdup(tld);
    if (NULL == obj->tld) {
	afree(obj);
	return -1;
    }
    obj->index = next_idx;
    if (0 != hash_add(obj->tld, obj, theHash)) {
	afree(obj->tld);
	afree(obj);
	return -1;
    }
    next_idx++;
    return obj->index;
}
static int
nonauth_tld(const dns_message * m)
{
    unsigned int i;
    const char *tld = dns_message_tld((dns_message *) m);
    for (i = 0; KnownTLDS[i]; i++)
        if (0 == strcmp(KnownTLDS[i], tld))
            return 0;
    return CLASS_NONAUTH_TLD;
}
示例#3
0
void
dns_message_print(dns_message * m)
{
	char buf[128];
	inXaddr_ntop(&m->client_ip_addr, buf, 128);
	fprintf(stderr, "%15s:%5d", buf, m->tm->src_port);
	fprintf(stderr, "\tQT=%d", m->qtype);
	fprintf(stderr, "\tQC=%d", m->qclass);
	fprintf(stderr, "\tlen=%d", m->msglen);
	fprintf(stderr, "\tqname=%s", printable_dnsname(m->qname));
	fprintf(stderr, "\ttld=%s", printable_dnsname(dns_message_tld(m)));
	fprintf(stderr, "\topcode=%d", m->opcode);
	fprintf(stderr, "\trcode=%d", m->rcode);
	fprintf(stderr, "\tmalformed=%d", m->malformed);
	fprintf(stderr, "\tqr=%d", m->qr);
	fprintf(stderr, "\trd=%d", m->rd);
	fprintf(stderr, "\n");
}