|
|
1.1 root 1: C#include "mgr.h"
2:
3: Config *confhead;
4: Config *conftail;
5:
6: /*
7: * Create a new configuration entry. The entries are of the form
8: * address-re path-se my-address
9: * where:
10: * `address-re' is a regular expression matching a network address
11: * `path-se' is a substitution expression to convert the address into
12: * an ipc path
13: * `my-address' is this machine's address on this network. This
14: * field is optional.
15: */
16: Config *
17: newconfig(cp)
18: char *cp;
19: {
20: Config *cnp = (Config *)malloc(sizeof(Config));
21: # define FIELDS 3
22: char *fields[FIELDS];
23: int n;
24:
25: if(cnp==NULL) {
26: logevent("out of memory allocating configuration\n");
27: return NULL;
28: }
29: cnp->myaddr = cnp->pathse = NULL;
30: cnp->addrre = NULL;
31: setfields(" \t");
32: n = getmfields(cp, fields, FIELDS);
33: switch(n) {
34: case 0:
35: freemap(mp);
36: return NULL;
37: case 1:
38: fields[1] = ".*";
39: case 2:
40: fields[2] = ".*";
41: case 3:
42: fields[3] = "&";
43: break;
44: case 4:
45: break;
46: default:
47: logevent("incorrect number of fields in mapping %s\n", fields[0]);
48: freemap(mp);
49: return NULL;
50: }
51: if((mp->serv=nregcomp(fields[0]))==NULL
52: || (mp->from=nregcomp(fields[1]))==NULL
53: || (mp->user=nregcomp(fields[2]))==NULL) {
54: logevent("illegal reg exp in mapping `%s %s %s %s'\n", fields[0],
55: fields[1], fields[2], fields[3]);
56: freemap(mp);
57: return NULL;
58: }
59: mp->luser = strdup(fields[3]);
60: logevent("newmap(%s %s %s %s)\n", fields[0], fields[1], fields[2], fields[3]);
61: return mp;
62: }
63:
64: freeconfig(cp)
65: Config *cp;
66: {
67: if(mp==NULL)
68: return;
69: if(mp->from)
70: free((char *)mp->from);
71: if(mp->serv)
72: free((char *)mp->serv);
73: if(mp->user)
74: free((char *)mp->user);
75: if(mp->luser)
76: free(mp->luser);
77: }
78:
79: /*
80: * add a map entry
81: */
82: addconfig(mp)
83: Config *cp;
84: {
85: mp->next = NULL;
86: if(maphead==NULL)
87: maphead = mp;
88: else
89: maptail->next = mp;
90: maptail = mp;
91: }
92:
93: /*
94: * free all map entries
95: */
96: resetconfigs()
97: {
98: Mapping *mp, *nxt;
99:
100: logevent("resetmaps()\n");
101: for(mp=maphead; mp; mp=nxt) {
102: nxt = mp->next;
103: freemap(mp);
104: }
105: maphead = maptail = NULL;
106: }
107:
108: /*
109: * return a new user id for call
110: */
111: char *
112: mapuser(service, source, user)
113: char *service;
114: char *source;
115: char *user;
116: {
117: Mapping *mp;
118: regsubexp sub[10];
119: static char luser[ARB];
120:
121: for(mp=maphead; mp; mp=mp->next) {
122: if(!regexec(mp->serv, service, 0, 0))
123: continue;
124: if(!regexec(mp->from, source, 0, 0))
125: continue;
126: if(!regexec(mp->user, user, sub, 10))
127: continue;
128: regsub(mp->luser, luser, sub, 10);
129: return luser;
130: }
131: return NULL;
132: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.