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) ...@@ -2635,55 +2635,51 @@ static void smtp_thread(void* arg)
SAFEPRINTF2(proc_err_fname,"%sSBBS_SMTP.%s.err", scfg.temp_dir, session_id); SAFEPRINTF2(proc_err_fname,"%sSBBS_SMTP.%s.err", scfg.temp_dir, session_id);
remove(proc_err_fname); remove(proc_err_fname);
for(i=0;i<mailproc_count;i++) { for(i=0;i<mailproc_count && !msg_handled;i++) {
struct mailproc* mp=&mailproc_list[i];
mailproc=&mailproc_list[i]; if(mp->disabled)
if(mailproc->disabled)
continue; continue;
if(!mailproc->process_dnsbl && dnsbl_result.s_addr) if(!mp->process_dnsbl && dnsbl_result.s_addr)
continue; continue;
if(!mailproc->process_spam && spam_bait_result) if(!mp->process_spam && spam_bait_result)
continue; continue;
if(!chk_ar(&scfg,mailproc->ar,&relay_user,&client)) if(!chk_ar(&scfg,mp->ar,&relay_user,&client))
continue; continue;
if(mailproc->to!=NULL && !mailproc_to_match[i]) if(mp->to!=NULL && !mailproc_to_match[i])
continue; continue;
if(mailproc->from!=NULL if(mp->from!=NULL
&& !findstr_in_list(sender_addr, mailproc->from)) && !findstr_in_list(sender_addr, mp->from))
continue; continue;
if(!mailproc->passthru) mailcmdstr(mp->cmdline
msg_handled=TRUE;
mailcmdstr(mailproc->cmdline
,msgtxt_fname, newtxt_fname, logtxt_fname ,msgtxt_fname, newtxt_fname, logtxt_fname
,rcptlst_fname, proc_err_fname ,rcptlst_fname, proc_err_fname
,host_name, host_ip, relay_user.number ,host_name, host_ip, relay_user.number
,rcpt_addr ,rcpt_addr
,sender, sender_addr, reverse_path, str); ,sender, sender_addr, reverse_path, str);
lprintf(LOG_INFO,"%04d SMTP Executing external mail processor: %s" 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" lprintf(LOG_DEBUG,"%04d SMTP Executing external command: %s"
,socket, str); ,socket, str);
if((j=system(str))!=0) { if((j=system(str))!=0) {
lprintf(LOG_NOTICE,"%04d SMTP system(%s) returned %d (errno: %d)" lprintf(LOG_NOTICE,"%04d SMTP system(%s) returned %d (errno: %d)"
,socket, str, j, errno); ,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" 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; msg_handled=TRUE;
} }
} }
} else { /* JavaScript */ } else { /* JavaScript */
if(!js_mailproc(socket, &client, &relay_user if(!js_mailproc(socket, &client, &relay_user
,mailproc ,mp
,str /* cmdline */ ,str /* cmdline */
,msgtxt_fname, newtxt_fname, logtxt_fname ,msgtxt_fname, newtxt_fname, logtxt_fname
,rcpt_addr ,rcpt_addr
...@@ -2702,13 +2698,16 @@ static void smtp_thread(void* arg) ...@@ -2702,13 +2698,16 @@ static void smtp_thread(void* arg)
#endif #endif
} }
} }
if(flength(proc_err_fname)>0) if(!mp->passthru || flength(proc_err_fname)>0 || !fexist(msgtxt_fname) || !fexist(rcptlst_fname)) {
break; mailproc=mp;
if(!fexist(msgtxt_fname) || !fexist(rcptlst_fname)) msg_handled=TRUE;
break; break;
}
} }
if(flength(proc_err_fname)>0 if(flength(proc_err_fname)>0
&& (proc_err=fopen(proc_err_fname,"r"))!=NULL) { && (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)) { while(!feof(proc_err)) {
int n; int n;
if(!fgets(str,sizeof(str),proc_err)) 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