V10/cmd/nupas/send/gateway.c
#include <stdio.h>
#include "mail.h"
#include "string.h"
#include "message.h"
#include "dest.h"
/*
* Translate the last component of the sender address. If the translation
* yields the same address, replace the sender with its last component.
*/
extern int
gateway(mp)
message *mp;
{
char *base;
dest *dp=NULL;
static FILE *fp;
extern dest *up_bind();
char *sp;
char system[128];
extern char *thissys;
/* first remove all systems equivalent to us */
for (base = s_to_c(mp->sender); *base;){
sp = strchr(base, '!');
if(sp==NULL)
break;
*sp = '\0';
if(lookup(base, "equivlist", &fp, 0, 0)==1){
/* found or us, forget this system */
*sp='!';
base=sp+1;
} else {
/* no files or system is not found, and not us */
*sp='!';
break;
}
}
/* punt if this is not a compound address */
sp = strrchr(base, '!');
if (sp==NULL)
goto rebuild;
sp++;
/* bind the address to a command */
d_insert(&dp, d_new(s_copy(sp)));
dp->authorized = 1;
dp = up_bind(dp, mp, 0);
/* punt if translation did not succeed or resulted in multiple targets */
if (dp==NULL || dp->next!=dp || dp->status!=d_pipe)
goto rebuild;
/* punt if the translation didn't result in the original address */
if (strcmp(s_to_c(dp->addr), base)!=0)
goto rebuild;
base=sp;
rebuild:
if(base!=s_to_c(mp->sender))
mp->sender = s_copy(base);
}