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; }
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"); }