]> Pileus Git - ~andy/fetchmail/blobdiff - mxget.c
Credit John Beck's fixes.
[~andy/fetchmail] / mxget.c
diff --git a/mxget.c b/mxget.c
index 3bb5411995f19fb3258686587e221e8c864c965b..4529c223bea99e1abc838837d7dc88f8907df295 100644 (file)
--- a/mxget.c
+++ b/mxget.c
@@ -1,14 +1,16 @@
 /*
  * mxget.c -- fetch MX records for given DNS name
  *
- * Copyright 1997 by Eric S. Raymond
+ * Copyright (C) 1996, 1997, 1998, 2000, 2002 by Eric S. Raymond
+ * Copyright (C) 2005, 2006, 2007 by Matthias Andree
  * For license terms, see the file COPYING in this directory.
  */
 
 #include "config.h"
+#include "fetchmail.h"
 #include <stdio.h>
-#ifdef HAVE_RES_SEARCH
 #include <string.h>
+#ifdef HAVE_RES_SEARCH
 #ifdef HAVE_NET_SOCKET_H
 #include <net/socket.h>
 #endif
@@ -68,7 +70,7 @@ struct mxentry *getmxrecords(const char *name)
     n = res_search(name, C_IN,T_MX, (unsigned char *)&answer, sizeof(answer));
     if (n == -1)
        return((struct mxentry *)NULL);
-    if (n > sizeof(answer))
+    if ((size_t)n > sizeof(answer))
        n = sizeof(answer);     
 
     hp = (HEADER *)&answer;
@@ -76,7 +78,7 @@ struct mxentry *getmxrecords(const char *name)
     eom = answer + n;
     h_errno = 0;
     for (qdcount = ntohs(hp->qdcount); qdcount--; cp += n + QFIXEDSZ)
-       if ((n = dn_skipname(cp, eom)) < 0)
+      if ((n = dn_skipname((unsigned char *)cp, (unsigned char *)eom)) < 0)
            return((struct mxentry *)NULL);
     buflen = sizeof(MXHostBuf) - 1;
     bp = MXHostBuf;
@@ -84,7 +86,8 @@ struct mxentry *getmxrecords(const char *name)
     ancount = ntohs(hp->ancount);
     while (--ancount >= 0 && cp < eom)
     {
-       if ((n = dn_expand(answer, eom, cp, bp, buflen)) < 0)
+       if ((n = dn_expand((unsigned char *)answer, (unsigned char *)eom,
+                          (unsigned char *)cp, bp, buflen)) < 0)
            break;
        cp += n;
        GETSHORT(type, cp);
@@ -96,7 +99,8 @@ struct mxentry *getmxrecords(const char *name)
            continue;
        }
        GETSHORT(pref, cp);
-       if ((n = dn_expand(answer, eom, cp, bp, buflen)) < 0)
+       if ((n = dn_expand((unsigned char *)answer, (unsigned char *)eom,
+                          (unsigned char *)cp, bp, buflen)) < 0)
            break;
        cp += n;
 
@@ -122,22 +126,27 @@ struct mxentry *getmxrecords(const char *name)
 
 int main(int argc, char *argv[])
 {
-    int        count, i;
+#ifdef HAVE_RES_SEARCH
     struct mxentry *responses;
+#endif
 
     if (argc != 2 || 0 == strcmp(argv[1], "-h")) {
        fprintf(stderr, "Usage: %s domain\n", argv[0]);
        exit(1);
     }
 
+#ifdef HAVE_RES_SEARCH
     responses = getmxrecords(argv[1]);
-    if (responses == (struct mxentry *)NULL)
+    if (responses == (struct mxentry *)NULL) {
        puts("No MX records found");
-    else
+    } else {
        do {
            printf("%s %d\n", responses->name, responses->pref);
-       } while
-           ((++responses)->name);
+       } while ((++responses)->name);
+    }
+#else
+    puts("This program was compiled without HAS_RES_SEARCH and does nothing.");
+#endif
 
     return 0;
 }