X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Finternet_addressing.c;fp=citadel%2Finternet_addressing.c;h=6c46199732e09ffdf555c06064dddc4b1fe9a535;hp=c19c4f82c827af43d706ef1288f5cd4700fa696d;hb=24f7a7da2a52df3e90dbdfd310fc1f2780cd3caf;hpb=1144dcb5c82e4360bc9dfd59d3125914ef5a4b6e diff --git a/citadel/internet_addressing.c b/citadel/internet_addressing.c index c19c4f82c..6c4619973 100644 --- a/citadel/internet_addressing.c +++ b/citadel/internet_addressing.c @@ -396,9 +396,7 @@ int expand_aliases(char *name, char *aliases) { int a; char aaa[SIZ]; int at = 0; - char node[64]; - syslog(LOG_DEBUG, "internet_addressing: \x1b[34mexpand_aliases(%s)\x1b[0m", name); if (aliases) { int num_aliases = num_tokens(aliases, '\n'); for (a=0; a to <%s>\x1b[0m", a, name, aaa); - if (!strcasecmp(name, aaa)) { + if ( (!IsEmptyStr(aaa)) && (!strcasecmp(name, aaa)) ) { syslog(LOG_DEBUG, "internet_addressing: global alias <%s> to <%s>", name, bar); strcpy(name, bar); } @@ -449,24 +446,17 @@ int expand_aliases(char *name, char *aliases) { } } - /* determine local or remote type, see citadel.h */ + /* Is this a local or remote recipient? */ at = haschar(name, '@'); - if (at == 0) return(EA_LOCAL); /* no @'s - local address */ - if (at > 1) return(EA_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, '@', sizeof node); - - /* 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(EA_INTERNET); + if (at == 0) { + return(EA_LOCAL); /* no @'s = local address */ + } + else if (at == 1) { + return(EA_INTERNET); /* one @ = internet address */ + } + else { + return(EA_ERROR); /* more than one @ = badly formed address */ } - - /* If we get to this point it's an invalid node name */ - return (EA_ERROR); } @@ -506,16 +496,15 @@ Array *split_recps(char *addresses) { Array *recipients_array = array_new(256); // no single recipient should be bigger than 256 bytes int num_addresses = num_tokens(a, ','); - syslog(LOG_DEBUG, "\x1b[35mEXTRACING: %d addresses from <%s>\x1b[0m", num_addresses, a); for (int i=0; i\x1b[0m", this_address); striplt(this_address); // strip leading and trailing whitespace stripout(this_address, '(', ')'); // remove any portion in parentheses stripallbut(this_address, '<', '>'); // if angle brackets are present, keep only what is inside them - syslog(LOG_DEBUG, "\x1b[35mPROCESSED: <%s>\x1b[0m", this_address); - array_append(recipients_array, this_address); + if (!IsEmptyStr(this_address)) { + array_append(recipients_array, this_address); + } } free(a); // We don't need this buffer anymore. @@ -545,8 +534,6 @@ struct recptypes *validate_recipients(char *supplied_recipients, const char *Rem char *org_recp; char this_recp[256]; - syslog(LOG_DEBUG, "internet_addressing: \x1b[32mvalidate_recipients(%s) \x1b[0m", supplied_recipients); - ret = (struct recptypes *) malloc(sizeof(struct recptypes)); // Initialize if (ret == NULL) return(NULL); memset(ret, 0, sizeof(struct recptypes)); // set all values to null/zero @@ -574,14 +561,17 @@ struct recptypes *validate_recipients(char *supplied_recipients, const char *Rem ret->display_recp[0] = 0; ret->recptypes_magic = RECPTYPES_MAGIC; - //char *aliases = CtdlGetSysConfig(GLOBAL_ALIASES); // First hit the Global Alias Table - char *aliases = strdup("root|admin,ajc@citadel.org,artcancro@gmail.com\n abuse|admin\n ajc|ajc@citadel.org\n"); + // char *aliases = CtdlGetSysConfig(GLOBAL_ALIASES); // First hit the Global Alias Table + // char *aliases = strdup("root|admin,ajc@citadel.org,artcancro@gmail.com\n abuse|admin\n ajc|ajc@citadel.org\n");//crashes + // char *aliases = strdup("root|admin,eeeeee@example.com\nabuse|admin\neek|blat\nwoiwozerosf|wow\n"); //works + // char *aliases = strdup("root|admin,ajc@citadel.org"); // works + // char *aliases = strdup("root|admin,eeeeee@example.com"); // works + // char *aliases = strdup("root|admin,eeeeeee@example.com"); // crashes + char *aliases = strdup("root|admin,ignatius.t.foobar@uncensored.citadel.org"); // crashes on the first try Array *recp_array = split_recps(supplied_recipients); int original_array_len = array_len(recp_array); - syslog(LOG_DEBUG, "\x1b[32moriginal_array_len=%d\x1b[0m", original_array_len); for (int r=0; r