From a6b8836d7cb0ceaa43fda1c7aa762f28a2278061 Mon Sep 17 00:00:00 2001 From: "Jean-Marc Pigeon (Delson)" Date: Wed, 16 Jul 2025 15:32:06 -0400 Subject: [PATCH] Relaying detection and ORGN command seems to be working --- data-feed/feed05.tst | 2 +- lib/lvleml.c | 26 +++++++++++++++++++++++--- lib/subafn.c | 3 +-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/data-feed/feed05.tst b/data-feed/feed05.tst index 35372c4..7b9f4be 100644 --- a/data-feed/feed05.tst +++ b/data-feed/feed05.tst @@ -7,7 +7,7 @@ R:220 mailleur.example.com, ESMTP (cleartext) mailleur... S:helo example.com R:250 mailleur.example.com, link (cleartext) ready, your IP/FQDN=[91.199.160.44/painsmille.shop] S:MAIL FROM: -R:457-4.5.7 Your Credential need to be checked +R:457-4.5.7 Your Credential ( -1) need to be checked R:457 5.5.3 Closing connection R:Disconnected #------------------------------------------------------------------------- diff --git a/lib/lvleml.c b/lib/lvleml.c index 746e9ed..b35ffd4 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -1342,9 +1342,12 @@ return done; /* */ /************************************************/ #ifdef MODEDEBUG + static _Bool set_orgn_rmtip(CONTYP *contact,char *rmtip) { +#define OPEP "lvleml.c:set_orgn_rmtip," + _Bool isok; AFNTYP *afn; @@ -1357,12 +1360,28 @@ if ((afn=afn_getoneipnum(rmtip))!=(AFNTYP *)0) { contact->peerip=strdup(rmtip); contact->peername=rou_freestr(contact->peername); contact->peername=dns_get_reverse_addr(reverse); + switch (contact->privilege) { + case rel_authentic : + break; + case rel_isrelay : + //NO BREAK; + case rel_plain : + if (afn_is_ip_relayable(contact->peerip,contact->relayok)==true) + contact->privilege=rel_isrelay; //IP is relayable + break; + default : + (void) rou_alert(0,"%s unexpeced privilege '%d' (Bug?)", + OPEP,contact->privilege); + break; + } reverse=rou_freestr(reverse); afn=afn_freeipnum(afn); isok=true; } (void) signon(contact); return isok; + +#undef OPEP } #endif /* @@ -1418,9 +1437,10 @@ while (proceed==true) { switch (contact->privilege) { case rel_authentic : //User was authenticated break; - case rel_isrelay : //Remote IP is relay - break; - case rel_plain : + case rel_plain : //remote IP is Bplain + //NO BREAK; + case rel_isrelay : //Remote IP way already relay + contact->privilege=rel_plain; if ((status=checkcredit(contact))!=CMDOK) { (void) transmit(contact,true,"%d 5.5.3 Closing connection",status); phase=999; //bad credit not need to go further diff --git a/lib/subafn.c b/lib/subafn.c index 4f5b868..2837b5c 100644 --- a/lib/subafn.c +++ b/lib/subafn.c @@ -317,8 +317,7 @@ afnnum=(AFNTYP *)0; phase=0; proceed=true; while (proceed==true) { - (void) fprintf(stderr,"%s JMPDBG DEBUGING phase='%d', oneipstr=<%s>\n", - OPEP,phase,oneipstr); + //(void) fprintf(stderr,"%s JMPDBG phase='%d'\n",OPEP,phase); switch (phase) { case 0 : /*lets say ip format ok */ afnnum=(AFNTYP *)calloc(1,sizeof(AFNTYP)); -- 2.47.3