]> SAFE projects GIT repository - jmp/mailleur/commitdiff
reject DATA sequence partially set
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Thu, 12 Jun 2025 20:37:40 +0000 (16:37 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Thu, 12 Jun 2025 20:37:40 +0000 (16:37 -0400)
Makefile
app/feeder.c
data-feed/feed12.tst [new file with mode: 0644]
lib/lvleml.c
lib/unieml.h

index 56db44af2d07298d201a101af362720722d01a82..8c40e727c175734a84b9e3e755c7792bdb610724 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -139,11 +139,11 @@ onefeed   :  debug
           @ rm -fr $(TESTDIR)/var/spool/$(APPNAME)/queue/*
           @ bin/feeder                                 \
                        -f                              \
-                       -d 2                            \
+                       -d 6                            \
                        -c ./conf/$(APPNAME).conf.dvl   \
                        $(TESTIP)                       \
                        $(TESTPORT)                     \
-                       ./$(DATATST)/feed00.tst
+                       ./$(DATATST)/feed12.tst
           @ rm -fr ./data-sorter/*
           @ cp -a                                      \
                $(TESTDIR)/var/spool/$(APPNAME)/queue/* \
@@ -176,7 +176,7 @@ dbgfeed     :  debug
                          -c ./conf/feeder.conf.dvl     \
                          $(TESTIP)                     \
                          $(TESTPORT)                   \
-                         $(DATATST)/dbgfeed.tst
+                         $(DATATST)/feed12.tst
 
 valfeed        :  debug                        #valgring of emlrcvr
           @ echo "feed valgrind test"
index 708fb85fc38c280f9a141cd2a9da7d9e56f2117d..c6b84acc29b9039d93c737052975d9fb5555b31c 100644 (file)
@@ -120,7 +120,7 @@ return done;
 /*      server.                                 */
 /*                                             */
 /************************************************/
-static _Bool dosenddata(FEEDTYP *fd,int *numline)
+static _Bool dosenddata(FEEDTYP *fd,int *numline,char *expected)
 
 {
 #define OPEP    "feeder.c:dosenddata,"
@@ -139,7 +139,7 @@ action="DATA";
 phase=0;
 proceed=true;
 while (proceed==true) {
-  //(void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase);
+  (void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase);
   switch (phase) {
     case 0      :       //Transmit "DATA" to remote
       if (tcp_write(fd->socptr,action)!=(strlen(action)+2))
@@ -150,14 +150,10 @@ while (proceed==true) {
         phase=999;      //Didn't get signon
       break;
     case 2      :       //did we received the Proper "proceed" acknoledge
-      if (line!=(char *)0) {     //Always
-        int code;
-
-        code=0;
-        (void) sscanf(line,"%d",&code); 
-        if (code!=DATAOK) 
-          phase=999;
-        line=rou_freestr(line);
+      if (strcmp(line,expected)!=0) {
+        (void) rou_alert(0,"expecting\t'%s'",expected);
+        (void) rou_alert(0,"found\t\t'%s'",line);
+        phase=999;      //did NOT get proper signon
         }
       break;
     case 3      :       //
@@ -369,7 +365,7 @@ switch (getcmd(line)) {
       (void) report(*numline,line,"Unable to set comment mode");
     break;
   case cmd_data         :       //sending email content to remote
-    if ((status=dosenddata(fd,numline))==false)
+    if ((status=dosenddata(fd,numline,param))==false)
       (void) report(*numline,line,"Unable to fully send data");
     break;
   case cmd_gotls        :       //GOTLS
diff --git a/data-feed/feed12.tst b/data-feed/feed12.tst
new file mode 100644 (file)
index 0000000..21da61f
--- /dev/null
@@ -0,0 +1,17 @@
+#====================================================
+T:(feed12) Trying to send Email whil there no recipient known
+R:220 mailleur.example.com, ESMTP (cleartext) emlrcvr...
+#====================================================
+S:HELO example.com
+R:250 mailleur.example.com, link (cleartext) ready,...
+S:MAIL FROM: <trouble@subdom1.example.com>
+R:250 2.1.3 trouble@subdom1.example.com.. sender ok
+S:RCPT TO: <dom1user1@subdom0.example.com>
+R:563 5.6.3 No valid MX found for recipient domain name (domain=subdom0.example.com)
+#-------------------------------------------------------------------------
+#-sending data
+C:DATA 503 5.5.0 RCPT first. transaction protocol command out of sequence
+C:.
+#-------------------------------------------------------------------------
+S:QUIT
+R:221 2.0.0 Bye, closing connection...
index 57182edd5991f8d47ce5e32fd1f6784401951f51..8d552a1ff0e4647bd107d23da26df619d8a3ae11 100644 (file)
@@ -466,20 +466,30 @@ proceed=setdirectives(contact,EXTMP);
 while (proceed==true) {
   //(void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
   switch (phase) {
-    case 0      :       //opening the queue email
+    case 0      :       //checking if we have recipient
+      if (rou_nbrlist((void **)contact->recipients)==0)  {
+        char *cmt;
+      
+        cmt="RCPT first. transaction protocol command out of sequence";
+        (void) transmit(contact,"%d 5.5.0 %s",BADSEQ,cmt);
+        done=true;      //lets say DATA will be issued
+        proceed=false; //No recipients
+        }
+      break;
+    case 1      :       //opening the queue email
       if ((queue=eml_createqfile(contact->cursesid,""))==(FILE *)0) 
         phase=999;      //trouble trouble
       break;
-    case 1      :       //adding received stamp to file
+    case 2      :       //adding received stamp to file
       if (addreceived(contact,queue)==false) 
         phase=999;      //trouble trouble
       break;
-    case 2      :       //sending 'go ahead' to remote
+    case 3      :       //sending 'go ahead' to remote
       (void) clock_gettime(CLOCK_REALTIME,&start);
       (void) transmit(contact,"%d 3.5.0 %s",
                               DATAOK,"End data with <CR><LF>.<CR><LF>");
       break;
-    case 3      :       //get incoming line, detect 'single dot' as end
+    case 4      :       //get incoming line, detect 'single dot' as end
       while (completed==false) {
         int got;
         char *line;
@@ -502,19 +512,19 @@ while (proceed==true) {
         line=rou_freestr(line);
         }
       break;
-    case 4      :       //got all data
+    case 5      :       //got all data
       if (eml_closeqfile(queue)<0)
         phase=999;              //Trouble trouble
       break;
-    case 5      :       //creating the count file
+    case 6      :       //creating the count file
       if (setcountfile(contact)==false) 
         phase=999;      //Unable to create count file???
       break;
-    case 6      :       //renameing directive
+    case 7      :       //renameing directive
       if (eml_renameqfile(contact->cursesid,EXTMP,EXTRANS)==false)
         phase=999;              //Trouble trouble
       break;
-    case 7      :       //everything fine
+    case 8      :       //everything fine
       const char *fmt;
       unsigned int delta;
 
index 06ab772ef4da8b46edda289b18b33f5691557ede..5083877113c45f01689eb96b3e84b279bbc7dbe2 100644 (file)
@@ -20,6 +20,7 @@
 #define NOANSWR 460             //no answer from remote
 #define BADPAR  501             //error in parameters
 #define CMDBAD  502             //command not implemented
+#define BADSEQ  503             //out of sequence command
 #define DATRJC  521             //Data Rejected
 #define REJECT  550             //E-mail/domain rejected
 #define UKNUSER 551             //Unknown user