]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Stating to implement "note_status" within lvleml.c
authorJean-Marc Pigeon <jmp@safe.c>
Mon, 17 Nov 2025 16:06:54 +0000 (11:06 -0500)
committerJean-Marc Pigeon <jmp@safe.c>
Mon, 17 Nov 2025 16:06:54 +0000 (11:06 -0500)
lib/lvleml.c

index 0623a31ef88feb99886a91cda51435ebf815af0c..63b8740e7f88d8a79c84123b4d4e83d538a0848f 100644 (file)
@@ -198,6 +198,52 @@ while (proceed==true) {
   phase++;
   }
 return done;
+#undef  OPEP
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to report the contact status  */
+/*      store this status within the database   */
+/*                                             */
+/************************************************/
+static void note_status(CONTYP *contact,int smtpcode,char *rcpt,const char *fmt,...)
+
+{
+#define OPEP    "lvleml.c:note_status"
+
+va_list args;
+char **resp;
+char *report;
+char *info;
+ACTTYP action;
+
+va_start(args,fmt);
+resp=(char **)0;
+(void) rou_vasprintf(&report,fmt,args);
+(void) rou_asprintf(&info,"%d %s",smtpcode,report);
+resp=(char **)rou_addlist((void **)resp,(void *)info);
+(void) memset(&action,'\000',sizeof(ACTTYP));
+action.sessid=contact->session->sessid;
+action.code='X';
+action.reverse=contact->peername;
+action.remoteip=contact->peerip;
+action.sfrom=contact->mailfrom;
+if (contact->session->hfrom!=(char *)0)
+  action.hfrom=contact->session->hfrom;
+if (contact->session->hsubject!=(char *)0)
+  action.hsubject=contact->session->hsubject;
+action.rcptto=rcpt;
+action.resp=resp;
+if (sql_mngact(contact->sqlptr,&action)==false)
+  (void) rou_alert(0,"%s, unable to store report within database (bug?",OPEP);
+(void) eml_transmit(contact,true,"%s",info);
+resp=(char **)rou_freelist((void **)resp,(genfree_t)rou_freestr);
+report=rou_freestr(report);
+va_end(args);
+
 #undef  OPEP
 }
 /*
@@ -354,27 +400,27 @@ while (proceed==true) {
     case 1      :       //checking credential
       if (srv->links>1) {
         status=ALREADY;
-        (void) eml_transmit(contact,true,"%d-4.5.6 Server already connected",
-                                          status);
+        (void) note_status(contact,status,"---",
+                                   "%d-4.5.6 Server already connected",status);
         phase=999;      //To many server connected
         }
       break;
     case 2      :       //checking if black listed (low credit)
       if (srv->credit<0) {
         char *cmt;
+        const char *ninfo;
 
         cmt=srv->listing;
+        ninfo="%d-4.5.7 Originator server IP [%s] black listed <%s>";
         if (cmt==(char *)0)
           cmt="credit too low";
         (void) log_fprintlog(contact->logptr,false,"(Remote %s[%s] credit='%d' %s)",
                                                     contact->peername,
                                                     contact->peerip,
                                                     srv->credit,"too low");
-        (void) setterminator(contact,"Remote server credit is too low");
         status=BLCKLST;
-        (void) eml_transmit(contact,true,"%d-4.5.7 Originator server IP "
-                                         "[%s] black listed <%s>",
-                                         status,contact->peerip,cmt);
+        (void) note_status(contact,status,"---",ninfo,status,contact->peerip,cmt);
+        (void) setterminator(contact,"Remote server credit is too low");
         phase=999;      //To many server connected
         }
       break;
@@ -787,15 +833,15 @@ rmtpass=(char *)0;
 phase=0;
 proceed=true;
 while (proceed==true) {
-  //(void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase);
+  (void) rou_dbglive(9,OPEP,"phase='%d'",OPEP,phase);
   switch (phase) {
-    case 0      :       //are we encrypted and on the right port
+    case 0      :               //are we encrypted and on the right port
       if (soc_iscrypted(contact->socptr)==false) {
-        static char *cmt="no authentication on clear chanel";
-        (void) eml_transmit(contact,true,"%d 5.7.0 %s",FAILED,cmt);
+        static char *cmt="no authentication allowed on clear chanel";
+        (void) note_status(contact,FAILED,"---","%d 5.7.0 %s",FAILED,cmt);
         (void) setterminator(contact,cmt);
         contact->credit-=1;     //"Bad boy"
-        phase=999;      //No need to go further 
+        phase=999;              //No need to go further 
         }
       break;
     case 1      :       //check buffer
@@ -883,52 +929,6 @@ rmtpass=rou_freestr(rmtpass);
 return (contact->privilege==rel_authentic);
 
 #undef  DISP
-#undef  OPEP
-}
-/*
-\f
-*/
-/************************************************/
-/*                                             */
-/*     Procedure to report rcpt problem and    */
-/*      store status within the database.       */
-/*                                             */
-/************************************************/
-static void note_rcpt(CONTYP *contact,char *rcpt,int smtpcode,char *fmt,...)
-
-{
-#define OPEP    "lvleml.c:note_rcpt,"
-
-va_list args;
-char **resp;
-char *report;
-char *info;
-ACTTYP action;
-
-va_start(args,fmt);
-resp=(char **)0;
-(void) rou_vasprintf(&report,fmt,args);
-(void) rou_asprintf(&info,"%d %s",smtpcode,report);
-resp=(char **)rou_addlist((void **)resp,(void *)info);
-(void) memset(&action,'\000',sizeof(ACTTYP));
-action.sessid=contact->session->sessid;
-action.code='X';
-action.reverse=contact->peername;
-action.remoteip=contact->peerip;
-action.sfrom=contact->mailfrom;
-if (contact->session->hfrom!=(char *)0)
-  action.hfrom=contact->session->hfrom;
-if (contact->session->hsubject!=(char *)0)
-  action.hsubject=contact->session->hsubject;
-action.rcptto=rcpt;
-action.resp=resp;
-if (sql_mngact(contact->sqlptr,&action)==false)
-  (void) rou_alert(0,"%s unable to store report within database (bug?",OPEP);
-(void) eml_transmit(contact,true,"%s",info);
-resp=(char **)rou_freelist((void **)resp,(genfree_t)rou_freestr);
-report=rou_freestr(report);
-va_end(args);
-
 #undef  OPEP
 }
 /*
@@ -955,13 +955,13 @@ while (proceed==true) {
   switch (phase) {
     case 0      :       //is user a local user
       if ((sql_mngusr(contact->sqlptr,sql_select,rcptto,&usr))==false) {
-        (void) note_rcpt(contact,rcptto,UKNUSER,"5.6.0 <%s> unknown user",rcptto);
+        (void) note_status(contact,UKNUSER,rcptto,"5.6.0 <%s> unknown user",rcptto);
         phase=999;      //No user found in database
         }
       break;
     case 1      :       //is user lock?
       if (usr->lock==1) {
-        (void) note_rcpt(contact,rcptto,EXPIRED,"5.6.1 <%s> account lock",rcptto);
+        (void) note_status(contact,EXPIRED,rcptto,"5.6.1 <%s> account lock",rcptto);
         phase=999;      //No user found in database
         }
       break;
@@ -1049,8 +1049,8 @@ while (proceed==true) {
         char *rcptto;
 
         (void) rou_asprintf(&rcptto,"%s@%s",rmtusr->userid,rmtusr->domain);
-        (void) note_rcpt(contact,rcptto,NORELAY,"2.8.0 %s for domain <%s>",
-                                                 cmt,rmtusr->domain);
+        (void) note_status(contact,NORELAY,rcptto,"2.8.0 %s for domain <%s>",
+                                                  cmt,rmtusr->domain);
         rcptto=rou_freestr(rcptto);
         }
       proceed=false;
@@ -1831,13 +1831,14 @@ while (proceed==true) {
       break;
     case 1      :       //do we have an originator
       if ((rcptto==(char *)0)||(strlen(rcptto)==0)) {
-        (void) note_rcpt(contact,rcptto,BADPAR,"5.6.1 recipient not specified");
+        (void) note_status(contact,BADPAR,rcptto,"5.6.1 recipient not specified");
         phase=999;      //no need to go further
         }
       break;
     case 2      :       //check rcpt format
       if ((rcptto[0]!='<')||(rcptto[strlen(rcptto)-1]!='>')) {
-        (void) note_rcpt(contact,rcptto,BADPAR,"5.6.2 '%s' bad Format error",rcptto);
+        (void) note_status(contact,BADPAR,rcptto,"5.6.2 '%s' bad Format error",
+                                                 rcptto);
         phase=999;      //no need to go further
         }
       rcptto[strlen(rcptto)-1]='\000'; 
@@ -1846,16 +1847,16 @@ while (proceed==true) {
     case 3      :       //checking rcptto format
       neu=eml_isemailok(rcptto,&report);
       if (neu==(RCPTYP *)0) {
-        (void) note_rcpt(contact,rcptto,NOTEML,"5.6.3 %s",report);
+        (void) note_status(contact,NOTEML,rcptto,"5.6.3 %s",report);
         report=rou_freestr(report);
         phase=999;      //no need to go further
         }
       break;
     case 4      :       //Do we have a domain MX
       if (setlocdom(contact,neu)==false) {
-        (void) note_rcpt(contact,rcptto,MISSMX,"5.6.4 %s (domain=%s)",
-                                               "No valid MX found for recipient "
-                                               "domain name",neu->domain);
+        (void) note_status(contact,MISSMX,rcptto,"5.6.4 %s (domain=%s)",
+                                                 "No valid MX found for recipient "
+                                                 "domain name",neu->domain);
         phase=999;      //no need to go further
         }
       break;
@@ -1909,7 +1910,7 @@ while (proceed==true) {
         }
       break;
     case 8      :       //everything ok
-      (void) note_rcpt(contact,rcptto,CMDOK,"5.6.7 %s <%s>",detail,rcptto);
+      (void) note_status(contact,CMDOK,rcptto,"5.6.7 %s <%s>",detail,rcptto);
       success=true;
       break;
     default     :       //SAFE guard