xref: /original-bsd/usr.bin/uucp/libuu/versys.c (revision 9c06e5c6)
1 #ifndef lint
2 static char sccsid[] = "@(#)versys.c	5.5 (Berkeley) 10/09/85";
3 #endif
4 
5 #include "uucp.h"
6 #include <stdio.h>
7 #include <ctype.h>
8 
9 /*LINTLIBRARY*/
10 
11 char PhoneNumber[MAXPH];
12 
13 /*
14  *	verify system names n1 and n2
15  *	return codes:  SUCCESS  |  FAIL
16  *
17  *	NOTE:
18  *		the old calling sequence was versys(name) but is
19  *	now versys(&name) so that we can perform aliasing!!!!
20  *	See accompanying changes in uucp.c and uux.c
21  *		-- Ray Essick, April 27, 1984
22  */
23 versys(nameptr)
24 register char **nameptr;
25 {
26 	register FILE *fp;
27 	char line[BUFSIZ];
28 	char *name;
29 
30 	DEBUG (11, "Before Alias: %s\n", *nameptr);
31 	uualias (nameptr);			/* alias expansion */
32 	DEBUG (11, "After Alias: %s\n", *nameptr);
33 	name = *nameptr;			/* dereference */
34 
35 	if (strncmp(name, Myname, MAXBASENAME) == 0)
36 		return SUCCESS;
37 
38 	fp = fopen(SYSFILE, "r");
39 	ASSERT(fp != NULL, CANTOPEN, SYSFILE, 0);
40 	PhoneNumber[0] = '\0';
41 	while (cfgets(line, sizeof(line), fp) != NULL) {
42 		char *targs[100];
43 
44 		getargs(line, targs, 100);
45 		if (strncmp(name, targs[0], MAXBASENAME) == SAME) {
46 			fclose(fp);
47 			strncpy(PhoneNumber, targs[F_PHONE], MAXPH);
48 			return SUCCESS;
49 		}
50 	}
51 	fclose(fp);
52 	return FAIL;
53 }
54 
55 /*
56  *	Works (sort of) like rhost(3) on 4.1[abc] Bsd systems.
57  *
58  *	Looks for the host in the L.aliases file and returns the
59  *	"standard" name by modifying the pointer. The returned
60  *	value is saved with malloc(3) so it isn't zapped by
61  *	subsequent calls.
62  *
63  *	Returns:
64  *		FAIL		No L.aliases file
65  *		SUCCESS		Anything else
66  */
67 
68 uualias(hostptr)
69 char  **hostptr;			  /* we change it */
70 {
71 	FILE *Aliases;			  /* list of aliases */
72 	char buf[BUFSIZ];
73 	int atend;
74 	char *p, *q;
75 	char *koshername;		 /* "official" name */
76 
77 	if ((Aliases = fopen(ALIASFILE, "r")) == NULL) {
78 		DEBUG(11, "No %s file\n", ALIASFILE);
79 		return FAIL;			  /* no alias file */
80 	}
81 
82 	DEBUG (11, "Alias expansion for %s\n", *hostptr);
83 	while (cfgets(buf, sizeof (buf), Aliases)) {
84 		p = &buf[0];
85 		atend = 0;
86 		DEBUG(11, "Alias line: %s\n", buf);
87 
88 		while (!atend) {
89 			while (isspace(*p) && *p != '\n')
90 				p++;			  /* skip white space */
91 			q = p;
92 			while (!isspace(*q) && *q != '\n')
93 				q++;			  /* find end */
94 			if (*q == '\n')
95 				atend++;		  /* last entry */
96 			*q = '\0';
97 			DEBUG(11, "Compare against: %s\n", p);
98 			if (strcmp(*hostptr, p) == 0)/* match? */ {
99 				koshername = malloc((unsigned)strlen(buf) + 1);
100 				strcpy(koshername, buf); /* save it */
101 				fclose(Aliases);
102 				DEBUG(4, "Alias: %s to ", *hostptr);
103 				DEBUG(4, "%s\n", koshername);
104 				*hostptr = koshername;	  /* correct one */
105 				return SUCCESS;		  /* all is well */
106 			}
107 			p = q + 1;			  /* try next entry */
108 		}
109 
110 	}
111 	fclose(Aliases);
112 	DEBUG(11, "Alias doesn't match %s, remains unchanged\n", *hostptr);
113 	return SUCCESS;				  /* unchanged host */
114 }
115