for the benefit of some DNSBLs like the "TorDNSEL service".
struct Blacklist {
unsigned int status; /* If CONF_ILLEGAL, delete when no clients */
int refcount;
- char host[HOSTLEN];
+ char host[IRCD_RES_HOSTLEN + 1];
char reject_reason[IRCD_BUFSIZE];
unsigned int hits;
time_t lastwarning;
#ifndef _CHARYBDIS_RESLIB_H
#define _CHARYBDIS_RESLIB_H
+/* Longest hostname we're willing to work with.
+ * Due to DNSBLs this is more than HOSTLEN.
+ */
+#define IRCD_RES_HOSTLEN 255
+
/* Here we define some values lifted from nameser.h */
#define NS_NOTIFY_OP 4
#define NS_INT16SZ 2
extern void irc_ns_put32(unsigned long src, unsigned char *dst);
extern int irc_res_mkquery(const char *dname, int class, int type, unsigned char *buf, int buflen);
-extern char irc_domain[HOSTLEN + 1];
+extern char irc_domain[IRCD_RES_HOSTLEN + 1];
#endif
static void initiate_blacklist_dnsquery(struct Blacklist *blptr, struct Client *client_p)
{
struct BlacklistClient *blcptr = rb_malloc(sizeof(struct BlacklistClient));
- char buf[IRCD_BUFSIZE];
+ char buf[IRCD_RES_HOSTLEN + 1];
int ip[4];
blcptr->blacklist = blptr;
sscanf(client_p->sockhost, "%d.%d.%d.%d", &ip[3], &ip[2], &ip[1], &ip[0]);
/* becomes 2.0.0.127.torbl.ahbl.org or whatever */
- rb_snprintf(buf, IRCD_BUFSIZE, "%d.%d.%d.%d.%s", ip[0], ip[1], ip[2], ip[3], blptr->host);
+ rb_snprintf(buf, sizeof buf, "%d.%d.%d.%d.%s", ip[0], ip[1], ip[2], ip[3], blptr->host);
gethost_byname_type(buf, &blcptr->dns_query, T_A);
}
else
blptr->status &= ~CONF_ILLEGAL;
- rb_strlcpy(blptr->host, name, HOSTLEN);
+ rb_strlcpy(blptr->host, name, IRCD_RES_HOSTLEN + 1);
rb_strlcpy(blptr->reject_reason, reject_reason, IRCD_BUFSIZE);
blptr->lastwarning = 0;
int id;
time_t ttl;
char type;
- char queryname[128]; /* name currently being queried */
+ char queryname[IRCD_RES_HOSTLEN + 1]; /* name currently being queried */
char retries; /* retry counter */
char sends; /* number of sends (>1 means resent) */
time_t sentat;
static void do_query_name(struct DNSQuery *query, const char *name, struct reslist *request,
int type)
{
- char host_name[HOSTLEN + 1];
+ char host_name[IRCD_RES_HOSTLEN + 1];
- rb_strlcpy(host_name, name, HOSTLEN + 1);
- add_local_domain(host_name, HOSTLEN);
+ rb_strlcpy(host_name, name, IRCD_RES_HOSTLEN + 1);
+ add_local_domain(host_name, IRCD_RES_HOSTLEN);
if (request == NULL)
{
{
request = make_request(query);
memcpy(&request->addr, addr, sizeof(struct rb_sockaddr_storage));
- request->name = (char *)rb_malloc(HOSTLEN + 1);
+ request->name = (char *)rb_malloc(IRCD_RES_HOSTLEN + 1);
}
if (addr->ss_family == AF_INET)
*/
static int check_question(struct reslist *request, HEADER * header, char *buf, char *eob)
{
- char hostbuf[128]; /* working buffer */
+ char hostbuf[IRCD_RES_HOSTLEN + 1]; /* working buffer */
unsigned char *current; /* current position in buf */
int n; /* temp count */
*/
static int proc_answer(struct reslist *request, HEADER * header, char *buf, char *eob)
{
- char hostbuf[HOSTLEN + 100]; /* working buffer */
+ char hostbuf[IRCD_RES_HOSTLEN + 100]; /* working buffer */
unsigned char *current; /* current position in buf */
int query_class; /* answer class */
int type; /* answer type */
return (0);
}
- hostbuf[HOSTLEN] = '\0';
+ hostbuf[IRCD_RES_HOSTLEN] = '\0';
/* With Address arithmetic you have to be very anal
* this code was not working on alpha due to that
else if (n == 0)
return (0); /* no more answers left */
- rb_strlcpy(request->name, hostbuf, HOSTLEN + 1);
+ rb_strlcpy(request->name, hostbuf, IRCD_RES_HOSTLEN + 1);
return (1);
break;
struct rb_sockaddr_storage irc_nsaddr_list[IRCD_MAXNS];
int irc_nscount = 0;
-char irc_domain[HOSTLEN + 1];
+char irc_domain[IRCD_RES_HOSTLEN + 1];
static const char digitvalue[256] = {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /*16*/