*/
/************************************************/
/* */
-/* 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;
+}
+/*
+\f
+*/
+/************************************************/
+/* */
+/* Procedure to reset the current session */
/* */
/************************************************/
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;
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);