*/
void smtps_greeting(void) {
CtdlModuleStartCryptoMsgs(NULL, NULL, NULL);
+ if (!CC->redirect_ssl) CC->kill_me = 1; /* kill session if no crypto */
smtp_greeting(0);
}
SMTP->command_state = smtp_command;
- if (strlen(ident) > 0) {
+ if (!IsEmptyStr(ident)) {
result = CtdlLoginExistingUser(user, ident);
}
else {
char node[SIZ];
char name[SIZ];
- if (strlen(SMTP->from) != 0) {
+ if (!IsEmptyStr(SMTP->from)) {
cprintf("503 5.1.0 Only one sender permitted\r\n");
return;
}
* address so we don't have to contend with the empty string causing
* other code to fail when it's expecting something there.
*/
- if (strlen(SMTP->from) == 0) {
+ if (IsEmptyStr(SMTP->from)) {
strcpy(SMTP->from, "someone@somewhere.org");
}
char message_to_spammer[SIZ];
struct recptypes *valid = NULL;
- if (strlen(SMTP->from) == 0) {
+ if (IsEmptyStr(SMTP->from)) {
cprintf("503 5.5.1 Need MAIL before RCPT\r\n");
return;
}
}
cprintf("250 2.1.5 RCPT ok <%s>\r\n", recp);
- if (strlen(SMTP->recipients) > 0) {
+ if (!IsEmptyStr(SMTP->recipients)) {
strcat(SMTP->recipients, ",");
}
strcat(SMTP->recipients, recp);
int i;
char result[SIZ];
- if (strlen(SMTP->from) == 0) {
+ if (IsEmptyStr(SMTP->from)) {
cprintf("503 5.5.1 Need MAIL command first.\r\n");
return;
}
if (!strncasecmp(buf, "From:", 5)) {
safestrncpy(mailfrom, &buf[5], sizeof mailfrom);
striplt(mailfrom);
- for (i=0; i<strlen(mailfrom); ++i) {
+ for (i=0; mailfrom[i]; ++i) {
if (!isprint(mailfrom[i])) {
strcpy(&mailfrom[i], &mailfrom[i+1]);
i=0;
/* Strip out parenthesized names */
lp = (-1);
rp = (-1);
- for (i=0; i<strlen(mailfrom); ++i) {
+ for (i=0; mailfrom[i]; ++i) {
if (mailfrom[i] == '(') lp = i;
if (mailfrom[i] == ')') rp = i;
}
/* Prefer brokketized names */
lp = (-1);
rp = (-1);
- for (i=0; i<strlen(mailfrom); ++i) {
+ for (i=0; mailfrom[i]; ++i) {
if (mailfrom[i] == '<') lp = i;
if (mailfrom[i] == '>') rp = i;
}
scan_done = 1;
}
} while (scan_done == 0);
- if (strlen(mailfrom)==0) strcpy(mailfrom, "someone@somewhere.org");
+ if (IsEmptyStr(mailfrom)) strcpy(mailfrom, "someone@somewhere.org");
stripallbut(mailfrom, '<', '>');
/* Figure out what mail exchanger host we have to connect to */
}
/* Do an AUTH command if necessary */
- if (strlen(mx_user) > 0) {
+ if (!IsEmptyStr(mx_user)) {
char encoded[1024];
sprintf(buf, "%s%c%s%c%s", mx_user, '\0', mx_user, '\0', mx_pass);
CtdlEncodeBase64(encoded, buf, strlen(mx_user) + strlen(mx_user) + strlen(mx_pass) + 2);
/* First try the user who sent the message */
lprintf(CTDL_DEBUG, "bounce to user? <%s>\n", bounceto);
- if (strlen(bounceto) == 0) {
+ if (IsEmptyStr(bounceto)) {
lprintf(CTDL_ERR, "No bounce address specified\n");
bounce_msgid = (-1L);
}
-
+const char *CitadelServiceSMTP_MTA="SMTP-MTA";
+const char *CitadelServiceSMTPS_MTA="SMTPs-MTA";
+const char *CitadelServiceSMTP_MSA="SMTP-MSA";
+const char *CitadelServiceSMTP_LMTP="LMTP";
+const char *CitadelServiceSMTP_LMTP_UNF="LMTP-UnF";
CTDL_MODULE_INIT(smtp)
{
NULL,
smtp_mta_greeting,
smtp_command_loop,
- NULL);
+ NULL,
+ CitadelServiceSMTP_MTA);
#ifdef HAVE_OPENSSL
CtdlRegisterServiceHook(config.c_smtps_port,
NULL,
smtps_greeting,
smtp_command_loop,
- NULL);
+ NULL,
+ CitadelServiceSMTPS_MTA);
#endif
CtdlRegisterServiceHook(config.c_msa_port, /* SMTP MSA */
NULL,
smtp_msa_greeting,
smtp_command_loop,
- NULL);
+ NULL,
+ CitadelServiceSMTP_MSA);
CtdlRegisterServiceHook(0, /* local LMTP */
file_lmtp_socket,
lmtp_greeting,
smtp_command_loop,
- NULL);
+ NULL,
+ CitadelServiceSMTP_LMTP);
CtdlRegisterServiceHook(0, /* local LMTP */
file_lmtp_unfiltered_socket,
lmtp_unfiltered_greeting,
smtp_command_loop,
- NULL);
+ NULL,
+ CitadelServiceSMTP_LMTP_UNF);
smtp_init_spoolout();
CtdlRegisterSessionHook(smtp_do_queue, EVT_TIMER);