]> SAFE projects GIT repository - jmp/mailleur/commitdiff
ehlo command is working properly
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sun, 8 Jun 2025 08:45:29 +0000 (04:45 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sun, 8 Jun 2025 08:45:29 +0000 (04:45 -0400)
lib/lvleml.c

index 127fcea6cd4ef79320050097def6dde60902d83b..8e01a6af919a7eaa0fb6c99b02fa79d4721a269e 100644 (file)
@@ -27,7 +27,8 @@
 typedef struct  {
     SOCPTR *socptr;     //socket to remote pointer
     LOGPTR *logptr;     //Log pointer
-    const char *domain; //Domain to be reached
+    char *orgdomain;    //originator domain
+    char *dstdomain;    //Domain to be reached
     MXTYP *curmx;       //Current MX number
     MXTYP **mxs;        //MX list form domain
     }RMTTYP;
@@ -743,7 +744,7 @@ while (proceed==true) {
     case 0      :       //Sending EHLO
       char cmt[100];
 
-      (void) snprintf(cmt,sizeof(cmt),"EHLO %s",rmt->domain);
+      (void) snprintf(cmt,sizeof(cmt),"EHLO %s",rmt->orgdomain);
       (void) tcp_write(rmt->socptr,cmt);
       (void) log_fprintlog(rmt->logptr,false,cmt);
       break;
@@ -788,7 +789,7 @@ while (proceed==true) {
     case 0      :       //do we have MX
       if (rmt->mxs==(MXTYP **)0) {
         (void) log_fprintlog(rmt->logptr,false,"NO MX found for domain <%s>",
-                                              rmt->domain);
+                                              rmt->dstdomain);
         phase=999;
         }
       break;
@@ -848,7 +849,7 @@ return done;
 /*     Procedure to send the whole email transaction   */
 /*                                                      */
 /********************************************************/
-static void sending_email(char *domain,char *sessid,TRATYP **tra)
+static void sending_email(char *orgdomain,char *dstdomain,char *sessid,TRATYP **tra)
 
 {
 #define OPEP    "lvleml.c:sending_email,"
@@ -861,8 +862,9 @@ _Bool proceed;
 
 isnow=time((time_t *)0);
 (void) memset(&rmt,'\000',sizeof(rmt));
-rmt.mxs=dns_getmx(domain);
-rmt.domain=domain;
+rmt.mxs=dns_getmx(dstdomain);
+rmt.dstdomain=dstdomain;
+rmt.orgdomain=orgdomain;
 tosend=(TRATYP **)0;
 phase=0;
 proceed=true;
@@ -912,7 +914,7 @@ while (proceed==true) {
         char cmt[100];
 
         (void) snprintf(cmt,sizeof(cmt),"Unable to contact ANY MX for domain <%s>",
-                                         domain); 
+                                         dstdomain); 
         (void) log_fprintlog(rmt.logptr,false,cmt);
         phase=999;      //No need to go further
         }
@@ -1314,12 +1316,14 @@ PUBLIC void eml_remote_email(TRATYP **tra)
 {
 #define OPEP    "lvleml.c:eml_remote_email,"
 
-char *domain;
+char *orgdomain;
+char *dstdomain;
 char *sessid;
 int phase;
 _Bool proceed;
 
-domain=(char *)0;
+orgdomain=(char *)0;
+dstdomain=(char *)0;
 sessid=(char *)0;
 phase=0;
 proceed=true;
@@ -1331,24 +1335,33 @@ while (proceed==true) {
         phase=999;
         }
       break;
-    case 1      :       //detecting remote domain
-      if ((domain=strrchr((*tra)->rcptto,'@'))!=(char *)0)
-        domain++;
-      if (domain==(char *)0) {
+    case 1      :       //set originator domain
+      if ((orgdomain=strrchr((*tra)->mailfrom,'@'))!=(char *)0)
+        orgdomain++;
+      if (orgdomain==(char *)0) {
+        (void) rou_alert(0,"%s Originator address <%s> without domain? (Bug?)",
+                            OPEP,(*tra)->mailfrom);
+        phase=999;
+        }
+      break;
+    case 2      :       //detecting remote domain
+      if ((dstdomain=strrchr((*tra)->rcptto,'@'))!=(char *)0)
+        dstdomain++;
+      if (dstdomain==(char *)0) {
         (void) rou_alert(0,"%s Recipient address <%s> without domain? (Bug?)",
                             OPEP,(*tra)->rcptto);
         phase=999;
         }
       break;
-    case 2      :       //checking if we have a session ID
+    case 3      :       //checking if we have a session ID
       sessid=(*tra)->sessid;
       if (sessid==(char *)0) {
         (void) rou_alert(0,"%s Session ID is NULL (Bug?)",OPEP);
-        phase=999;
+        sessid="0000-0000";
         }
       break;
-    case 3      :       //sending the whole transaction to remote server
-      (void) sending_email(domain,sessid,tra);  
+    case 4      :       //sending the whole transaction to remote server
+      (void) sending_email(orgdomain,dstdomain,sessid,tra);  
       break;
     default     :       //SAFE Guard
       proceed=false;