From: Jean-Marc Pigeon (Delson) Date: Fri, 14 Mar 2025 15:15:41 +0000 (-0400) Subject: Starting to implement "mail from:" X-Git-Tag: tag-0.7~73 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=4943a6ba4803b97ceac53696c52248a8d8bbb43f;p=jmp%2Fmailleur Starting to implement "mail from:" --- diff --git a/lib/gestcp.h b/lib/gestcp.h index 19aa785..bd43d3f 100644 --- a/lib/gestcp.h +++ b/lib/gestcp.h @@ -24,6 +24,7 @@ typedef struct { int numreset; //number of SMTP reset received char *mainsesid;//session main ID char *cursesid; //current session ID + char *mailfrom; //current mail from originator LOGPTR *logptr; //reference to session log }CONTYP; diff --git a/lib/lvleml.c b/lib/lvleml.c index 3c4167e..f264be7 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -187,7 +187,50 @@ return done; */ /************************************************/ /* */ -/* Procedure to rset the current session */ +/* Procedure to manage a "MAIL FROM:" */ +/* ommand from the SMTP client. */ +/* */ +/************************************************/ +static _Bool checkfrom(CONTYP *contact,char *mailfrom) + +{ +_Bool success; +_Bool proceed; +int phase; + +success=false; +proceed=true; +phase=0; +while (proceed==true) { + switch (phase) { + case 0 : //do we have already a from + if (contact->mailfrom!=(char *)0) { + (void) transmit(contact,"%d 5.5.1 %s %s already specified as originator", + BADPAR,MAILF,contact->mailfrom); + phase=999; //no need to go further + } + break; + case 1 : //clean mailfrom + break; + case 2 : //everything ok + contact->mailfrom=strdup(mailfrom); + (void) transmit(contact,"%d 2.1.0 %s.. sender ok", + CMDOK,contact->mailfrom); + break; + default : //SAFE guard + proceed=false; + break; + } + phase++; + } +return success; +} +/* + +*/ +/************************************************/ +/* */ +/* Procedure to reset the current session */ /* */ /************************************************/ static _Bool doreset(CONTYP *contact,char *parameter) @@ -195,6 +238,7 @@ static _Bool doreset(CONTYP *contact,char *parameter) { (void) transmit(contact,"%d 2.0.0 Flushed session %s",CMDOK,contact->cursesid); contact->numreset++; +contact->mailfrom=rou_freestr(contact->mailfrom); contact->cursesid=rou_freestr(contact->cursesid); contact->cursesid=eml_getcursesid(contact->mainsesid,contact->numreset); return true; @@ -245,6 +289,7 @@ while (proceed==true) { break; case c_mail : //MAIL FROM: checking originator (void) rou_alert(0,"JMPDBG parameter=<%s>",line); + (void) checkfrom(contact,line); break; case c_rset : //Doing session reset proceed=doreset(contact,line);