]> jfr.im git - irc/rqf/shadowircd.git/commitdiff
Allow the resolver to process longer hostnames,
authorJilles Tjoelker <redacted>
Sat, 15 Nov 2008 15:13:39 +0000 (16:13 +0100)
committerJilles Tjoelker <redacted>
Sat, 15 Nov 2008 15:13:39 +0000 (16:13 +0100)
for the benefit of some DNSBLs like the "TorDNSEL service".

include/blacklist.h
include/reslib.h
src/blacklist.c
src/res.c
src/reslib.c

index 8ffb7594849ab7accbb90f2ac14ba1451b70b607..0569d5265586f7af1ab16eeb7d9729c49a63cdf2 100644 (file)
@@ -29,7 +29,7 @@
 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;
index 13360550a57decb1097f1014183ad1f8667348ae..1c15969f003e0635b9f0d5e9cb87de9f129bb62f 100644 (file)
@@ -7,6 +7,11 @@
 #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
@@ -115,6 +120,6 @@ extern void irc_ns_put16(unsigned int src, unsigned char *dst);
 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
index 572caddfe4537215b042fd72689d98c3f5f2ce83..09e53d7e12853e651b774a5248bdfd9cdfd3e25d 100644 (file)
@@ -117,7 +117,7 @@ static void blacklist_dns_callback(void *vptr, struct DNSReply *reply)
 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;
@@ -130,7 +130,7 @@ static void initiate_blacklist_dnsquery(struct Blacklist *blptr, struct Client *
        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);
 
@@ -154,7 +154,7 @@ struct Blacklist *new_blacklist(char *name, char *reject_reason)
        }
        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;
 
index bf1b32af30bc0e78821e148514ddff0d6fe8033e..06585abca8e82987f3a5ef8467e1f6198d55591d 100644 (file)
--- a/src/res.c
+++ b/src/res.c
@@ -62,7 +62,7 @@ struct reslist
        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;
@@ -433,10 +433,10 @@ void gethost_byaddr(const struct rb_sockaddr_storage *addr, struct DNSQuery *que
 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)
        {
@@ -462,7 +462,7 @@ static void do_query_number(struct DNSQuery *query, const struct rb_sockaddr_sto
        {
                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)
@@ -576,7 +576,7 @@ static void resend_query(struct reslist *request)
  */
 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 */
 
@@ -597,7 +597,7 @@ static int check_question(struct reslist *request, HEADER * header, char *buf, c
  */
 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 */
@@ -642,7 +642,7 @@ static int proc_answer(struct reslist *request, HEADER * header, char *buf, char
                        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
@@ -708,7 +708,7 @@ static int proc_answer(struct reslist *request, HEADER * header, char *buf, char
                          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;
index d646428295eb7601187751058f8a8d14b74f9541..38c09ebdf6e5d874766507e70df74578e07fdc85 100644 (file)
@@ -97,7 +97,7 @@
 
 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*/