xref: /original-bsd/contrib/usr.x25/lib/verify.c (revision b21da0a0)
1 /*
2  * x25_can_callin(person)
3  * x25_can_callout(person)
4  *	Boolean functions for determining if `person'
5  * 	can charge an incoming (login) or outgoing X.25
6  *	call locally, using the file /etc/x25users.  Each line
7  *	of x25users is of the form
8  *		user [in|out]
9  *	If "in" or "out" is given, the user may place incoming
10  *	or outgoing calls only.  Otherwise, the user may place both.
11  *	Lines starting with # are comments.
12  */
13 
14 #include <stdio.h>
15 
16 #define CALL_OUT	(1<<0)	/* can charge outgoing calls locally */
17 #define CALL_IN		(1<<1)	/* can charge incoming calls locally */
18 static char Users[] = "/etc/x25users";
19 
20 x25_can_callout(who)
21 	char *who;
22 {
23 	return (lookup(who) & CALL_OUT) != 0;
24 }
25 
26 x25_can_callin(who)
27 	char *who;
28 {
29 	return (lookup(who) & CALL_IN) != 0;
30 }
31 
32 	static int
33 lookup(who)
34 	char *who;
35 {
36 	FILE *f;
37 	int r;
38 
39 	if ((f = fopen(Users, "r")) == NULL)
40 		return 0;
41 	r = dolookup(f, who);
42 	fclose(f);
43 	return r;
44 }
45 
46 	static int
47 dolookup(f, who)
48 	FILE *f;
49 	char *who;
50 {
51 	char buf[256], name[50], arg[50];
52 	int n;
53 
54 	while (fgets(buf, sizeof buf, f) != NULL) {
55 		if (buf[0] == '#')
56 			continue;
57 		n = sscanf(buf, "%s%s", name, arg);
58 		if (n < 1)
59 			continue;
60 		if (strcmp(name, who) != 0)
61 			continue;
62 		if (n == 1)
63 			return CALL_IN|CALL_OUT;
64 		if (strcmp(arg, "in") == 0)
65 			return CALL_IN;
66 		if (strcmp(arg, "out") == 0)
67 			return CALL_OUT;
68 	}
69 	return 0;
70 }
71