]> Pileus Git - ~andy/fetchmail/blobdiff - mxget.c
Clarify Maillennium workaround warning even more (...instead of TOP).
[~andy/fetchmail] / mxget.c
diff --git a/mxget.c b/mxget.c
index 42ab26fb7a24f0b47cfa231b8fa2b65cf830f541..30f2a287a1e63bbac9aabe4614026ff59d72c34e 100644 (file)
--- a/mxget.c
+++ b/mxget.c
@@ -1,18 +1,32 @@
 /*
  * mxget.c -- fetch MX records for given DNS name
  *
- * Copyright 1996 by Eric S. Raymond
- * All rights reserved.
+ * Copyright 1997 by Eric S. Raymond
  * For license terms, see the file COPYING in this directory.
  */
 
 #include "config.h"
+#include <stdio.h>
 #ifdef HAVE_RES_SEARCH
+#include <string.h>
+#ifdef HAVE_NET_SOCKET_H
+#include <net/socket.h>
+#endif
 #include <netdb.h>
 #include <sys/types.h>
 #include <netinet/in.h>
+
+#ifdef __BEOS__
+#include "beos/beos_nameser.h"
+#endif
+
+#ifdef HAVE_ARPA_NAMESER_H
 #include <arpa/nameser.h>
+#endif
+#ifdef HAVE_RESOLV_H
 #include <resolv.h>
+#endif
+
 #include "mx.h"
 
 /*
@@ -43,7 +57,7 @@
 struct mxentry *getmxrecords(const char *name)
 /* get MX records for given host */
 {
-    unsigned char answer[PACKETSZ], *eom, *cp, *bp;
+    char answer[PACKETSZ], *eom, *cp, *bp;
     int n, ancount, qdcount, buflen, type, pref, ind;
     static struct mxentry pmx[(PACKETSZ - HFIXEDSZ) / MIN_MX_SIZE];
     static char MXHostBuf[PACKETSZ - HFIXEDSZ]; 
@@ -51,9 +65,11 @@ struct mxentry *getmxrecords(const char *name)
 
     pmx->name = (char *)NULL;
     pmx->pref = -1;
-    n = res_search(name,C_IN,T_MX,(unsigned char*)&answer, sizeof(answer));
+    n = res_search(name, C_IN,T_MX, (unsigned char *)&answer, sizeof(answer));
     if (n == -1)
        return((struct mxentry *)NULL);
+    if (n > sizeof(answer))
+       n = sizeof(answer);     
 
     hp = (HEADER *)&answer;
     cp = answer + HFIXEDSZ;
@@ -88,7 +104,7 @@ struct mxentry *getmxrecords(const char *name)
        pmx[ind].pref = pref;
        ++ind;
 
-       n = strlen(bp);
+       n = strlen((const char *)bp);
        bp += n;
        *bp++ = '\0';
 
@@ -101,20 +117,33 @@ struct mxentry *getmxrecords(const char *name)
 }
 #endif /* HAVE_RES_SEARCH */
 
-#ifdef TESTMAIN
-main(int argc, char *argv[])
+#ifdef STANDALONE
+#include <stdlib.h>
+
+int main(int argc, char *argv[])
 {
     int        count, i;
     struct mxentry *responses;
 
+    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;
 }
 #endif /* TESTMAIN */