]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Starting to implement "mail from:"
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Fri, 14 Mar 2025 15:15:41 +0000 (11:15 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Fri, 14 Mar 2025 15:15:41 +0000 (11:15 -0400)
lib/gestcp.h
lib/lvleml.c

index 19aa78548a8dd5932a3a44de49fb3a21d739468b..bd43d3f2f631cc412065e4918c94037f82c3f474 100644 (file)
@@ -24,6 +24,7 @@ typedef struct  {
         int numreset;   //number of SMTP reset received
         char *mainsesid;//session main ID
         char *cursesid; //current session ID
+        char *mailfrom; //current mail from originator
         LOGPTR *logptr; //reference to session log
         }CONTYP;
 
index 3c4167ec5a111f72f77097dedd42e635b3e8d229..f264be71b69f0422e613279344524b96954f329e 100644 (file)
@@ -187,7 +187,50 @@ return done;
 */
 /************************************************/
 /*                                             */
-/*     Procedure to rset the current session   */
+/*     Procedure to manage a "MAIL FROM:"      */
+/*      ommand from the SMTP client.            */
+/*                                             */
+/************************************************/
+static _Bool checkfrom(CONTYP *contact,char *mailfrom)
+
+{
+_Bool success;
+_Bool proceed;
+int phase;
+
+success=false;
+proceed=true;
+phase=0;
+while (proceed==true) {
+  switch (phase) {
+    case 0      :       //do we have already a from
+      if (contact->mailfrom!=(char *)0) {
+        (void) transmit(contact,"%d 5.5.1 %s %s already specified as originator",
+                                 BADPAR,MAILF,contact->mailfrom);
+        phase=999;      //no need to go further
+        }
+      break;
+    case 1      :       //clean mailfrom
+      break;
+    case 2      :       //everything ok
+      contact->mailfrom=strdup(mailfrom);
+      (void) transmit(contact,"%d 2.1.0 %s.. sender ok",
+                               CMDOK,contact->mailfrom);
+      break;
+    default     :       //SAFE guard
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+return success;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to reset the current session  */
 /*                                             */
 /************************************************/
 static _Bool doreset(CONTYP *contact,char *parameter)
@@ -195,6 +238,7 @@ static _Bool doreset(CONTYP *contact,char *parameter)
 {
 (void) transmit(contact,"%d 2.0.0 Flushed session %s",CMDOK,contact->cursesid);
 contact->numreset++;
+contact->mailfrom=rou_freestr(contact->mailfrom);
 contact->cursesid=rou_freestr(contact->cursesid);
 contact->cursesid=eml_getcursesid(contact->mainsesid,contact->numreset);
 return true;
@@ -245,6 +289,7 @@ while (proceed==true) {
       break;
     case c_mail         :       //MAIL FROM: checking originator
       (void) rou_alert(0,"JMPDBG parameter=<%s>",line);
+      (void) checkfrom(contact,line);
       break;
     case c_rset         :       //Doing session reset
       proceed=doreset(contact,line);