-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackalias.c
78 lines (72 loc) · 1.47 KB
/
backalias.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
#include <string.h>
#include "xutil.h"
#include "lutil.h"
#include "ftn.h"
#include "needed.h"
char *backalias(faddr *);
void readalias(char *);
static struct aliaslist {
struct aliaslist *next;
faddr *addr;
char *alias;
} *alist = NULL;
char *backalias(fa)
faddr *fa;
{
struct aliaslist *tmp;
for (tmp=alist;tmp;tmp=tmp->next)
if ((!fa->domain || !tmp->addr->domain ||
!strcasecmp(fa->domain,tmp->addr->domain)) &&
(!fa->zone || (fa->zone == tmp->addr->zone)) &&
(fa->net == tmp->addr->net) &&
(fa->node == tmp->addr->node) &&
(fa->point == tmp->addr->point) &&
(fa->name) && (tmp->addr->name) &&
(strcasecmp(fa->name,tmp->addr->name) == 0))
{
debug(6,"Address \"%s\" has local alias \"%s\"",
ascinode(fa,0x7f),S(tmp->alias));
return tmp->alias;
}
return NULL;
}
void readalias(fn)
char *fn;
{
FILE *fp;
char buf[256],*k,*v;
struct aliaslist *tmp=NULL;
faddr *ta = NULL;
if ((fp=fopen(fn,"r")) == NULL)
{
logerr("$cannot open system alias file %s",S(fn));
return;
}
while (fgets(buf,sizeof(buf)-1,fp))
{
k=strtok(buf," \t:");
v=strtok(NULL," \t:");
if (k && v)
if ((ta=parsefaddr(v)))
{
if (alist)
{
tmp->next=(struct aliaslist *)
xmalloc(sizeof(struct aliaslist));
tmp=tmp->next;
}
else
{
alist=(struct aliaslist *)
xmalloc(sizeof(struct aliaslist));
tmp=alist;
}
tmp->next=NULL;
tmp->addr=ta;
ta=NULL;
tmp->alias=xstrcpy(k);
}
}
fclose(fp);
}