Exemple #1
0
void
idnsPTRLookup(const struct in_addr addr, IDNSCB * callback, void *data)
{
    idns_query *q;
    const char *ip = inet_ntoa(addr);
    q = cbdataAlloc(idns_query);
    q->tcp_socket = -1;
    q->id = idnsQueryID();
    q->sz = rfc1035BuildPTRQuery(addr, q->buf, sizeof(q->buf), q->id, &q->query);
    debug(78, 3) ("idnsPTRLookup: buf is %d bytes for %s, id = %#hx\n",
	(int) q->sz, ip, q->id);
    if (q->sz < 0) {
	/* problem with query data -- query not sent */
	callback(data, NULL, 0, "Internal error");
	cbdataFree(q);
	return;
    }
    if (idnsCachedLookup(q->query.name, callback, data)) {
	cbdataFree(q);
	return;
    }
    q->callback = callback;
    q->callback_data = data;
    cbdataLock(q->callback_data);
    q->start_t = current_time;
    idnsCacheQuery(q);
    idnsSendQuery(q);
}
Exemple #2
0
void
idnsALookup(const char *name, IDNSCB * callback, void *data)
{
	unsigned int i;
	int nd = 0;
	idns_query *q;
	if (idnsCachedLookup(name, callback, data))
		return;
	q = cbdataAlloc(idns_query);
	q->tcp_socket = -1;
	q->id = idnsQueryID();

	for (i = 0; i < strlen(name); i++)
	{
		if (name[i] == '.')
		{
			nd++;
		}
	}

	if (Config.onoff.res_defnames && npc > 0 && name[strlen(name) - 1] != '.')
	{
		q->do_searchpath = 1;
	}
	else
	{
		q->do_searchpath = 0;
	}
	strcpy(q->orig, name);
	strcpy(q->name, q->orig);
	if (q->do_searchpath && nd < ndots)
	{
		q->domain = 0;
		strcat(q->name, ".");
		strcat(q->name, searchpath[q->domain].domain);
		debug(78, 3) ("idnsALookup: searchpath used for %s\n",
					  q->name);
	}
	q->sz = rfc1035BuildAQuery(q->name, q->buf, sizeof(q->buf), q->id,
							   &q->query);

	if (q->sz < 0)
	{
		/* problem with query data -- query not sent */
		callback(data, NULL, 0, "Internal error");
		cbdataFree(q);
		return;
	}
	debug(78, 3) ("idnsALookup: buf is %d bytes for %s, id = %#hx\n",
				  (int) q->sz, q->name, q->id);
	q->callback = callback;
	q->callback_data = data;
	cbdataLock(q->callback_data);
	q->start_t = current_time;
	idnsCacheQuery(q);
	idnsSendQuery(q);
}