]> code.citadel.org Git - citadel.git/blobdiff - citadel/domain.c
* Changed the comments at the beginning of each file to a consistent format
[citadel.git] / citadel / domain.c
index 0f61f4a4488ae5e4ead29d8e25148a3e84bc9049..265fce1dffab3ec7f4f9a2a8d52c5ba78e41b47f 100644 (file)
@@ -1,3 +1,10 @@
+/*
+ * $Id$
+ *
+ * DNS lookup for SMTP sender
+ *
+ */
+
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
@@ -8,8 +15,43 @@
 #include "citadel.h"
 #include "domain.h"
 #include "server.h"
+#include "tools.h"
+#include "internet_addressing.h"
+
+
+/*
+ * get_smarthosts() checks the Internet configuration for "smarthost"
+ * entries and returns them in the same format as getmx() does -- fill the
+ * buffer with a delimited list of hosts and return the number of hosts.
+ */
+int get_smarthosts(char *mxbuf) {
+       int config_lines;
+       int i;
+       char buf[256];
+       char host[256], type[256];
+       int total_smarthosts = 0;
+
+       if (inetcfg == NULL) return(0);
+       strcpy(mxbuf, "");
+
+       config_lines = num_tokens(inetcfg, '\n');
+       for (i=0; i<config_lines; ++i) {
+               extract_token(buf, inetcfg, i, '\n');
+               extract_token(host, buf, 0, '|');
+               extract_token(type, buf, 1, '|');
+
+               if (!strcasecmp(type, "smarthost")) {
+                       strcat(mxbuf, host);
+                       strcat(mxbuf, "|");
+                       ++total_smarthosts;
+               }
+       }
+
+       return(total_smarthosts);
+}
+
+
 
-#define SMART_HOST     "gatekeeper.wdcs.com"
 
 /*
  * sort_mxrecs()
@@ -55,22 +97,21 @@ int getmx(char *mxbuf, char *dest) {
        unsigned char *startptr, *endptr, *ptr;
        char expanded_buf[1024];
        unsigned short pref, type;
-       int n;
+       int n = 0;
        HEADER *hp;
        int qdcount;
 
        struct mx *mxrecs = NULL;
        int num_mxrecs = 0;
-
+       
        /* If we're configured to send all mail to a smart-host, then our
         * job here is really easy.
         */
-       if (0) {        /* FIX */
-               strcpy(mxbuf, SMART_HOST);
-               return(1);
-       }
+       n = get_smarthosts(mxbuf);
+       if (n > 0) return(n);
 
-       /* No smart-host?  Look up the best MX for a site.
+       /*
+        * No smart-host?  Look up the best MX for a site.
         */
        ret = res_query(
                dest,