X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fnetwork%2Fserv_network.c;h=7955f5a2eb935ebe4b16336c2f0d51a9653a9a36;hb=e26a8dee20d1726b4995821f717f867f50fc5659;hp=e0cc3280ba040a0c4f397c142339ab6721524a74;hpb=d022f9788ab6291347df2ea2b353880afb4637dd;p=citadel.git diff --git a/citadel/modules/network/serv_network.c b/citadel/modules/network/serv_network.c index e0cc3280b..7955f5a2e 100644 --- a/citadel/modules/network/serv_network.c +++ b/citadel/modules/network/serv_network.c @@ -494,7 +494,6 @@ void network_deliver_digest(SpoolControl *sc) { long msglen; char *recps = NULL; size_t recps_len = SIZ; - size_t siz; struct recptypes *valid; namelist *nptr; char bounce_to[256]; @@ -541,7 +540,7 @@ void network_deliver_digest(SpoolControl *sc) { msg->cm_fields['M'] = malloc(msglen + 1); fseek(sc->digestfp, 0L, SEEK_SET); - siz = fread(msg->cm_fields['M'], (size_t)msglen, 1, sc->digestfp); + fread(msg->cm_fields['M'], (size_t)msglen, 1, sc->digestfp); msg->cm_fields['M'][msglen] = '\0'; fclose(sc->digestfp); @@ -653,7 +652,6 @@ void network_spool_msg(long msgnum, void *userdata) { SpoolControl *sc; int i; char *newpath = NULL; - size_t instr_len = SIZ; struct CtdlMessage *msg = NULL; namelist *nptr; maplist *mptr; @@ -672,15 +670,15 @@ void network_spool_msg(long msgnum, void *userdata) { /* * Process mailing list recipients */ - instr_len = SIZ; if (sc->listrecps != NULL) { /* Fetch the message. We're going to need to modify it * in order to insert the [list name] in it, etc. */ msg = CtdlFetchMessage(msgnum, 1); if (msg != NULL) { - int len, rlen; + int rlen; char *pCh; + StrBuf *Subject, *FlatSubject; if (msg->cm_fields['V'] == NULL){ /* local message, no enVelope */ @@ -709,48 +707,53 @@ void network_spool_msg(long msgnum, void *userdata) { /* Prepend "[List name]" to the subject */ if (msg->cm_fields['U'] == NULL) { - msg->cm_fields['U'] = strdup("(no subject)"); + Subject = NewStrBufPlain(HKEY("(no subject)")); } - - len = strlen(msg->cm_fields['U']); + else { + Subject = NewStrBufPlain(msg->cm_fields['U'], -1); + } + FlatSubject = NewStrBufPlain(NULL, StrLength(Subject)); + StrBuf_RFC822_to_Utf8(FlatSubject, Subject, NULL, NULL); + rlen = strlen(CC->room.QRname); - pCh = strstr(msg->cm_fields['U'], CC->room.QRname); + pCh = strstr(ChrPtr(FlatSubject), CC->room.QRname); if ((pCh == NULL) || (*(pCh + rlen) != ']') || - (pCh == msg->cm_fields['U']) || + (pCh == ChrPtr(FlatSubject)) || (*(pCh - 1) != '[') ) { - char *pBuff; - - rlen += len + 4; - pBuff = malloc (rlen * sizeof(char)); - - snprintf(pBuff, rlen, "[%s] %s", CC->room.QRname, msg->cm_fields['U']); - free(msg->cm_fields['U']); - msg->cm_fields['U'] = pBuff; + StrBuf *tmp; + StrBufPlain(Subject, HKEY("[")); + StrBufAppendBufPlain(Subject, CC->room.QRname, rlen, 0); + StrBufAppendBufPlain(Subject, HKEY("] "), 0); + StrBufAppendBuf(Subject, FlatSubject, 0); + tmp = Subject; Subject = FlatSubject; FlatSubject = tmp; /* so we can free the right one... */ + StrBufRFC2047encode(&Subject, FlatSubject); } - /* else we won't modify the buffer, since the roomname is already here. */ + + if (msg->cm_fields['U'] != NULL) + free (msg->cm_fields['U']); + msg->cm_fields['U'] = SmashStrBuf(&Subject); - rlen += len + 4; - pBuff = malloc (rlen * sizeof(char)); + FreeStrBuf(&FlatSubject); - snprintf(pBuff, rlen, "[%s] %s", CC->room.QRname, msg->cm_fields['U']); - free(msg->cm_fields['U']); - msg->cm_fields['U'] = pBuff; - } /* else we won't modify the buffer, since the roomname is already here. */ - /* if we don't already have a 'reply to' field, put our roomname in. */ - if (msg->cm_fields['K'] == NULL) { - msg->cm_fields['K'] = malloc(256); - snprintf(msg->cm_fields['K'], 256, - "room_%s@%s", CC->room.QRname, - config.c_fqdn); - for (i=0; msg->cm_fields['K'][i]; ++i) { - if (isspace(msg->cm_fields['K'][i])) { - msg->cm_fields['K'][i] = '_'; - } + /* Set the recipient of the list message to the + * email address of the room itself. + * FIXME ... I want to be able to pick any address + */ + if (msg->cm_fields['R'] != NULL) { + free(msg->cm_fields['R']); + } + msg->cm_fields['R'] = malloc(256); + snprintf(msg->cm_fields['R'], 256, + "room_%s@%s", CC->room.QRname, + config.c_fqdn); + for (i=0; msg->cm_fields['R'][i]; ++i) { + if (isspace(msg->cm_fields['R'][i])) { + msg->cm_fields['R'][i] = '_'; } } @@ -804,7 +807,6 @@ void network_spool_msg(long msgnum, void *userdata) { /* * Process client-side list participations for this room */ - instr_len = SIZ; if (sc->participates != NULL) { msg = CtdlFetchMessage(msgnum, 1); if (msg != NULL) { @@ -2445,7 +2447,7 @@ void cmd_netp(char *cmdbuf) "An unknown Citadel server called \"%s\" attempted to connect from %s [%s].\n", node, CC->cs_host, CC->cs_addr ); - syslog(LOG_WARNING, err_buf); + syslog(LOG_WARNING, "%s", err_buf); cprintf("%d authentication failed\n", ERROR + PASSWORD_REQUIRED); CtdlAideMessage(err_buf, "IGNet Networking."); return; @@ -2456,7 +2458,7 @@ void cmd_netp(char *cmdbuf) "A Citadel server at %s [%s] failed to authenticate as network node \"%s\".\n", CC->cs_host, CC->cs_addr, node ); - syslog(LOG_WARNING, err_buf); + syslog(LOG_WARNING, "%s", err_buf); cprintf("%d authentication failed\n", ERROR + PASSWORD_REQUIRED); CtdlAideMessage(err_buf, "IGNet Networking."); return;