From af65a18a9e82bb2bb6c2e280415153046ec13b65 Mon Sep 17 00:00:00 2001 From: "Jean-Marc Pigeon (Delson)" Date: Thu, 22 May 2025 14:42:13 -0400 Subject: [PATCH] Improving received header insertion --- data-feed/feed02.tst | 2 ++ data-feed/xxfeed.tst | 2 ++ lib/devsoc.c | 5 +++- lib/lvleml.c | 54 ++++++++++++++++++++++++++++++++++++++------ lib/lvleml.h | 1 + 5 files changed, 56 insertions(+), 8 deletions(-) diff --git a/data-feed/feed02.tst b/data-feed/feed02.tst index cff9b24..0504957 100644 --- a/data-feed/feed02.tst +++ b/data-feed/feed02.tst @@ -6,6 +6,8 @@ R:220 mailleur.example.com ESMTP (cleartext) emlrcvr... S:HELO example.com #R:250-mailleur.example.com, link (cleartext) ready, your IP/FQDN=[127.127.0.2/feed2.example.com] R:250-mailleur.example.com, link (cleartext) ready,... +C:GOTLS +R:250 Link now encryp... S:MAIL FROM: R:250 2.1.3 postmaster@example.com.. sender ok S:RCPT TO: diff --git a/data-feed/xxfeed.tst b/data-feed/xxfeed.tst index cff9b24..0504957 100644 --- a/data-feed/xxfeed.tst +++ b/data-feed/xxfeed.tst @@ -6,6 +6,8 @@ R:220 mailleur.example.com ESMTP (cleartext) emlrcvr... S:HELO example.com #R:250-mailleur.example.com, link (cleartext) ready, your IP/FQDN=[127.127.0.2/feed2.example.com] R:250-mailleur.example.com, link (cleartext) ready,... +C:GOTLS +R:250 Link now encryp... S:MAIL FROM: R:250 2.1.3 postmaster@example.com.. sender ok S:RCPT TO: diff --git a/lib/devsoc.c b/lib/devsoc.c index 1d8d291..1de5f00 100644 --- a/lib/devsoc.c +++ b/lib/devsoc.c @@ -1349,7 +1349,10 @@ if (soc!=(SOCTYP *)0) { data=strdup(host); break; case false : - data=strdup(serv); + char local[NI_MAXHOST+NI_MAXSERV+1]; + + (void) snprintf(local,sizeof(local),"%s:%s",host,serv); + data=strdup(local); break; } break; diff --git a/lib/lvleml.c b/lib/lvleml.c index c8876c8..b9a6d5d 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -47,8 +47,9 @@ if (contact!=(CONTYP *)0) { contact->fqdn=rou_freestr(contact->fqdn); contact->peername=rou_freestr(contact->peername); contact->peerip=rou_freestr(contact->peerip); - contact->locname=rou_freestr(contact->locname); contact->locserv=rou_freestr(contact->locserv); + contact->locip=rou_freestr(contact->locip); + contact->locname=rou_freestr(contact->locname); (void) free(contact); contact=(CONTYP *)0; } @@ -188,13 +189,43 @@ static _Bool addreceived(CONTYP *contact,FILE *data) { _Bool status; +time_t curtime; +int phase; +_Bool proceed; status=true; -(void) fprintf(data,"Received: from %s ([%s])\n",contact->peername,contact->peerip); -(void) fprintf(data,"\t by %s ([%s]/%s-%s)\n", - contact->locname,contact->locserv, - appname,rou_getversion()); -(void) fprintf(data,"\t id <%s@%s>;\n",contact->cursesid,contact->locname); +curtime=time((time_t *)0); +phase=0; +proceed=true; +while (proceed==true) { + switch (phase) { + case 0 : //Inserting the remote information + (void) fprintf(data,"Received: from %s ([%s])\n", + contact->peername,contact->peerip); + break; + case 1 : //Inserting the Receive information + (void) fprintf(data,"\tby %s ([%s:%s]/%s-%s) with ESMTP\n", + contact->locname,contact->locip,contact->locserv, + appname,rou_getversion()); + break; + case 2 : //Inserting TLS information + if (soc_iscrypted(contact->socptr)==true) { + (void) fprintf(data,"\t(JMPDBG crypted)\n"); + } + break; + case 3 : //Inserting ID information + (void) fprintf(data,"\tid <%s@%s>;\n", + contact->cursesid,contact->locname); + break; + case 4 : //date information + (void) fprintf(data,"\t%s\n",rou_ascsysstamp(curtime)); + break; + default : //SAFE Guard + proceed=false; + break; + } + phase++; + } return status; } /* @@ -828,7 +859,16 @@ while (proceed==true) { contact->mainsesid=eml_getmainsesid(); contact->cursesid=eml_getcursesid(contact->mainsesid,contact->numreset); contact->locname=soc_getaddrinfo(contact->socptr,true,true); - contact->locserv=soc_getaddrinfo(contact->socptr,true,false); + contact->locip=soc_getaddrinfo(contact->socptr,true,false); + if (contact->locip!=(char *)0) { + char *ptr; + + //extracting service port number + if ((ptr=strrchr(contact->locip,':'))!=(char *)0) { + *ptr='\000'; + contact->locserv=strdup(ptr+1); + } + } contact->peername=soc_getaddrinfo(contact->socptr,false,true); contact->peerip=soc_getaddrinfo(contact->socptr,false,false); contact->logptr=log_openlog(contact->mainsesid,true); diff --git a/lib/lvleml.h b/lib/lvleml.h index bc49ba8..6d6c216 100644 --- a/lib/lvleml.h +++ b/lib/lvleml.h @@ -19,6 +19,7 @@ typedef struct { SQLPTR *sqlptr; //established contact database access char *fqdn; //fully qualified domain from peer char *locname; //socket local hostname + char *locip; //socket local IP num char *locserv; //local service port char *peerip; //socket remote peer IP char *peername; //socket remote peer FQDN -- 2.47.3