Skip to content
Snippets Groups Projects
Commit 7e83c8b7 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Move the special FTN/QWKnet address formatting to a userdat-exported function

smtp_netmail_addr() - not currently used anywhere else, but may be someday.
load/mailutil.js's fidoaddr_to_emailaddr() has this same logic (for FTN addrs
at least and is now used by nntpservice.js).

Also, always pass a buffer to smb_faddrtoa() from the mail server since it's
multi-threaded and its unsafe to pass NULL (using a static local buffer).
parent f35340ec
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #4015 failed
......@@ -665,8 +665,6 @@ static ulong sockmimetext(SOCKET socket, const char* prot, CRYPT_SESSION sess, s
,str_list_t file_list, char* mime_boundary)
{
char toaddr[256]="";
char fromaddr[256]="";
char fromhost[256];
char msgid[256];
char tmp[256];
char date[64];
......@@ -695,26 +693,8 @@ static ulong sockmimetext(SOCKET socket, const char* prot, CRYPT_SESSION sess, s
s=sockprintf(socket,prot,sess,"From: %s",p); /* use original RFC822 header field */
else {
char fromname[256];
SAFEPRINTF(fromname, "\"%s\"", msg->from);
if(msg->from_net.type==NET_QWK && msg->from_net.addr!=NULL)
SAFEPRINTF2(fromaddr,"%s!%s"
,(char*)msg->from_net.addr
,usermailaddr(&scfg,fromhost,msg->from));
else if(msg->from_net.type==NET_FIDO && msg->from_net.addr!=NULL) {
faddr_t* faddr = (faddr_t *)msg->from_net.addr;
char faddrstr[128];
SAFEPRINTF2(fromname,"\"%s\" (%s)", msg->from, smb_faddrtoa(faddr, NULL));
if(faddr->point)
SAFEPRINTF4(faddrstr,"p%hu.f%hu.n%hu.z%hu"FIDO_TLD
,faddr->point, faddr->node, faddr->net, faddr->zone);
else
SAFEPRINTF3(faddrstr,"f%hu.n%hu.z%hu"FIDO_TLD
,faddr->node, faddr->net, faddr->zone);
SAFEPRINTF2(fromaddr,"%s@%s", usermailaddr(NULL,fromhost,msg->from), faddrstr);
} else if(msg->from_net.type!=NET_NONE && msg->from_net.addr!=NULL)
SAFECOPY(fromaddr,(char*)msg->from_net.addr);
else
usermailaddr(&scfg,fromaddr,msg->from);
char fromaddr[256];
smtp_netmailaddr(&scfg, msg, fromname, sizeof(fromname), fromaddr, sizeof(fromaddr));
s = sockprintf(socket,prot,sess,"From: %s %s", fromname, angle_bracket(tmp, sizeof(tmp), fromaddr));
}
if(!s)
......@@ -747,7 +727,8 @@ static ulong sockmimetext(SOCKET socket, const char* prot, CRYPT_SESSION sess, s
else
s=sockprintf(socket,prot,sess,"To: \"%s\" <%s>",msg->to,(char*)msg->to_net.addr);
} else if(msg->to_net.type==NET_FIDO) {
s=sockprintf(socket,prot,sess,"To: \"%s\" (%s)",msg->to, smb_faddrtoa((fidoaddr_t*)msg->to_net.addr, NULL));
char faddrbuf[64];
s=sockprintf(socket,prot,sess,"To: \"%s\" (%s)",msg->to, smb_faddrtoa((fidoaddr_t*)msg->to_net.addr, faddrbuf));
} else {
usermailaddr(&scfg,toaddr,msg->to);
s=sockprintf(socket,prot,sess,"To: \"%s\" <%s>",msg->to,toaddr);
......@@ -4654,12 +4635,14 @@ static void smtp_thread(void* arg)
faddr.net = net;
faddr.zone = zone;
char faddrstr[64];
smb_faddrtoa(&faddr, faddrstr);
lprintf(LOG_INFO,"%04d %s %s %s relaying to FidoNet address: %s (%s)"
,socket, client.protocol, client_id, relay_user.alias, p, smb_faddrtoa(&faddr, NULL));
,socket, client.protocol, client_id, relay_user.alias, p, faddrstr);
fprintf(rcptlst,"[%u]\n",rcpt_count++);
fprintf(rcptlst,"%s=%s\n",smb_hfieldtype(RECIPIENT), p);
fprintf(rcptlst,"%s=%u\n",smb_hfieldtype(RECIPIENTNETTYPE),NET_FIDO);
fprintf(rcptlst,"%s=%s\n",smb_hfieldtype(RECIPIENTNETADDR),smb_faddrtoa(&faddr,NULL));
fprintf(rcptlst,"%s=%s\n",smb_hfieldtype(RECIPIENTNETADDR),faddrstr);
fprintf(rcptlst,"%s=%s\n",smb_hfieldtype(SMTPFORWARDPATH),rcpt_to);
sockprintf(socket,client.protocol,session,ok_rsp);
......
......@@ -2880,6 +2880,38 @@ char* usermailaddr(scfg_t* cfg, char* addr, const char* name)
return(addr);
}
/****************************************************************************/
/* Convert a sender's name/address from a message header into Synchronet */
/* SMTP-server-routable form */
/****************************************************************************/
void smtp_netmailaddr(scfg_t* cfg, smbmsg_t* msg, char* name, size_t namelen, char* addr, size_t addrlen)
{
char addrbuf[256];
if(name != NULL)
snprintf(name, namelen, "\"%s\"", msg->from);
if(msg->from_net.type==NET_QWK && msg->from_net.addr!=NULL)
snprintf(addr, addrlen, "%s!%s"
,(char*)msg->from_net.addr
,usermailaddr(cfg, addrbuf, msg->from));
else if(msg->from_net.type==NET_FIDO && msg->from_net.addr!=NULL) {
faddr_t* faddr = (faddr_t *)msg->from_net.addr;
char faddrstr[128];
if(name != NULL)
snprintf(name, namelen, "\"%s\" (%s)", msg->from, smb_faddrtoa(faddr, faddrstr));
if(faddr->point)
SAFEPRINTF4(faddrstr,"p%hu.f%hu.n%hu.z%hu"FIDO_TLD
,faddr->point, faddr->node, faddr->net, faddr->zone);
else
SAFEPRINTF3(faddrstr,"f%hu.n%hu.z%hu"FIDO_TLD
,faddr->node, faddr->net, faddr->zone);
snprintf(addr, addrlen, "%s@%s", usermailaddr(NULL, addrbuf, msg->from), faddrstr);
} else if(msg->from_net.type!=NET_NONE && msg->from_net.addr!=NULL)
snprintf(addr, addrlen, (char*)msg->from_net.addr);
else
usermailaddr(cfg, addr, msg->from);
}
char* alias(scfg_t* cfg, const char* name, char* buf)
{
char line[128];
......
......@@ -70,6 +70,7 @@ DLLEXPORT char* format_birthdate(scfg_t*, const char* birthdate, char* out, size
DLLEXPORT const char* birthdate_format(scfg_t*);
DLLEXPORT char* username(scfg_t*, int usernumber, char * str);
DLLEXPORT char* usermailaddr(scfg_t*, char* addr, const char* name);
DLLEXPORT void smtp_netmailaddr(scfg_t*, smbmsg_t*, char* name, size_t namelen, char* addr, size_t addrlen);
DLLEXPORT int opennodedat(scfg_t*);
DLLEXPORT int opennodeext(scfg_t*);
DLLEXPORT int getnodedat(scfg_t*, uint number, node_t *node, BOOL lockit, int* file);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment