]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Scanning for good fqdn
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sat, 16 Aug 2025 14:32:08 +0000 (10:32 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sat, 16 Aug 2025 14:32:08 +0000 (10:32 -0400)
data-feed/feedx11.tst [new file with mode: 0644]
lib/lvleml.c

diff --git a/data-feed/feedx11.tst b/data-feed/feedx11.tst
new file mode 100644 (file)
index 0000000..62cf8a8
--- /dev/null
@@ -0,0 +1,8 @@
+#very simple  test to feed SMTP server
+#====================================================
+T:(feedx11) Testing if helo fdqdn is  OK
+R:220 mailleur.example.com, ESMTP (cleartext) mailleur...
+#====================================================
+S:HELO [129.219.254.34]
+R:501 5.5.4 HELO argument is mandatory, closing connection.
+#-------------------------------------------------------------------------
index d0b6f8968e71219a7ba288f6cfda79a747a71fe5..31a3950bcfd615a99cd36315100a31e93ecd602b 100644 (file)
@@ -1035,10 +1035,55 @@ while (proceed==true) {
   //(void) rou_alert(0,"JMPDBG %s phase='%d' parm=<%s>",OPEP,phase,parameter);
   switch (phase) {
     case 0      :       //checking if we have a parameter
-      if ((parameter==(char *)0)||(strlen(parameter)==0)) 
+      if ((parameter==(char *)0)||(strlen(parameter)==0)) {
+        (void) rou_alert(0,"%s sesid=<%s> fqdn is missing!",
+                            OPEP,contact->mainsesid);
         phase=999;      //no parameter
+        }
+      break;
+    case 1      :       //do we have only good character
+      if (strpbrk(parameter,"@(&$")!=(char *)0) {
+        (void) rou_alert(0,"%s sesid=<%s> fqdn <%s> wrong contents",
+                           OPEP,contact->mainsesid,parameter);
+        phase=999;      //bad parameter
+        }
+      break;
+    case 2      :       //do we start with a dot or 2 dot
+      if ((parameter[0]=='.')||(strstr(parameter,"..")!=(char *)0)) {
+        (void) rou_alert(0,"%s sesid=<%s> fqdn <%s> not a good domain",
+                           OPEP,contact->mainsesid,parameter);
+        phase=999;      //bad parameter
+        }
+      break;
+    case 3      :       //could it be localhost or localdomain
+      if (strcasecmp(parameter,"localhost.localdomain")==0) {
+        (void) rou_alert(0,"%s sesid=<%s> fqdn <%s> local!",
+                           OPEP,contact->mainsesid,parameter);
+        phase=999;
+        }
+      break;
+    case 4      :       //check if it only a hostname
+      if (strstr(parameter,".")==(char *)0) {
+        (void) rou_alert(0,"%s sesid=<%s> fqdn <%s> is an host name!",
+                           OPEP,contact->mainsesid,parameter);
+        phase=999;
+        }
+      break;
+    case 5      :       //could it be an IP
+      if (parameter[0]=='[') {
+        (void) rou_alert(0,"%s sesid=<%s> fqdn <%s> could be an ip",
+                           OPEP,contact->mainsesid,parameter);
+        phase=999;      //bad parameter
+        }
+      break;
+    case 6      :       //is is an ip
+      if (strlen(parameter)==strspn(parameter,".0123456789")) {
+        (void) rou_alert(0,"%s sesid=<%s> fqdn <%s> is an ip",
+                           OPEP,contact->mainsesid,parameter);
+        phase=999;      //bad parameter
+        }
       break;
-    case 1      :       //seems to be a good fqdn
+    case 7      :       //seems to be a good fqdn
       char *ptr;
 
       ptr=contact->fqdn;        //parameter could be the SAME!