From cc01c5e65476ef0328b71e48710702a2e3332ee9 Mon Sep 17 00:00:00 2001 From: "Jean-Marc Pigeon (Delson)" Date: Thu, 19 Jun 2025 10:39:00 -0400 Subject: [PATCH] Set badseq when mail from is not specified --- Makefile.dbg | 6 +++--- lib/lvleml.c | 21 +++++++++++++-------- lib/subrou.c | 7 +++---- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/Makefile.dbg b/Makefile.dbg index 73aeb74..c5f6066 100644 --- a/Makefile.dbg +++ b/Makefile.dbg @@ -33,7 +33,7 @@ onercvr : clean debug newtest $(EMLPAR)$(TESTITER) # # -i 127.63.31.15 -onefeed : +onefeed : debug @ bin/feeder \ -f \ -d 2 \ @@ -42,7 +42,7 @@ onefeed : $(TESTPORT) \ ./$(DATATST)/$(ONEFEED) -onesendr: +onesendr: debug @ \ ./bin/sender \ -f \ @@ -52,7 +52,7 @@ onesendr: `basename -a $(TESTDIR)/var/spool/$(APPNAME)/queue/*.todo | \ tr '\\n' ' ' ` -onesortr: +onesortr: debug @ \ bin/sorter \ -f \ diff --git a/lib/lvleml.c b/lib/lvleml.c index 24dd762..6ddae4a 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -726,14 +726,19 @@ phase=0; while (proceed==true) { //(void) rou_alert(0,"JMPDBG %s phase='%d' rcptto=<%s>",OPEP,phase,rcptto); switch (phase) { - case 0 : //do we have an originator + case 0 : //do we have a mailfrom + if ((contact->mailfrom==(char *)0)||(strlen(contact->mailfrom)==0)) { + (void) transmit(contact,"%d Bad sequence of commands.",BADSEQ); + phase=999; //no need to go further + } + break; + case 1 : //do we have an originator if ((rcptto==(char *)0)||(strlen(rcptto)==0)) { - (void) transmit(contact,"%d 5.6.0 <%s> recipient not specified", - BADPAR,rcptto); + (void) transmit(contact,"%d 5.6.0 recipient not specified",BADPAR); phase=999; //no need to go further } break; - case 1 : //check rcpt format + case 2 : //check rcpt format if ((rcptto[0]!='<')||(rcptto[strlen(rcptto)-1]!='>')) { (void) transmit(contact,"%d 5.6.1 '%s' bad Format error", BADPAR,rcptto); @@ -742,7 +747,7 @@ while (proceed==true) { rcptto[strlen(rcptto)-1]='\000'; (void) memmove(rcptto,rcptto+1,strlen(rcptto)); break; - case 2 : //checking rcptto format + case 3 : //checking rcptto format neu=eml_isemailok(rcptto,&report); if (neu==(RCPTYP *)0) { (void) transmit(contact,"%d 5.6.2 %s",NOTEML,report); @@ -750,7 +755,7 @@ while (proceed==true) { phase=999; //no need to go further } break; - case 3 : //Do we have a domain MX + case 4 : //Do we have a domain MX if (setlocdom(contact,neu)==false) { (void) transmit(contact,"%d 5.6.3 %s (domain=%s)", MISSMX, @@ -760,13 +765,13 @@ while (proceed==true) { phase=999; //no need to go further } break; - case 4 : //Storing rcpt to + case 5 : //Storing rcpt to if (eml_addrecipient(&(contact->recipients),neu)==false) { detail="duplicate recipients will be consolidated"; neu=eml_freerecipient(neu); } break; - case 5 : //everything ok + case 6 : //everything ok (void) transmit(contact,"%d 2.6.4 %s",CMDOK,detail); success=true; break; diff --git a/lib/subrou.c b/lib/subrou.c index fb1fa5b..4791478 100644 --- a/lib/subrou.c +++ b/lib/subrou.c @@ -455,18 +455,17 @@ PUBLIC void rou_valert(const int dlevel,const char *fmt,va_list ap) { if (debug>=dlevel) { + char lvl[10]; char strloc[10000]; + (void) snprintf(lvl,sizeof(lvl),"(dl=%02d) ",dlevel); (void) memset(strloc,'\000',sizeof(strloc)); (void) vsnprintf(strloc,sizeof(strloc)-1,fmt,ap); if (foreground==true) - (void) fprintf(stderr,"%s\n",strloc); + (void) fprintf(stderr,"%s%s\n",lvl,strloc); else { char *ptr; - char lvl[10]; - ptr=strloc; - (void) snprintf(lvl,sizeof(lvl),"(dl=%02d) ",dlevel); while (strlen(ptr)>DEBMAX) { char locline[DEBMAX+10]; -- 2.47.3