Annotation of researchv10no/cmd/upas/send/chkfwd.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <ctype.h>
                      3: #include "mail.h"
                      4: #include "string.h"
                      5: #include "aux.h"
                      6: 
                      7: #define GFLIST "forwardlist"
                      8: #define LFLIST "forwardlist.lo"
                      9: 
                     10: /* predeclared */
                     11: static int ok();
                     12: static int okfile();
                     13: 
                     14: /* return true if ok to forward for this address.
                     15:  * `addr' is a list of ! delimited systems.
                     16:  */
                     17: extern int
                     18: ok_to_forward(addr)
                     19:        char *addr;
                     20: {
                     21:        char system[128];
                     22:        char *ap, *sp;
                     23:        static FILE *lfp;
                     24:        static FILE *gfp;
                     25: 
                     26:        for (ap = addr; *ap; ap++){
                     27:                for (sp = system; *ap && *ap!='!'; sp++, ap++)
                     28:                        *sp = *ap;
                     29:                *sp = '\0';
                     30:                if (*ap != '!')
                     31:                        return 1;
                     32:                switch(lookup(system, LFLIST, &lfp, GFLIST, &gfp)){
                     33:                case -1:
                     34:                        /* no files */
                     35:                        return 1;
                     36:                case 1:
                     37:                        /* found */
                     38:                        break;
                     39:                case 0:
                     40:                        /* not found */
                     41:                        return 0;
                     42:                default:
                     43:                        /* call presotto */
                     44:                        break;
                     45:                }
                     46:        }
                     47:        return 1;
                     48: }
                     49: 
                     50: /* return 1 if name found in one of the files
                     51:  *       0 if name not found in one of the files
                     52:  *       -1 if neither file exists
                     53:  */
                     54: int
                     55: lookup(cp, local, lfpp, global, gfpp)
                     56:        char *cp;
                     57:        char *local;
                     58:        FILE **lfpp;
                     59:        char *global;
                     60:        FILE **gfpp;
                     61: {
                     62:        static string *file = NULL;
                     63: 
                     64:        if (local) {
                     65:                if (file == NULL)
                     66:                        file = s_new();
                     67:                abspath(local, UPASROOT, s_restart(file));
                     68:                if (*lfpp != NULL || (*lfpp = fopen(s_to_c(file), "r")) != NULL) {
                     69:                        fseek(*lfpp, (long)0, 0);
                     70:                        if (okfile(cp, *lfpp))
                     71:                                return 1;
                     72:                } else
                     73:                        local = 0;
                     74:        }
                     75:        if (global) {
                     76:                abspath(global, UPASROOT, s_restart(file));
                     77:                if (*gfpp != NULL || (*gfpp = fopen(s_to_c(file), "r")) != NULL) {
                     78:                        fseek(*gfpp, (long)0, 0);
                     79:                        if (okfile(cp, *gfpp))
                     80:                                return 1;
                     81:                } else
                     82:                        global = 0;
                     83:        }
                     84:        return (local || global)? 0 : -1;
                     85: }
                     86: 
                     87: static
                     88: okfile(cp, fp)
                     89: char *cp;
                     90: FILE *fp;
                     91: {
                     92:        char buf[128];
                     93:        int len;
                     94:        char *bp;
                     95:        int c;
                     96: 
                     97:        len = strlen(cp);
                     98:        
                     99:        /* one iteration per system name in the file */
                    100:        while (fgets (buf, sizeof buf, fp) != NULL) {
                    101:                buf[strlen(buf)-1] = '\0';
                    102:                for(bp=buf; *bp;){
                    103:                        while(isspace(*bp) || *bp==',')
                    104:                                bp++;
                    105:                        if (strncmp (bp, cp, len) == 0) {
                    106:                                c = *(bp+len);
                    107:                                if(isspace(c) || c=='\0' || c==',')
                    108:                                        return 1;
                    109:                        }
                    110:                        while(*bp && (!isspace(*bp)) && *bp!=',')
                    111:                                bp++;
                    112:                }
                    113:        }
                    114: 
                    115:        /* didn't find it, prohibit forwarding */
                    116:        return 0;
                    117: }

unix.superglobalmegacorp.com

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