X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Finternet_addressing.c;h=68daf88542c6e11b0dd974de5a195c91605a2045;hp=9f24a46ee390c4afa291baabb2858d9014378f03;hb=b9a2089d59579d13694e08b299c2aaf44ef9df6c;hpb=856af9cb4aea1fef52d5060adf215b0ff2dfd304 diff --git a/citadel/internet_addressing.c b/citadel/internet_addressing.c index 9f24a46ee..68daf8854 100644 --- a/citadel/internet_addressing.c +++ b/citadel/internet_addressing.c @@ -2,7 +2,7 @@ * This file contains functions which handle the mapping of Internet addresses * to users on the Citadel system. * - * Copyright (c) 1987-2020 by the citadel.org team + * Copyright (c) 1987-2021 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3. @@ -322,7 +322,7 @@ int CtdlHostAlias(char *fqdn) { */ int CtdlIsMe(char *addr, int addr_buf_len) { - recptypes *recp; + struct recptypes *recp; int i; recp = validate_recipients(addr, NULL, 0); @@ -375,17 +375,16 @@ void sanitize_truncated_recipient(char *str) * (What can I say, I'm in a weird mood today...) */ void remove_any_whitespace_to_the_left_or_right_of_at_symbol(char *name) { - unsigned int i; + char *ptr; + if (!name) return; - for (i = 0; i < strlen(name); ++i) { - if (name[i] == '@') { - while (isspace(name[i - 1]) && i > 0) { - strcpy(&name[i - 1], &name[i]); - --i; - } - while (isspace(name[i + 1])) { - strcpy(&name[i + 1], &name[i + 2]); - } + for (ptr=name; *ptr; ++ptr) { + while ( (isspace(*ptr)) && (*(ptr+1)=='@') ) { + strcpy(ptr, ptr+1); + if (ptr > name) --ptr; + } + while ( (*ptr=='@') && (*(ptr+1)!=0) && (isspace(*(ptr+1))) ) { + strcpy(ptr+1, ptr+2); } } } @@ -394,8 +393,7 @@ void remove_any_whitespace_to_the_left_or_right_of_at_symbol(char *name) { /* * Aliasing for network mail. */ -int alias(char *name) -{ /* process alias and routing info for mail */ +int alias(char *name) { /* process alias and routing info for mail */ int a; char aaa[SIZ]; int at = 0; @@ -458,9 +456,9 @@ int alias(char *name) * * Caller needs to free the result using free_recipients() */ -recptypes *validate_recipients(const char *supplied_recipients, const char *RemoteIdentifier, int Flags) { +struct recptypes *validate_recipients(const char *supplied_recipients, const char *RemoteIdentifier, int Flags) { struct CitContext *CCC = CC; - recptypes *ret; + struct recptypes *ret; char *recipients = NULL; char *org_recp; char this_recp[256]; @@ -479,11 +477,11 @@ recptypes *validate_recipients(const char *supplied_recipients, const char *Remo int in_quotes = 0; /* Initialize */ - ret = (recptypes *) malloc(sizeof(recptypes)); + ret = (struct recptypes *) malloc(sizeof(struct recptypes)); if (ret == NULL) return(NULL); /* Set all strings to null and numeric values to zero */ - memset(ret, 0, sizeof(recptypes)); + memset(ret, 0, sizeof(struct recptypes)); if (supplied_recipients == NULL) { recipients = strdup(""); @@ -571,8 +569,7 @@ recptypes *validate_recipients(const char *supplied_recipients, const char *Remo } strcat(ret->recp_room, this_recp); } - else if ( (!strncasecmp(this_recp, "room_", 5)) - && (!CtdlGetRoom(&tempQR, &this_recp_cooked[5])) ) { + else if ( (!strncasecmp(this_recp, "room_", 5)) && (!CtdlGetRoom(&tempQR, &this_recp_cooked[5])) ) { /* Save room so we can restore it later */ tempQR2 = CCC->room; @@ -698,7 +695,7 @@ recptypes *validate_recipients(const char *supplied_recipients, const char *Remo /* * Destructor for recptypes */ -void free_recipients(recptypes *valid) { +void free_recipients(struct recptypes *valid) { if (valid == NULL) { return; @@ -722,8 +719,7 @@ void free_recipients(recptypes *valid) { } -char *qp_encode_email_addrs(char *source) -{ +char *qp_encode_email_addrs(char *source) { char *user, *node, *name; const char headerStr[] = "=?UTF-8?Q?"; char *Encoded; @@ -758,20 +754,19 @@ char *qp_encode_email_addrs(char *source) free (AddrPtr), AddrPtr = ptr; ptr = (long *) malloc(sizeof (long) * nAddrPtrMax * 2); - memset(&ptr[nAddrPtrMax], 0, - sizeof (long) * nAddrPtrMax); + memset(&ptr[nAddrPtrMax], 0, sizeof (long) * nAddrPtrMax); memcpy (ptr, AddrUtf8, sizeof (long) * nAddrPtrMax); free (AddrUtf8), AddrUtf8 = ptr; nAddrPtrMax *= 2; } - if (((unsigned char) source[i] < 32) || - ((unsigned char) source[i] > 126)) { + if (((unsigned char) source[i] < 32) || ((unsigned char) source[i] > 126)) { need_to_encode = 1; AddrUtf8[nColons] = 1; } - if (source[i] == '"') + if (source[i] == '"') { InQuotes = !InQuotes; + } if (!InQuotes && source[i] == ',') { AddrPtr[nColons] = i; nColons++; @@ -801,28 +796,19 @@ char *qp_encode_email_addrs(char *source) for (i = 0; i < nColons && nPtr != NULL; i++) { nmax = EncodedMaxLen - (nPtr - Encoded); if (AddrUtf8[i]) { - process_rfc822_addr(&source[AddrPtr[i]], - user, - node, - name); + process_rfc822_addr(&source[AddrPtr[i]], user, node, name); /* TODO: libIDN here ! */ if (IsEmptyStr(name)) { - n = snprintf(nPtr, nmax, - (i==0)?"%s@%s" : ",%s@%s", - user, node); + n = snprintf(nPtr, nmax, (i==0)?"%s@%s" : ",%s@%s", user, node); } else { EncodedName = rfc2047encode(name, strlen(name)); - n = snprintf(nPtr, nmax, - (i==0)?"%s <%s@%s>" : ",%s <%s@%s>", - EncodedName, user, node); + n = snprintf(nPtr, nmax, (i==0)?"%s <%s@%s>" : ",%s <%s@%s>", EncodedName, user, node); free(EncodedName); } } else { - n = snprintf(nPtr, nmax, - (i==0)?"%s" : ",%s", - &source[AddrPtr[i]]); + n = snprintf(nPtr, nmax, (i==0)?"%s" : ",%s", &source[AddrPtr[i]]); } if (n > 0 ) nPtr += n; @@ -884,8 +870,7 @@ void unfold_rfc822_field(char **field, char **FieldEnd) else { if (*sField=='\"') quote = 1 - quote; if (!quote) { - if (isspace(*sField)) - { + if (isspace(*sField)) { *pField = ' '; pField++; sField++; @@ -909,8 +894,7 @@ void unfold_rfc822_field(char **field, char **FieldEnd) * Split an RFC822-style address into userid, host, and full name * */ -void process_rfc822_addr(const char *rfc822, char *user, char *node, char *name) -{ +void process_rfc822_addr(const char *rfc822, char *user, char *node, char *name) { int a; strcpy(user, ""); @@ -1005,7 +989,6 @@ void process_rfc822_addr(const char *rfc822, char *user, char *node, char *name) ) { strcpy(node, CtdlGetConfigStr("c_nodename")); } - else { /* strip anything to the left of a @ */ @@ -1418,7 +1401,8 @@ void directory_key(char *key, char *addr) { } -/* Return nonzero if the supplied address is in one of "our" domains +/* + * Return nonzero if the supplied address is in one of "our" domains */ int IsDirectory(char *addr, int allow_masq_domains) { char domain[256]; @@ -1670,7 +1654,7 @@ void AutoGenerateEmailAddressForUser(struct ctdluser *user) snprintf(synthetic_email_addr, sizeof synthetic_email_addr, "ctdl%08x@%s", i, CtdlGetConfigStr("c_fqdn")); } u = CtdlDirectoryLookup(NULL, synthetic_email_addr, 0); - syslog(LOG_DEBUG, "\033[33mAddress <%s> lookup <%d>\033[0m", synthetic_email_addr, u); + syslog(LOG_DEBUG, "user_ops: address <%s> lookup returned <%d>", synthetic_email_addr, u); } CtdlSetEmailAddressesForUser(user->fullname, synthetic_email_addr);