]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Better handling of receiver SMTPSPORTS env variable
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Wed, 2 Jul 2025 11:57:35 +0000 (07:57 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Wed, 2 Jul 2025 11:57:35 +0000 (07:57 -0400)
conf/mailleur.conf.dvl
lib/modrec.c

index ce5266a997320c287da415b37c010e69d8ffba1f..b8b3a0d331853dbdd9af9a4ce3e08d3385471abb 100644 (file)
@@ -43,3 +43,4 @@ DB_PORT=5432
 #Dovecot storage directory
 DOV_MAILDIR="/var/spool/mailleur/mails"
 #------------------------------------------------
+SMTPPORTS="|127.127.10.25|1025|5,smtps|127.127.10.26|1465|3,smtp|127.127.10.26|1587|2"
index 86767c09eb4854e9bc9dc69a626321f2c7e4c793..4f2aec295dada9531d11924c2b4a0328885780ea 100644 (file)
 #include        "lvleml.h"
 #include        "modrec.h"
 
+/*
+\f
+*/
+/********************************************************/
+/*                                                     */
+/*      Procedure to returne the local argv             */
+/*                                                     */
+/********************************************************/
+static char **getconfargv()
+
+{
+char **confargv;
+char *data;
+char *conf;
+
+confargv=(char **)0;
+conf=(char *)0;
+if ((conf=getenv("SMTPPORTS"))!=(char *)0)
+  conf=strdup(conf);
+data=conf;
+while (data!=(char *)0) {
+  char *ptr;
+  char *seg;
+
+  if ((ptr=strchr(data,','))!=(char *)0) {
+    *ptr='\000';
+    ptr++;
+    }
+  seg=strdup(data);
+  (void) rou_alert(0,"JMPDBG seg=<%s>",seg);
+  confargv=(char **)rou_addlist((void **)confargv,(void *)seg);
+  data=ptr;
+  }
+conf=rou_freestr(conf);
+return confargv;
+}
 /*
 \f
 */
@@ -34,8 +70,8 @@
 /*      Possible argument format are:                   */
 /*      protocol:ipnum:port:iteration                   */
 /*      example:                                        */
-/*      :ipnum::: -> smtp:ipnum:25:1                    */
-/*      smtps:ipnum:465:2                               */
+/*      |ipnum||| -> smtp|ipnum|25|1                    */
+/*      smtps|ipnum|465|2                               */
 /*              -> smtps protocol,port 465,2 iteration  */
 /*                                                     */
 /********************************************************/
@@ -43,10 +79,19 @@ static int prepbinding(SOCPTR ***bindings,int argc,char *argv[])
 
 {
 #define OPEP    "moderec.c:prepbinding"
+#define DFLTSET "smtp|0.0.0.0|25|2"
 #define DIP     "0.0.0.0"
 #define DPORT   "25"
 
+char *locargv[2];
+
+(void) memset(locargv,'\000',sizeof(locargv));
 *bindings=(SOCPTR **)0;
+if (argc==0) {
+  argc=1;
+  locargv[0]=DFLTSET; //very last default configuration
+  argv=locargv;
+  }
 for (int i=0;i<argc;i++) {
   int iteration;
   PROTYP proto;
@@ -100,6 +145,7 @@ return rou_nbrlist(*bindings);
 
 #undef  DPORt
 #undef  DIP
+#undef  DFLSET
 #undef  OPEP
 }
 /*
@@ -319,10 +365,9 @@ PUBLIC void rec_handlesmtp(int argc,char *argv[])
 {
 #define OPEP    "modrec.c:rec_handlesmtp"
 #define RELAX   5       //Relax time between process checking
-#define DFLTSET "smtp|0.0.0.0|25|2"
 
 pid_t *childs;
-char *locargv[2];
+char **confargv;
 int nbrbind;
 _Bool allbusy;
 SOCPTR **bindings;
@@ -330,23 +375,25 @@ int phase;
 _Bool proceed;
 
 childs=(pid_t)0;
-(void) memset(locargv,'\000',sizeof(locargv));
-locargv[0]=getenv("SMTPPORTS");
-if (locargv[0]==(char *)0) 
-  locargv[0]=DFLTSET; //default configuration
-if (argc==0) {
-   argc=1;
-   argv=locargv;
-   }
+confargv=getconfargv();
 nbrbind=0;
 allbusy=false;
 bindings=(SOCPTR **)0;
+if (argc==0) {
+  argc=rou_nbrlist((void **)confargv);
+  argv=confargv;
+  }
 phase=0;
 proceed=true;
 while (proceed==true) {
   //(void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
   switch (phase) {
     case 0      :       //preparing iteration
+      //JMPDBG
+      for (int i=0;i<argc;i++)
+        (void) rou_alert(0,"%s JMPDBG argv[%d]=<%s>",OPEP,i,argv[i]);
+      //JMPDBG
+      (void) rou_alert(0,"%s JMPDBG argv=<%s>",OPEP,argv[0]);
       if ((nbrbind=prepbinding(&bindings,argc,argv))==0) {
         (void) rou_alert(0,"%s, No listening IP found (config?)",OPEP);
         phase=999;
@@ -419,8 +466,7 @@ while (proceed==true) {
     }
   phase++;
   }
-
-#undef  DFLTSET
+confargv=(char **)rou_freelist((void **)confargv,(genfree_t)rou_freestr);
 #undef  RELAX
 #undef  OPEP
 }