From: Wilfried Goesgens Date: Thu, 19 Jul 2012 21:19:23 +0000 (+0200) Subject: SMTP-Server: check whether the user is allowed to use the email address; if not fail... X-Git-Tag: v8.20~306 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=fb862a2894f01c5fb6144ec781f188445c13c7f1 SMTP-Server: check whether the user is allowed to use the email address; if not fail (550) completely. and syslog. --- diff --git a/citadel/modules/smtp/serv_smtp.c b/citadel/modules/smtp/serv_smtp.c index cc026916d..e5e066328 100644 --- a/citadel/modules/smtp/serv_smtp.c +++ b/citadel/modules/smtp/serv_smtp.c @@ -691,6 +691,30 @@ void smtp_data(void) { * is read with a Citadel client. */ if ( (CC->logged_in) && (config.c_rfc822_strict_from == 0) ) { + int validemail = 0; + + if (!IsEmptyStr(CC->cs_inet_email) && + !IsEmptyStr(msg->cm_fields['F'])) + validemail = strcmp(CC->cs_inet_email, msg->cm_fields['F']) == 0; + if ((!validemail) && + (!IsEmptyStr(CC->cs_inet_other_emails))) + { + int num_secondary_emails = 0; + int i; + num_secondary_emails = num_tokens(CC->cs_inet_other_emails, '|'); + for (i=0; ics_inet_other_emails,i,'|',sizeof CC->cs_inet_other_emails); + validemail = strcmp(buf, msg->cm_fields['F']) == 0; + } + } + if (!validemail) { + syslog(LOG_ERR, "rejecting email because of invalid sender: %s\n", msg->cm_fields['F']); + cprintf("550 fix your mail client config; this is not you!.\r\n"); + return; + + } + if (msg->cm_fields['A'] != NULL) free(msg->cm_fields['A']); if (msg->cm_fields['N'] != NULL) free(msg->cm_fields['N']); if (msg->cm_fields['H'] != NULL) free(msg->cm_fields['H']);