From: Jean-Marc Pigeon (Delson) Date: Sat, 16 Aug 2025 14:32:08 +0000 (-0400) Subject: Scanning for good fqdn X-Git-Tag: tag-0.15~3 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=48beeb487d34465e6f12e65e5e6bd383dd8bb8bc;p=jmp%2Fmailleur Scanning for good fqdn --- diff --git a/data-feed/feedx11.tst b/data-feed/feedx11.tst new file mode 100644 index 0000000..62cf8a8 --- /dev/null +++ b/data-feed/feedx11.tst @@ -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. +#------------------------------------------------------------------------- diff --git a/lib/lvleml.c b/lib/lvleml.c index d0b6f89..31a3950 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -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!