* The VRFY and EXPN commands have been removed from this implementation
* because nobody uses these commands anymore, except for spammers.
*
- * Copyright (c) 1998-2012 by the citadel.org team
+ * Copyright (c) 1998-2017 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.
- *
- *
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * 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.
*
- *
- *
- *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*/
#include "sysdep.h"
#include "ctdl_module.h"
#include "smtp_util.h"
+#include "smtpqueue.h"
+#include "smtp_clienthandlers.h"
const char *smtp_get_Recipients(void)
{
time_t submitted = 0L;
struct CtdlMessage *bmsg = NULL;
int give_up = 0;
- struct recptypes *valid;
+ recptypes *valid;
int successful_bounce = 0;
static int seq = 0;
StrBuf *BounceMB;
long omsgid = (-1);
- syslog(LOG_DEBUG, "smtp_do_bounce() called\n");
+ syslog(LOG_DEBUG, "smtp_do_bounce() called");
strcpy(bounceto, "");
boundary = NewStrBufPlain(HKEY("=_Citadel_Multipart_"));
- StrBufAppendPrintf(boundary,
- "%s_%04x%04x",
- config.c_fqdn,
- getpid(),
- ++seq);
+ StrBufAppendPrintf(boundary, "%s_%04x%04x", CtdlGetConfigStr("c_fqdn"), getpid(), ++seq);
lines = num_tokens(instr, '\n');
bmsg->cm_magic = CTDLMESSAGE_MAGIC;
bmsg->cm_anon_type = MES_NORMAL;
bmsg->cm_format_type = FMT_RFC822;
- bmsg->cm_fields[eAuthor] = strdup("Citadel");
- bmsg->cm_fields[eOriginalRoom] = strdup(MAILROOM);
- bmsg->cm_fields[eNodeName] = strdup(config.c_nodename);
- bmsg->cm_fields[eMsgSubject] = strdup("Delivery Status Notification (Failure)");
- StrBufAppendBufPlain(
- BounceMB,
- HKEY("Content-type: multipart/mixed; boundary=\""), 0);
+ CM_SetField(bmsg, eAuthor, HKEY("Citadel"));
+ CM_SetField(bmsg, eOriginalRoom, HKEY(MAILROOM));
+ CM_SetField(bmsg, eNodeName, CtdlGetConfigStr("c_nodename"), strlen(CtdlGetConfigStr("c_nodename")));
+ CM_SetField(bmsg, eMsgSubject, HKEY("Delivery Status Notification (Failure)"));
+ StrBufAppendBufPlain(BounceMB, HKEY("Content-type: multipart/mixed; boundary=\""), 0);
StrBufAppendBuf(BounceMB, boundary, 0);
StrBufAppendBufPlain(BounceMB, HKEY("\"\r\n"), 0);
StrBufAppendBufPlain(BounceMB, HKEY("MIME-Version: 1.0\r\n"), 0);
dsnlen = extract_token(dsn, buf, 3, '|', sizeof dsn);
bounce_this = 0;
- syslog(LOG_DEBUG, "key=<%s> addr=<%s> status=%d dsn=<%s>\n",
- key, addr, status, dsn);
+ syslog(LOG_DEBUG, "key=<%s> addr=<%s> status=%d dsn=<%s>", key, addr, status, dsn);
if (!strcasecmp(key, "bounceto")) {
strcpy(bounceto, addr);
MT_RFC822,
HEADERS_ALL,
0, 1, NULL, 0,
- NULL, NULL);
+ NULL, NULL, NULL);
StrBufAppendBuf(BounceMB, CC->redirect_buffer, 0);
FreeStrBuf(&CC->redirect_buffer);
StrBufAppendBufPlain(BounceMB, HKEY("--"), 0);
StrBufAppendBuf(BounceMB, boundary, 0);
StrBufAppendBufPlain(BounceMB, HKEY("--\r\n"), 0);
- if (bmsg->cm_fields[eAuthor] != NULL)
- free(bmsg->cm_fields[eAuthor]);
- bmsg->cm_fields[eAuthor] = SmashStrBuf(&BounceMB);
+ CM_SetAsFieldSB(bmsg, eMesageText, &BounceMB);
+
/* Deliver the bounce if there's anything worth mentioning */
- syslog(LOG_DEBUG, "num_bounces = %d\n", num_bounces);
+ syslog(LOG_DEBUG, "num_bounces = %d", num_bounces);
if (num_bounces > 0) {
/* First try the user who sent the message */
- if (IsEmptyStr(bounceto))
- syslog(LOG_ERR, "No bounce address specified\n");
- else
- syslog(LOG_DEBUG, "bounce to user <%s>\n", bounceto);
+ if (IsEmptyStr(bounceto)) {
+ syslog(LOG_ERR, "No bounce address specified");
+ }
+ else {
+ syslog(LOG_DEBUG, "bounce to user <%s>", bounceto);
+ }
/* Can we deliver the bounce to the original sender? */
valid = validate_recipients(bounceto,
smtp_get_Recipients (),
/* If not, post it in the Aide> room */
if (successful_bounce == 0) {
- CtdlSubmitMsg(bmsg, NULL, config.c_aideroom, QP_EADDR);
+ CtdlSubmitMsg(bmsg, NULL, CtdlGetConfigStr("c_aideroom"), QP_EADDR);
}
/* Free up the memory we used */
}
}
FreeStrBuf(&boundary);
- CtdlFreeMessage(bmsg);
- syslog(LOG_DEBUG, "Done processing bounces\n");
+ CM_Free(bmsg);
+ syslog(LOG_DEBUG, "Done processing bounces");
}