Annotation of researchv10no/cmd/nupas/send/gateway.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include "mail.h"
                      3: #include "string.h"
                      4: #include "message.h"
                      5: #include "dest.h"
                      6: 
                      7: /*
                      8:  *  Translate the last component of the sender address.  If the translation
                      9:  *  yields the same address, replace the sender with its last component.
                     10:  */
                     11: extern int
                     12: gateway(mp)
                     13:        message *mp;
                     14: {
                     15:        char *base;
                     16:        dest *dp=NULL;
                     17:        static FILE *fp;
                     18:        extern dest *up_bind();
                     19:        char *sp;
                     20:        char system[128];
                     21:        extern char *thissys;
                     22: 
                     23:        /* first remove all systems equivalent to us */
                     24:        for (base = s_to_c(mp->sender); *base;){
                     25:                sp = strchr(base, '!');
                     26:                if(sp==NULL)
                     27:                        break;
                     28:                *sp = '\0';
                     29:                if(lookup(base, "equivlist", &fp, 0, 0)==1){
                     30:                        /* found or us, forget this system */
                     31:                        *sp='!';
                     32:                        base=sp+1;
                     33:                } else {
                     34:                        /* no files or system is not found, and not us */
                     35:                        *sp='!';
                     36:                        break;
                     37:                }
                     38:        }
                     39: 
                     40:        /* punt if this is not a compound address */
                     41:        sp = strrchr(base, '!');
                     42:        if (sp==NULL)
                     43:                goto rebuild;
                     44:        sp++;
                     45: 
                     46:        /* bind the address to a command */
                     47:        d_insert(&dp, d_new(s_copy(sp)));
                     48:        dp->authorized = 1;
                     49:        dp = up_bind(dp, mp, 0);
                     50: 
                     51:        /* punt if translation did not succeed or resulted in multiple targets */
                     52:        if (dp==NULL || dp->next!=dp || dp->status!=d_pipe)
                     53:                goto rebuild;
                     54: 
                     55:        /* punt if the translation didn't result in the original address */
                     56:        if (strcmp(s_to_c(dp->addr), base)!=0)
                     57:                goto rebuild;
                     58:        base=sp;
                     59: rebuild:
                     60:        if(base!=s_to_c(mp->sender))
                     61:                mp->sender = s_copy(base);
                     62: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.