* Made the <.ASI> command a bit friendlier.
authorArt Cancro <ajc@citadel.org>
Fri, 18 Feb 2000 05:10:50 +0000 (05:10 +0000)
committerArt Cancro <ajc@citadel.org>
Fri, 18 Feb 2000 05:10:50 +0000 (05:10 +0000)
* SMTP sender now pays attention to "smarthost" entries in the system's
  Internet configuration, using them if one or more is present.

citadel/ChangeLog
citadel/domain.c
citadel/domain.h
citadel/msgbase.c
citadel/routines2.c

index b32753cc2c77ecdbed8416c883d0e93e578342a3..388dac6b4a7b5509422bc21baa3a2a9f4f1953c4 100644 (file)
@@ -1,4 +1,9 @@
 $Log$
+Revision 1.463  2000/02/18 05:10:50  ajc
+* Made the <.ASI> command a bit friendlier.
+* SMTP sender now pays attention to "smarthost" entries in the system's
+  Internet configuration, using them if one or more is present.
+
 Revision 1.462  2000/02/17 05:27:39  ajc
 * Got the "MAIL From:" command sending the correct data.  (unnnhhhhnnhhhh...)
 
@@ -1635,3 +1640,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncnsrd.mt-kisco.ny.us>
        * Initial CVS import 
+
index 0f61f4a4488ae5e4ead29d8e25148a3e84bc9049..129b2efa34aef5ce64d85a5fd6eeaca7ae915b47 100644 (file)
@@ -8,8 +8,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 +90,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,
index b209417251af671591ca1d97d16e2dfd77397500..d81060421aa583724e021bd04011642315e3b939 100644 (file)
@@ -4,4 +4,5 @@ struct mx {
        char host[1024];
 };
 
+int get_smarthosts(char *mxbuf);
 int getmx(char *mxbuf, char *dest);
index 107dcccffda2d5f34e02e43ffebe6f76e191c6b5..067d4e28c3209faf5fd43a86d9d997af86591e37 100644 (file)
@@ -1003,7 +1003,7 @@ int CtdlOutputMsg(long msg_num,           /* message number (local) to fetch */
                if (do_proto) cprintf("text\n");
        if (mode == MT_RFC822) {
                if (TheMessage->cm_fields['U'] == NULL) {
-                       cprintf("Subject: FIX bogus subject FIX%s", nl);
+                       cprintf("Subject: (no subject)%s", nl);
                }
                cprintf("%s", nl);
        }
index 4e43f3119a23c53c53b2f23ae7fc95de55debb16..23537c9b390629d3f371aa48c7a2173e2ad48de6 100644 (file)
@@ -746,6 +746,27 @@ void do_system_configuration(void)
 }
 
 
+/*
+ * support function for do_internet_configuration()
+ */
+void get_inet_rec_type(char *buf) {
+       int sel;
+
+       keyopt(" <1> localhost       (Alias for this computer)\n");
+       keyopt(" <2> gateway domain  (Domain for all Citadel systems)\n");
+       keyopt(" <3> smart-host      (Forward all outbound mail to this host)\n");
+       sel = intprompt("Which one", 1, 1, 3);
+       switch(sel) {
+               case 1: strcpy(buf, "localhost");
+                       return;
+               case 2: strcpy(buf, "gatewaydomain");
+                       return;
+               case 3: strcpy(buf, "smarthost");
+                       return;
+       }
+}
+
+
 /*
  * Internet mail configuration
  */
@@ -809,8 +830,7 @@ void do_internet_configuration(void) {
                                        newprompt("Enter host name: ",
                                                buf, 50);
                                        strcat(buf, "|");
-                                       newprompt("Enter record type: ",
-                                               &buf[strlen(buf)], 20);
+                                       get_inet_rec_type(&buf[strlen(buf)]);
                                        recs[num_recs-1] = strdup(buf);
                                        break;
                                case 'd':