BSD 4_3_Net_2 development
[unix-history] / usr / src / contrib / isode / compat / isoservent.c
CommitLineData
5f522de8
C
1/* isoservent.c - look-up ISODE services */
2
3#ifndef lint
4static char *rcsid = "$Header: /f/osi/compat/RCS/isoservent.c,v 7.2 91/02/22 09:15:23 mrose Interim $";
5#endif
6
7/*
8 * $Header: /f/osi/compat/RCS/isoservent.c,v 7.2 91/02/22 09:15:23 mrose Interim $
9 *
10 *
11 * $Log: isoservent.c,v $
12 * Revision 7.2 91/02/22 09:15:23 mrose
13 * Interim 6.8
14 *
15 * Revision 7.1 90/12/23 18:39:36 mrose
16 * update
17 *
18 * Revision 7.0 89/11/23 21:23:11 mrose
19 * Release 6.0
20 *
21 */
22
23/*
24 * NOTICE
25 *
26 * Acquisition, use, and distribution of this module and related
27 * materials are subject to the restrictions of a license agreement.
28 * Consult the Preface in the User's Manual for the full terms of
29 * this agreement.
30 *
31 */
32
33
34/* LINTLIBRARY */
35
36#include <ctype.h>
37#include <stdio.h>
38#include "general.h"
39#include "manifest.h"
40#include "isoservent.h"
41#include "tailor.h"
42
43/* \f DATA */
44
45static char *isoservices = "isoservices";
46
47static FILE *servf = NULL;
48static int stayopen = 0;
49
50static struct isoservent iss;
51
52/* \f */
53
54int setisoservent (f)
55int f;
56{
57 if (servf == NULL)
58 servf = fopen (isodefile (isoservices, 0), "r");
59 else
60 rewind (servf);
61 stayopen |= f;
62
63 return (servf != NULL);
64}
65
66
67int endisoservent () {
68 if (servf && !stayopen) {
69 (void) fclose (servf);
70 servf = NULL;
71 }
72
73 return 1;
74}
75
76/* \f */
77
78struct isoservent *getisoservent () {
79 int mask,
80 vecp;
81 register char *cp;
82 register struct isoservent *is = &iss;
83 static char buffer[BUFSIZ + 1],
84 file[BUFSIZ];
85 static char *vec[NVEC + NSLACK + 1];
86
87 if (servf == NULL
88 && (servf = fopen (isodefile (isoservices, 0), "r")) == NULL)
89 return NULL;
90
91 bzero ((char *) is, sizeof *is);
92
93 while (fgets (buffer, sizeof buffer, servf) != NULL) {
94 if (*buffer == '#')
95 continue;
96 if (cp = index (buffer, '\n'))
97 *cp = NULL;
98 if ((vecp = str2vecX (buffer, vec, 1 + 1, &mask, NULL, 1)) < 3)
99 continue;
100
101 if ((cp = index (vec[0], '/')) == NULL)
102 continue;
103 *cp++ = NULL;
104
105 is -> is_provider = vec[0];
106 is -> is_entity = cp;
107 is -> is_selectlen = str2sel (vec[1], (mask & (1 << 1)) ? 1 : 0,
108 is -> is_selector, ISSIZE);
109
110 is -> is_vec = vec + 2;
111 is -> is_tail = vec + vecp;
112
113 if (strcmp (cp = is -> is_vec[0], "tsapd-bootstrap"))
114 (void) strcpy (is -> is_vec[0] = file, isodefile (cp, 1));
115
116 return is;
117 }
118
119 return NULL;
120}
121
122/* \f */
123
124#ifdef DEBUG
125_printsrv (is)
126register struct isoservent *is;
127{
128 register int n = is -> is_tail - is -> is_vec - 1;
129 register char **ap = is -> is_vec;
130
131 LLOG (addr_log, LLOG_DEBUG,
132 ("\tENT: \"%s\" PRV: \"%s\" SEL: %s",
133 is -> is_entity, is -> is_provider,
134 sel2str (is -> is_selector, is -> is_selectlen, 1)));
135
136 for (; n >= 0; ap++, n--)
137 LLOG (addr_log, LLOG_DEBUG,
138 ("\t\t%d: \"%s\"\n", ap - is -> is_vec, *ap));
139}
140#endif