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