Skip to content
Snippets Groups Projects
Commit f9cde90e authored by rswindell's avatar rswindell
Browse files

Better handling of pass-through external mail processors.

Now using a local-scope variable for temporary mailproc pointer.
Log a warning when external mail processor creates an error drop file.
parent cc535fba
No related branches found
No related tags found
No related merge requests found
......@@ -2635,55 +2635,51 @@ static void smtp_thread(void* arg)
SAFEPRINTF2(proc_err_fname,"%sSBBS_SMTP.%s.err", scfg.temp_dir, session_id);
remove(proc_err_fname);
for(i=0;i<mailproc_count;i++) {
mailproc=&mailproc_list[i];
if(mailproc->disabled)
for(i=0;i<mailproc_count && !msg_handled;i++) {
struct mailproc* mp=&mailproc_list[i];
if(mp->disabled)
continue;
if(!mailproc->process_dnsbl && dnsbl_result.s_addr)
if(!mp->process_dnsbl && dnsbl_result.s_addr)
continue;
if(!mailproc->process_spam && spam_bait_result)
if(!mp->process_spam && spam_bait_result)
continue;
if(!chk_ar(&scfg,mailproc->ar,&relay_user,&client))
if(!chk_ar(&scfg,mp->ar,&relay_user,&client))
continue;
if(mailproc->to!=NULL && !mailproc_to_match[i])
if(mp->to!=NULL && !mailproc_to_match[i])
continue;
if(mailproc->from!=NULL
&& !findstr_in_list(sender_addr, mailproc->from))
if(mp->from!=NULL
&& !findstr_in_list(sender_addr, mp->from))
continue;
if(!mailproc->passthru)
msg_handled=TRUE;
mailcmdstr(mailproc->cmdline
mailcmdstr(mp->cmdline
,msgtxt_fname, newtxt_fname, logtxt_fname
,rcptlst_fname, proc_err_fname
,host_name, host_ip, relay_user.number
,rcpt_addr
,sender, sender_addr, reverse_path, str);
lprintf(LOG_INFO,"%04d SMTP Executing external mail processor: %s"
,socket, mailproc->name);
,socket, mp->name);
if(mailproc->native) {
if(mp->native) {
lprintf(LOG_DEBUG,"%04d SMTP Executing external command: %s"
,socket, str);
if((j=system(str))!=0) {
lprintf(LOG_NOTICE,"%04d SMTP system(%s) returned %d (errno: %d)"
,socket, str, j, errno);
if(mailproc->ignore_on_error) {
if(mp->ignore_on_error) {
lprintf(LOG_WARNING,"%04d !SMTP IGNORED MAIL due to mail processor (%s) error: %d"
,socket, mailproc->name, j);
,socket, mp->name, j);
msg_handled=TRUE;
}
}
} else { /* JavaScript */
if(!js_mailproc(socket, &client, &relay_user
,mailproc
,mp
,str /* cmdline */
,msgtxt_fname, newtxt_fname, logtxt_fname
,rcpt_addr
......@@ -2702,13 +2698,16 @@ static void smtp_thread(void* arg)
#endif
}
}
if(flength(proc_err_fname)>0)
break;
if(!fexist(msgtxt_fname) || !fexist(rcptlst_fname))
if(!mp->passthru || flength(proc_err_fname)>0 || !fexist(msgtxt_fname) || !fexist(rcptlst_fname)) {
mailproc=mp;
msg_handled=TRUE;
break;
}
}
if(flength(proc_err_fname)>0
&& (proc_err=fopen(proc_err_fname,"r"))!=NULL) {
lprintf(LOG_WARNING,"%04d !SMTP External mail processor (%s) created: %s"
,socket, mailproc->name, proc_err_fname);
while(!feof(proc_err)) {
int n;
if(!fgets(str,sizeof(str),proc_err))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment