typedef struct {
SOCPTR *socptr; //socket to remote pointer
LOGPTR *logptr; //Log pointer
- const char *domain; //Domain to be reached
+ char *orgdomain; //originator domain
+ char *dstdomain; //Domain to be reached
MXTYP *curmx; //Current MX number
MXTYP **mxs; //MX list form domain
}RMTTYP;
case 0 : //Sending EHLO
char cmt[100];
- (void) snprintf(cmt,sizeof(cmt),"EHLO %s",rmt->domain);
+ (void) snprintf(cmt,sizeof(cmt),"EHLO %s",rmt->orgdomain);
(void) tcp_write(rmt->socptr,cmt);
(void) log_fprintlog(rmt->logptr,false,cmt);
break;
case 0 : //do we have MX
if (rmt->mxs==(MXTYP **)0) {
(void) log_fprintlog(rmt->logptr,false,"NO MX found for domain <%s>",
- rmt->domain);
+ rmt->dstdomain);
phase=999;
}
break;
/* Procedure to send the whole email transaction */
/* */
/********************************************************/
-static void sending_email(char *domain,char *sessid,TRATYP **tra)
+static void sending_email(char *orgdomain,char *dstdomain,char *sessid,TRATYP **tra)
{
#define OPEP "lvleml.c:sending_email,"
isnow=time((time_t *)0);
(void) memset(&rmt,'\000',sizeof(rmt));
-rmt.mxs=dns_getmx(domain);
-rmt.domain=domain;
+rmt.mxs=dns_getmx(dstdomain);
+rmt.dstdomain=dstdomain;
+rmt.orgdomain=orgdomain;
tosend=(TRATYP **)0;
phase=0;
proceed=true;
char cmt[100];
(void) snprintf(cmt,sizeof(cmt),"Unable to contact ANY MX for domain <%s>",
- domain);
+ dstdomain);
(void) log_fprintlog(rmt.logptr,false,cmt);
phase=999; //No need to go further
}
{
#define OPEP "lvleml.c:eml_remote_email,"
-char *domain;
+char *orgdomain;
+char *dstdomain;
char *sessid;
int phase;
_Bool proceed;
-domain=(char *)0;
+orgdomain=(char *)0;
+dstdomain=(char *)0;
sessid=(char *)0;
phase=0;
proceed=true;
phase=999;
}
break;
- case 1 : //detecting remote domain
- if ((domain=strrchr((*tra)->rcptto,'@'))!=(char *)0)
- domain++;
- if (domain==(char *)0) {
+ case 1 : //set originator domain
+ if ((orgdomain=strrchr((*tra)->mailfrom,'@'))!=(char *)0)
+ orgdomain++;
+ if (orgdomain==(char *)0) {
+ (void) rou_alert(0,"%s Originator address <%s> without domain? (Bug?)",
+ OPEP,(*tra)->mailfrom);
+ phase=999;
+ }
+ break;
+ case 2 : //detecting remote domain
+ if ((dstdomain=strrchr((*tra)->rcptto,'@'))!=(char *)0)
+ dstdomain++;
+ if (dstdomain==(char *)0) {
(void) rou_alert(0,"%s Recipient address <%s> without domain? (Bug?)",
OPEP,(*tra)->rcptto);
phase=999;
}
break;
- case 2 : //checking if we have a session ID
+ case 3 : //checking if we have a session ID
sessid=(*tra)->sessid;
if (sessid==(char *)0) {
(void) rou_alert(0,"%s Session ID is NULL (Bug?)",OPEP);
- phase=999;
+ sessid="0000-0000";
}
break;
- case 3 : //sending the whole transaction to remote server
- (void) sending_email(domain,sessid,tra);
+ case 4 : //sending the whole transaction to remote server
+ (void) sending_email(orgdomain,dstdomain,sessid,tra);
break;
default : //SAFE Guard
proceed=false;