From: Jean-Marc Pigeon Date: Thu, 11 Sep 2025 17:35:24 +0000 (-0400) Subject: Able to capture email header subject X-Git-Tag: tag-0.17~73 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=aba33ae0370900c16afb3722036904f32cfeed20;p=jmp%2Fmailleur Able to capture email header subject --- diff --git a/lib/geseml.c b/lib/geseml.c index b7aef4e..fb19cc9 100644 --- a/lib/geseml.c +++ b/lib/geseml.c @@ -194,14 +194,15 @@ if (tra!=(TRATYP *)0) { status=true; (void) strftime(temps,sizeof(temps),"#%Y-%m-%d %H:%M:%S", localtime(&(tra->date))); - (void) snprintf(line,sizeof(line),"%c\t%lu\t%05u%*s %*s %*s \"%*s\"", + (void) snprintf(line,sizeof(line),"%c\t%lu\t%05u%*s %*s %*s \"%*s\" %s", tra->code, tra->date, tra->delay, 32,tra->sessid, 30,tra->rcptto, 30,tra->sfrom, - 30,tra->hfrom + 30,tra->hfrom, + tra->hsubject ); (void) print_tra(qfile,line,temps); if (tra->resp!=(char **)0) { @@ -330,7 +331,7 @@ PUBLIC TRATYP **eml_scanqfile(TRATYP **list,FILE *qfile) { #define OPEP "geseml.c:eml_scanqfile," -#define FMT "%c %ld %d %s %s %s \"%[^\"]\"" +#define FMT "%c %ld %d %s %s %s \"%[^\"]\" %99[^\n]" TRATYP *cur; //previous trans record char *ptr; @@ -341,6 +342,7 @@ while ((ptr=fgets(line,sizeof(line),qfile))!=(char *)0) { char id[300]; char sfrom[100]; char hfrom[100]; + char hsubject[100]; char to[100]; char code; u_long date; @@ -371,7 +373,8 @@ while ((ptr=fgets(line,sizeof(line),qfile))!=(char *)0) { case 'R' : case 'W' : (void) memset(hfrom,'\000',sizeof(hfrom)); - if (sscanf(line,FMT,&code,&date,&delay,id,to,sfrom,hfrom)!=7) { + (void) memset(hsubject,'\000',sizeof(hsubject)); + if (sscanf(line,FMT,&code,&date,&delay,id,to,sfrom,hfrom,hsubject)!=8) { (void) rou_alert(0,"%s Unable to scan (config?)",OPEP,line); phase=999; //No data within line } @@ -397,7 +400,7 @@ while ((ptr=fgets(line,sizeof(line),qfile))!=(char *)0) { cur->rcptto=strdup(to); cur->sfrom=strdup(sfrom); cur->hfrom=strdup(hfrom); - (void) rou_alert(0,"%s hfrom=<%s>",OPEP,cur->hfrom); + cur->hsubject=strdup(hsubject); list=(TRATYP **)rou_addlist((void **)list,(void *)cur); } break; @@ -941,8 +944,8 @@ if ((line!=(char *)0)&&(strlen(line)>0)) { session->hfrom=strdup(line+max); break; case 1 : //Inserting the header from in session - session->title=rou_freestr(session->title); - session->title=strdup(line+max); + session->hsubject=rou_freestr(session->hsubject); + session->hsubject=strdup(line+max); break; default : (void) rou_alert(0,"%s Code missing for Head entrey <%s> (Bug?!)", diff --git a/lib/gessql.c b/lib/gessql.c index 40f0735..86f8ea3 100644 --- a/lib/gessql.c +++ b/lib/gessql.c @@ -517,7 +517,7 @@ for (int i=0;(isok==true)&&(sesfield[i].name!=(char *)0);i++) { case 0 : //session ID break; //nothing to do case 1 : //title - data=sql_gooddata(sqlptr,(*ses)->title); + data=sql_gooddata(sqlptr,(*ses)->hsubject); break; //nothing to do case 2 : //sfrom data=sql_gooddata(sqlptr,(*ses)->sfrom); diff --git a/lib/lvleml.c b/lib/lvleml.c index bcc5776..7004150 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -2844,10 +2844,14 @@ if ((contact!=(CONTYP *)0)&&(contact->recipients!=(RCPTYP **)0)) { tra->sessid=strdup(contact->session->sessid); tra->sfrom=strdup(contact->mailfrom); tra->rcptto=strdup(data); - (void) strcpy(data,"hfrom missing"); + (void) strcpy(data,"email header, 'From:' missing"); if (contact->session->hfrom!=(char *)0) - (void) strcpy(data,contact->session->hfrom); + (void) strncpy(data,contact->session->hfrom,sizeof(data)); tra->hfrom=strdup(data); + (void) strcpy(data,"email header, 'Subject:' missing"); + if (contact->session->hsubject!=(char *)0) + (void) strncpy(data,contact->session->hsubject,sizeof(data)); + tra->hsubject=strdup(data); tralist=(TRATYP **)rou_addlist((void **)tralist,(void *)tra); ptr++; } diff --git a/lib/unieml.c b/lib/unieml.c index bc5ec08..fe7d090 100644 --- a/lib/unieml.c +++ b/lib/unieml.c @@ -98,6 +98,7 @@ if (tra!=(TRATYP *)0) { (void) eml_freetra_resp(tra); tra->rcptto=rou_freestr(tra->rcptto); tra->sfrom=rou_freestr(tra->sfrom); + tra->hsubject=rou_freestr(tra->hsubject); tra->hfrom=rou_freestr(tra->hfrom); tra->rcptto=rou_freestr(tra->rcptto); tra->sessid=rou_freestr(tra->sessid); diff --git a/lib/unieml.h b/lib/unieml.h index ea2b37b..a90747c 100644 --- a/lib/unieml.h +++ b/lib/unieml.h @@ -101,6 +101,7 @@ typedef struct { char *sessid; //session id char *sfrom; //Email SMTP Originator char *hfrom; //Email HEADER originator + char *hsubject; //Email HEADER subject char *rcptto; //Email Recipient int sendcode; //Email sending status; char **resp; //Transfer response status diff --git a/lib/unisql.c b/lib/unisql.c index 26f25f9..1ffdebe 100644 --- a/lib/unisql.c +++ b/lib/unisql.c @@ -128,10 +128,10 @@ PUBLIC SESTYP *sql_freeses(SESTYP *ses) { if (ses!=(SESTYP *)0) { ses->duration=rou_freestr(ses->duration); + ses->hsubject=rou_freestr(ses->hsubject); ses->hfrom=rou_freestr(ses->hfrom); ses->sfrom=rou_freestr(ses->sfrom); ses->sessid=rou_freestr(ses->sessid); - ses->title=rou_freestr(ses->title); (void) free(ses); ses=(SESTYP *)0; } diff --git a/lib/unisql.h b/lib/unisql.h index 20bf8f4..62f0b6e 100644 --- a/lib/unisql.h +++ b/lib/unisql.h @@ -41,9 +41,9 @@ typedef struct { //with a remote server typedef struct { char *sessid; //session id - char *title; //the email title - char *sfrom; //the "mail from" comming from SMTP exchange - char *hfrom; //the "mail from" as within the email header + char *sfrom; //the "mail from" coming from SMTP exchange + char *hsubject; //the "Subject:" as within the email header + char *hfrom; //the "From:" as within the email header char *duration; //Session duration un millisec u_long taille; //Email size }SESTYP;