diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 5af6e34a8ac586d2d572ce450ec05a5511ab9253..c8c95f6e6894e5b57fdd98f7775dcacef8e84451 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -108,6 +108,7 @@ static js_server_props_t js_server_props; struct mailproc { char cmdline[INI_MAX_VALUE_LEN]; str_list_t to; + str_list_t from; BOOL passthru; BOOL native; BOOL ignore_on_error; /* Ignore mail message if cmdline fails */ @@ -3314,6 +3315,8 @@ static void smtp_thread(void* arg) continue; if(!chk_ar(&scfg,mailproc_list[i].ar,&relay_user)) continue; + if(mailproc_list[i].from!=NULL && !findstr_in_list(p, mailproc_list[i].from)) + continue; if(mailproc_list[i].to!=NULL) { for(j=0;mailproc_list[i].to[j]!=NULL;j++) { if(stricmp(p,mailproc_list[i].to[j])==0) { @@ -4233,6 +4236,7 @@ static void cleanup(int code) if(mailproc_list[i].ar!=NULL && mailproc_list[i].ar!=nular) free(mailproc_list[i].ar); strListFree(&mailproc_list[i].to); + strListFree(&mailproc_list[i].from); } FREE_AND_NULL(mailproc_list); } @@ -4448,6 +4452,8 @@ void DLLCALL mail_server(void* arg) SAFECOPY(mailproc_list[i].cmdline,sec_list[i]); mailproc_list[i].to = iniReadStringList(fp,sec_list[i],"to",",",NULL); + mailproc_list[i].from = + iniReadStringList(fp,sec_list[i],"from",",",NULL); mailproc_list[i].passthru = iniReadBool(fp,sec_list[i],"passthru",TRUE); mailproc_list[i].native =