From 4747f7076b243b679b41c262aeccdd4c9dfe6df1 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Tue, 13 Nov 2001 22:05:23 +0000 Subject: [PATCH] * Re-introduced the ability to enter IGnet mail into the system. --- citadel/ChangeLog | 4 +- citadel/citadel.h | 2 +- citadel/file_ops.c | 2 +- citadel/msgbase.c | 131 ++++++++++++++++++++------------------------- 4 files changed, 63 insertions(+), 76 deletions(-) diff --git a/citadel/ChangeLog b/citadel/ChangeLog index c540588ea..1c8ae9b47 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,4 +1,7 @@ $Log$ + Revision 580.73 2001/11/13 22:05:23 ajc + * Re-introduced the ability to enter IGnet mail into the system. + Revision 580.72 2001/10/29 22:59:22 ajc * Renamed "SuppMsgInfo" to "MetaData" because that's what it is @@ -2849,4 +2852,3 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant Fri Jul 10 1998 Art Cancro * Initial CVS import - diff --git a/citadel/citadel.h b/citadel/citadel.h index 74f088a06..df0c93639 100644 --- a/citadel/citadel.h +++ b/citadel/citadel.h @@ -201,7 +201,7 @@ struct quickroom { #define MES_ERROR (-1) /* Can't send message due to bad address */ #define MES_LOCAL 0 /* Local message, do no network processing */ #define MES_INTERNET 1 /* Convert msg and send as Internet mail */ -#define MES_BINARY 2 /* Process recipient and send via Cit net */ +#define MES_IGNET 2 /* Process recipient and send via Cit net */ /****************************************************************************/ diff --git a/citadel/file_ops.c b/citadel/file_ops.c index b414dcb07..ea998fca2 100644 --- a/citadel/file_ops.c +++ b/citadel/file_ops.c @@ -263,7 +263,7 @@ void cmd_netf(char *cmdbuf) } snprintf(buf, sizeof buf, "sysop@%s", destsys); e = alias(buf); - if (e != MES_BINARY) { + if (e != MES_IGNET) { cprintf("%d No such system: '%s'\n", ERROR + NO_SUCH_SYSTEM, destsys); return; diff --git a/citadel/msgbase.c b/citadel/msgbase.c index 149826d0a..2f5c10128 100644 --- a/citadel/msgbase.c +++ b/citadel/msgbase.c @@ -121,16 +121,24 @@ void remove_any_whitespace_to_the_left_or_right_of_at_symbol(char *name) int alias(char *name) { /* process alias and routing info for mail */ FILE *fp; - int a, b; - char aaa[300], bbb[300]; + int a, i; + char aaa[SIZ], bbb[SIZ]; + char *ignetcfg = NULL; + char *ignetmap = NULL; + int at = 0; + char node[SIZ]; + char testnode[SIZ]; + char buf[SIZ]; remove_any_whitespace_to_the_left_or_right_of_at_symbol(name); fp = fopen("network/mail.aliases", "r"); - if (fp == NULL) + if (fp == NULL) { fp = fopen("/dev/null", "r"); - if (fp == NULL) + } + if (fp == NULL) { return (MES_ERROR); + } strcpy(aaa, ""); strcpy(bbb, ""); while (fgets(aaa, sizeof aaa, fp) != NULL) { @@ -161,76 +169,53 @@ int alias(char *name) } /* determine local or remote type, see citadel.h */ - for (a = 0; a < strlen(name); ++a) - if (name[a] == '!') - return (MES_INTERNET); - for (a = 0; a < strlen(name); ++a) - if (name[a] == '@') - for (b = a; b < strlen(name); ++b) - if (name[b] == '.') - return (MES_INTERNET); - b = 0; - for (a = 0; a < strlen(name); ++a) - if (name[a] == '@') - ++b; - if (b > 1) { - lprintf(7, "Too many @'s in address\n"); - return (MES_ERROR); + + at = haschar(name, '@'); + if (at == 0) return(MES_LOCAL); /* no @'s - local address */ + if (at > 1) return(MES_ERROR); /* >1 @'s - invalid address */ + remove_any_whitespace_to_the_left_or_right_of_at_symbol(name); + + /* figure out the delivery mode */ + + extract_token(node, name, 1, '@'); + + /* If there are one or more dots in the nodename, we assume that it + * is an FQDN and will attempt SMTP delivery to the Internet. + */ + if (haschar(node, '.') > 0) { + return(MES_INTERNET); } - if (b == 1) { - for (a = 0; a < strlen(name); ++a) - if (name[a] == '@') - strcpy(bbb, &name[a + 1]); - while (bbb[0] == 32) - strcpy(bbb, &bbb[1]); - fp = fopen("network/mail.sysinfo", "r"); - if (fp == NULL) - return (MES_ERROR); -GETSN: do { - a = getstring(fp, aaa); - } while ((a >= 0) && (strcasecmp(aaa, bbb))); - a = getstring(fp, aaa); - if (!strncmp(aaa, "use ", 4)) { - strcpy(bbb, &aaa[4]); - fseek(fp, 0L, 0); - goto GETSN; + + /* Otherwise we look in the IGnet maps for a valid Citadel node. + * Try directly-connected nodes first... + */ + ignetcfg = CtdlGetSysConfig(IGNETCFG); + for (i=0; i 0) return(-1); /* Network mail - send a copy to the network program. */ - if ((strlen(recipient) > 0) && (mailtype == MES_BINARY)) { + if ((strlen(recipient) > 0) && (mailtype == MES_IGNET)) { lprintf(9, "Sending network spool\n"); sprintf(aaa, "./network/spoolin/netmail.%04lx.%04x.%04x", (long) getpid(), CC->cs_pid, ++seqnum); @@ -2069,8 +2054,8 @@ static struct CtdlMessage *make_message( /* Don't confuse the poor folks if it's not routed mail. */ strcpy(dest_node, ""); - /* If net_type is MES_BINARY, split out the destination node. */ - if (net_type == MES_BINARY) { + /* If net_type is MES_IGNET, split out the destination node. */ + if (net_type == MES_IGNET) { strcpy(dest_node, NODENAME); for (a = 0; a < strlen(recipient); ++a) { if (recipient[a] == '@') { -- 2.30.2