ircd/dns: implement final version of authd-dns line protocol

This commit is contained in:
William Pitcock 2016-01-08 05:44:05 -06:00
parent fa43f55940
commit 1bf2919817

View file

@ -38,10 +38,12 @@
#define DNS_IDTABLE_SIZE 0x2000 #define DNS_IDTABLE_SIZE 0x2000
#define DNS_HOST ((char)'H') #define DNS_HOST_IPV4 ((char)'4')
#define DNS_REVERSE ((char)'I') #define DNS_HOST_IPV6 ((char)'6')
#define DNS_REVERSE_IPV4 ((char)'R')
#define DNS_REVERSE_IPV6 ((char)'S')
static void submit_dns(const char, uint16_t id, int aftype, const char *addr); static void submit_dns(uint16_t id, char type, const char *addr);
struct dnsreq struct dnsreq
{ {
@ -114,7 +116,7 @@ lookup_hostname(const char *hostname, int aftype, DNSCB callback, void *data)
#endif #endif
aft = 4; aft = 4;
submit_dns(DNS_HOST, nid, aft, hostname); submit_dns(nid, aft == 4 ? DNS_HOST_IPV4 : DNS_HOST_IPV6, hostname);
return (nid); return (nid);
} }
@ -141,12 +143,12 @@ lookup_ip(const char *addr, int aftype, DNSCB callback, void *data)
#endif #endif
aft = 4; aft = 4;
submit_dns(DNS_REVERSE, nid, aft, addr); submit_dns(nid, aft == 4 ? DNS_REVERSE_IPV4 : DNS_REVERSE_IPV6, addr);
return (nid); return (nid);
} }
void void
dns_results_callback(const char *callid, const char *status, const char *aftype, const char *results) dns_results_callback(const char *callid, const char *status, const char *type, const char *results)
{ {
struct dnsreq *req; struct dnsreq *req;
uint16_t nid; uint16_t nid;
@ -158,8 +160,8 @@ dns_results_callback(const char *callid, const char *status, const char *aftype,
return; return;
nid = (uint16_t)lnid; nid = (uint16_t)lnid;
req = &querytable[nid]; req = &querytable[nid];
st = atoi(status); st = *status == 'O';
aft = atoi(aftype); aft = *type == '6' || *type == 'S' ? 6 : 4;
if(req->callback == NULL) if(req->callback == NULL)
{ {
/* got cancelled..oh well */ /* got cancelled..oh well */
@ -191,12 +193,12 @@ report_dns_servers(struct Client *source_p)
} }
static void static void
submit_dns(char type, uint16_t nid, int aftype, const char *addr) submit_dns(uint16_t nid, char type, const char *addr)
{ {
if(authd_helper == NULL) if(authd_helper == NULL)
{ {
handle_dns_failure(nid); handle_dns_failure(nid);
return; return;
} }
rb_helper_write(authd_helper, "%c %x %d %s", type, nid, aftype, addr); rb_helper_write(authd_helper, "D %x %c %s", nid, type, addr);
} }