annotate support/bboards/mmdfII/bboards/getbbent.c @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 /* getbbent.c - subroutines for accessing the BBoards file */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 /* LINTLIBRARY */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5 #include "bboards.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #ifndef MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 #include "../h/strings.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 #include <sys/types.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 #else MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 #include "util.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 #include "mmdf.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 #include "strings.h"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 #endif MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 #include <ctype.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 #include <pwd.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 #include <grp.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 #include <stdio.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 #include <sys/stat.h>
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 #ifndef MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 #define NOTOK (-1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 #define OK 0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 #endif not MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 #define MaxBBAka 100
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 #define MaxBBLdr 100
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 #define MaxBBDist 100
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 #define NCOLON 9 /* currently 10 fields per entry */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34 #define COLON ':'
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 #define COMMA ','
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 #define NEWLINE '\n'
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 #define ARCHIVE "archive"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 #define CNTFILE ".cnt"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 #define DSTFILE ".dist"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 #define MAPFILE ".map"
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 static int BBuid = -1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 static unsigned int BBflags = SB_NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50 static char BBName[BUFSIZ] = BBOARDS;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51 static char BBDir[BUFSIZ] = "";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 static char BBData[BUFSIZ] = "";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 static FILE *BBfile = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 static struct bboard BB;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 static struct bboard *bb = &BB;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 static int BBload = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 static char BBFile[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 static char BBArchive[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 static char BBInfo[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 static char BBMap[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 static char *BBAkas[MaxBBAka];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 static char *BBLeaders[MaxBBLdr];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 static char *BBDists[MaxBBDist];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 static char BBAddr[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 static char BBRequest[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 static char BBDate[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72 static char BBErrors[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 #ifdef MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 extern LLog *logptr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 #endif MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 char *bbskip (), *getcpy ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80 char *crypt (), *getpass ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 struct group *getgrnam ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 struct passwd *getpwnam (), *getpwuid ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 int setbbfile (file, f)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 register char *file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 register int f;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90 if (BBuid == -1)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 return setbbinfo (BBOARDS, file, f);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 (void) strcpy (BBData, file);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95 BBflags = SB_NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 (void) endbbent ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 return setbbent (f);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 int setbbinfo (user, file, f)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 register char *user,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 *file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 register int f;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 register struct passwd *pw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 if ((pw = getpwnam (user)) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 (void) sprintf (BBErrors, "unknown user: %s", user);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 return setpwinfo (pw, file, f);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 int setpwinfo (pw, file, f)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120 register struct passwd *pw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121 register char *file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 register int f;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 if (!setpwaux (pw, file))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 BBflags = SB_NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 (void) endbbent ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 return setbbent (f);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135 static int setbbaux (name, file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 register char *name,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 *file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 register struct passwd *pw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 if ((pw = getpwnam (name)) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 (void) sprintf (BBErrors, "unknown user: %s", name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 return setpwaux (pw, file);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150 static int setpwaux (pw, file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 register struct passwd *pw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 register char *file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154 (void) strcpy (BBName, pw -> pw_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 BBuid = pw -> pw_uid;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156 (void) strcpy (BBDir, pw -> pw_dir);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 (void) sprintf (BBData, "%s/%s",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 *file != '/' ? BBDir : "",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159 *file != '/' ? file : file + 1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161 BBflags = SB_NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168 int setbbent (f)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 register int f;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171 if (BBfile == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172 if (BBuid == -1 && !setbbaux (BBOARDS, BBDB))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 if ((BBfile = fopen (BBData, "r")) == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 (void) sprintf (BBErrors, "unable to open: %s", BBData);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181 rewind (BBfile);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 BBflags |= f;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
184 return (BBfile != NULL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
185 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
186
bce86c4163a3 Initial revision
kono
parents:
diff changeset
187
bce86c4163a3 Initial revision
kono
parents:
diff changeset
188 int endbbent () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
189 if (BBfile != NULL && !(BBflags & SB_STAY)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
190 (void) fclose (BBfile);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
191 BBfile = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
192 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
193
bce86c4163a3 Initial revision
kono
parents:
diff changeset
194 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
195 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
196
bce86c4163a3 Initial revision
kono
parents:
diff changeset
197
bce86c4163a3 Initial revision
kono
parents:
diff changeset
198 long getbbtime () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
199 struct stat st;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
200
bce86c4163a3 Initial revision
kono
parents:
diff changeset
201 if (BBfile == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
202 if (BBuid == -1 && !setbbaux (BBOARDS, BBDB))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
203 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
204
bce86c4163a3 Initial revision
kono
parents:
diff changeset
205 if (stat (BBData, &st) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
206 (void) sprintf (BBErrors, "unable to stat: %s", BBData);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
207 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
208 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
209 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
210 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
211 if (fstat (fileno (BBfile), &st) == NOTOK) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
212 (void) sprintf (BBErrors, "unable to fstat: %s", BBData);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
213 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
214 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
215
bce86c4163a3 Initial revision
kono
parents:
diff changeset
216 return ((long) st.st_mtime);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
217 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
218
bce86c4163a3 Initial revision
kono
parents:
diff changeset
219 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
220
bce86c4163a3 Initial revision
kono
parents:
diff changeset
221 struct bboard *getbbent () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
222 register int count;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
223 register char *p,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
224 *q,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
225 *r,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
226 *d,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
227 *f,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
228 **s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
229 static char line[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
230
bce86c4163a3 Initial revision
kono
parents:
diff changeset
231 if (BBfile == NULL && !setbbent (SB_NULL))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
232 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
233
bce86c4163a3 Initial revision
kono
parents:
diff changeset
234 retry: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
235 if ((p = fgets (line, sizeof line, BBfile)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
236 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
237
bce86c4163a3 Initial revision
kono
parents:
diff changeset
238 for (q = p, count = 0; *q != NULL && *q != NEWLINE; q++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
239 if (*q == COLON)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
240 count++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
241
bce86c4163a3 Initial revision
kono
parents:
diff changeset
242 if (count != NCOLON) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
243 #ifdef MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
244 if (q = index (p, NEWLINE))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
245 *q = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
246 ll_log (logptr, LLOGTMP, "bad entry in %s: %s", BBData, p);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
247 #endif MMDFONLY
bce86c4163a3 Initial revision
kono
parents:
diff changeset
248 goto retry;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
249 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
250
bce86c4163a3 Initial revision
kono
parents:
diff changeset
251 bb -> bb_name = p;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
252 p = q = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
253 p = bb -> bb_file = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
254 bb -> bb_archive = bb -> bb_info = bb -> bb_map = "";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
255 p = bb -> bb_passwd = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
256 p = r = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
257 p = bb -> bb_addr = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
258 p = bb -> bb_request = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
259 p = bb -> bb_relay = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
260 p = d = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
261 p = f = bbskip (p, COLON);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
262 (void) bbskip (p, NEWLINE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
263
bce86c4163a3 Initial revision
kono
parents:
diff changeset
264 s = bb -> bb_aka = BBAkas;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
265 while (*q) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
266 *s++ = q;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
267 q = bbskip (q, COMMA);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
268 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
269 *s = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
270
bce86c4163a3 Initial revision
kono
parents:
diff changeset
271 s = bb -> bb_leader = BBLeaders;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
272 if (*r == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
273 if (!(BBflags & SB_FAST))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
274 *s++ = BBName;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
275 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
276 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
277 while (*r) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
278 *s++ = r;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
279 r = bbskip (r, COMMA);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
280 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
281 *s = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
282
bce86c4163a3 Initial revision
kono
parents:
diff changeset
283 s = bb -> bb_dist = BBDists;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
284 while (*d) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
285 *s++ = d;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
286 d = bbskip (d, COMMA);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
287 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
288 *s = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
289
bce86c4163a3 Initial revision
kono
parents:
diff changeset
290 if (*f)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
291 (void) sscanf (f, "%o", &bb -> bb_flags);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
292 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
293 bb -> bb_flags = BB_NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
294 bb -> bb_count = bb -> bb_maxima = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
295 bb -> bb_date = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
296 bb -> bb_next = bb -> bb_link = bb -> bb_chain = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
297
bce86c4163a3 Initial revision
kono
parents:
diff changeset
298 if (BBload)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
299 BBread ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
300
bce86c4163a3 Initial revision
kono
parents:
diff changeset
301 return bb;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
302 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
303
bce86c4163a3 Initial revision
kono
parents:
diff changeset
304 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
305
bce86c4163a3 Initial revision
kono
parents:
diff changeset
306 struct bboard *getbbnam (name)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
307 register char *name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
308 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
309 register struct bboard *b = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
310
bce86c4163a3 Initial revision
kono
parents:
diff changeset
311 if (!setbbent (SB_NULL))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
312 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
313 BBload = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
314 while ((b = getbbent ()) && strcmp (name, b -> bb_name))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
315 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
316 BBload = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
317 (void) endbbent ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
318
bce86c4163a3 Initial revision
kono
parents:
diff changeset
319 if (b != NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
320 BBread ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
321
bce86c4163a3 Initial revision
kono
parents:
diff changeset
322 return b;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
323 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
324
bce86c4163a3 Initial revision
kono
parents:
diff changeset
325
bce86c4163a3 Initial revision
kono
parents:
diff changeset
326 struct bboard *getbbaka (aka)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
327 register char *aka;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
328 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
329 register char **ap;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
330 register struct bboard *b = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
331
bce86c4163a3 Initial revision
kono
parents:
diff changeset
332 if (!setbbent (SB_NULL))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
333 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
334 BBload = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
335 while ((b = getbbent ()) != NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
336 for (ap = b -> bb_aka; *ap; ap++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
337 if (strcmp (aka, *ap) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
338 goto hit;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
339 hit: ;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
340 BBload = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
341 (void) endbbent ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
342
bce86c4163a3 Initial revision
kono
parents:
diff changeset
343 if (b != NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
344 BBread ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
345
bce86c4163a3 Initial revision
kono
parents:
diff changeset
346 return b;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
347 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
348
bce86c4163a3 Initial revision
kono
parents:
diff changeset
349 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
350
bce86c4163a3 Initial revision
kono
parents:
diff changeset
351 static int BBread () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
352 register int i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
353 register char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
354 *dp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
355 *p,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
356 *r;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
357 char prf[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
358 static char line[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
359 register FILE * info;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
360
bce86c4163a3 Initial revision
kono
parents:
diff changeset
361 if (BBflags & SB_FAST)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
362 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
363
bce86c4163a3 Initial revision
kono
parents:
diff changeset
364 p = index (bb -> bb_request, '@');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
365 r = index (bb -> bb_addr, '@');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
366 BBRequest[0] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
367
bce86c4163a3 Initial revision
kono
parents:
diff changeset
368 if (*bb -> bb_request == '-')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
369 if (p == NULL && r && *r == '@')
bce86c4163a3 Initial revision
kono
parents:
diff changeset
370 (void) sprintf (BBRequest, "%s%s%s",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
371 bb -> bb_name, bb -> bb_request, r);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
372 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
373 (void) sprintf (BBRequest, "%s%s",
bce86c4163a3 Initial revision
kono
parents:
diff changeset
374 bb -> bb_name, bb -> bb_request);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
375 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
376 if (p == NULL && r && *r == '@' && *bb -> bb_request)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
377 (void) sprintf (BBRequest, "%s%s", bb -> bb_request, r);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
378
bce86c4163a3 Initial revision
kono
parents:
diff changeset
379 if (BBRequest[0])
bce86c4163a3 Initial revision
kono
parents:
diff changeset
380 bb -> bb_request = BBRequest;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
381 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
382 if (*bb -> bb_request == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
383 bb -> bb_request = *bb -> bb_addr ? bb -> bb_addr
bce86c4163a3 Initial revision
kono
parents:
diff changeset
384 : bb -> bb_leader[0];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
385
bce86c4163a3 Initial revision
kono
parents:
diff changeset
386 if (*bb -> bb_addr == '@') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
387 (void) sprintf (BBAddr, "%s%s", bb -> bb_name, bb -> bb_addr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
388 bb -> bb_addr = BBAddr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
389 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
390 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
391 if (*bb -> bb_addr == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
392 bb -> bb_addr = bb -> bb_name;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
393
bce86c4163a3 Initial revision
kono
parents:
diff changeset
394 if (*bb -> bb_file == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
395 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
396 if (*bb -> bb_file != '/') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
397 (void) sprintf (BBFile, "%s/%s", BBDir, bb -> bb_file);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
398 bb -> bb_file = BBFile;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
399 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
400
bce86c4163a3 Initial revision
kono
parents:
diff changeset
401 if ((cp = rindex (bb -> bb_file, '/')) == NULL || *++cp == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
402 (void) strcpy (prf, ""), cp = bb -> bb_file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
403 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
404 (void) sprintf (prf, "%.*s", cp - bb -> bb_file, bb -> bb_file);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
405 if ((dp = index (cp, '.')) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
406 dp = cp + strlen (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
407
bce86c4163a3 Initial revision
kono
parents:
diff changeset
408 (void) sprintf (BBArchive, "%s%s/%s", prf, ARCHIVE, cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
409 bb -> bb_archive = BBArchive;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
410 (void) sprintf (BBInfo, "%s.%.*s%s", prf, dp - cp, cp, CNTFILE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
411 bb -> bb_info = BBInfo;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
412 (void) sprintf (BBMap, "%s.%.*s%s", prf, dp - cp, cp, MAPFILE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
413 bb -> bb_map = BBMap;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
414
bce86c4163a3 Initial revision
kono
parents:
diff changeset
415 if ((info = fopen (bb -> bb_info, "r")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
416 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
417
bce86c4163a3 Initial revision
kono
parents:
diff changeset
418 if (fgets (line, sizeof line, info) && (i = atoi (line)) > 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
419 bb -> bb_maxima = (unsigned) i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
420 if (!feof (info) && fgets (line, sizeof line, info)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
421 (void) strcpy (BBDate, line);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
422 if (cp = index (BBDate, NEWLINE))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
423 *cp = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
424 bb -> bb_date = BBDate;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
425 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
426
bce86c4163a3 Initial revision
kono
parents:
diff changeset
427 (void) fclose (info);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
428 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
429
bce86c4163a3 Initial revision
kono
parents:
diff changeset
430 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
431
bce86c4163a3 Initial revision
kono
parents:
diff changeset
432 int ldrbb (b)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
433 register struct bboard *b;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
434 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
435 register char *p,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
436 **q,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
437 **r;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
438 static int uid = 0,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
439 gid = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
440 static char username[10] = "";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
441 register struct passwd *pw;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
442 register struct group *gr;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
443
bce86c4163a3 Initial revision
kono
parents:
diff changeset
444 if (b == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
445 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
446 if (BBuid == -1 && !setbbaux (BBOARDS, BBDB))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
447 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
448
bce86c4163a3 Initial revision
kono
parents:
diff changeset
449 if (username[0] == NULL) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
450 if ((pw = getpwuid (uid = getuid ())) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
451 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
452 gid = getgid ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
453 (void) strcpy (username, pw -> pw_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
454 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
455
bce86c4163a3 Initial revision
kono
parents:
diff changeset
456 if (uid == BBuid)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
457 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
458
bce86c4163a3 Initial revision
kono
parents:
diff changeset
459 q = b -> bb_leader;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
460 while (p = *q++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
461 if (*p == '=') {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
462 if ((gr = getgrnam (++p)) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
463 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
464 if (gid == gr -> gr_gid)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
465 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
466 r = gr -> gr_mem;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
467 while (p = *r++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
468 if (strcmp (username, p) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
469 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
470 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
471 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
472 if (strcmp (username, p) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
473 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
474
bce86c4163a3 Initial revision
kono
parents:
diff changeset
475 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
476 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
477
bce86c4163a3 Initial revision
kono
parents:
diff changeset
478 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
479
bce86c4163a3 Initial revision
kono
parents:
diff changeset
480 int ldrchk (b)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
481 register struct bboard *b;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
482 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
483 if (b == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
484 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
485
bce86c4163a3 Initial revision
kono
parents:
diff changeset
486 if (*b -> bb_passwd == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
487 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
488
bce86c4163a3 Initial revision
kono
parents:
diff changeset
489 if (strcmp (b -> bb_passwd,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
490 crypt (getpass ("Password: "), b -> bb_passwd)) == 0)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
491 return 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
492
bce86c4163a3 Initial revision
kono
parents:
diff changeset
493 fprintf (stderr, "Sorry\n");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
494 return 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
495 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
496
bce86c4163a3 Initial revision
kono
parents:
diff changeset
497 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
498
bce86c4163a3 Initial revision
kono
parents:
diff changeset
499 struct bboard *getbbcpy (bp)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
500 register struct bboard *bp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
501 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
502 register char **p,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
503 **q;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
504 register struct bboard *b;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
505
bce86c4163a3 Initial revision
kono
parents:
diff changeset
506 if (bp == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
507 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
508
bce86c4163a3 Initial revision
kono
parents:
diff changeset
509 b = (struct bboard *) malloc ((unsigned) sizeof *b);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
510 if (b == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
511 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
512
bce86c4163a3 Initial revision
kono
parents:
diff changeset
513 b -> bb_name = getcpy (bp -> bb_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
514 b -> bb_file = getcpy (bp -> bb_file);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
515 b -> bb_archive = getcpy (bp -> bb_archive);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
516 b -> bb_info = getcpy (bp -> bb_info);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
517 b -> bb_map = getcpy (bp -> bb_map);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
518 b -> bb_passwd = getcpy (bp -> bb_passwd);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
519 b -> bb_flags = bp -> bb_flags;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
520 b -> bb_count = bp -> bb_count;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
521 b -> bb_maxima = bp -> bb_maxima;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
522 b -> bb_date = getcpy (bp -> bb_date);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
523 b -> bb_addr = getcpy (bp -> bb_addr);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
524 b -> bb_request = getcpy (bp -> bb_request);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
525 b -> bb_relay = getcpy (bp -> bb_relay);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
526
bce86c4163a3 Initial revision
kono
parents:
diff changeset
527 for (p = bp -> bb_aka; *p; p++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
528 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
529 b -> bb_aka =
bce86c4163a3 Initial revision
kono
parents:
diff changeset
530 q = (char **) calloc ((unsigned) (p - bp -> bb_aka + 1), sizeof *q);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
531 if (q == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
532 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
533 for (p = bp -> bb_aka; *p; *q++ = getcpy (*p++))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
534 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
535 *q = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
536
bce86c4163a3 Initial revision
kono
parents:
diff changeset
537 for (p = bp -> bb_leader; *p; p++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
538 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
539 b -> bb_leader =
bce86c4163a3 Initial revision
kono
parents:
diff changeset
540 q = (char **) calloc ((unsigned) (p - bp -> bb_leader + 1), sizeof *q);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
541 if (q == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
542 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
543 for (p = bp -> bb_leader; *p; *q++ = getcpy (*p++))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
544 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
545 *q = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
546
bce86c4163a3 Initial revision
kono
parents:
diff changeset
547 for (p = bp -> bb_dist; *p; p++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
548 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
549 b -> bb_dist =
bce86c4163a3 Initial revision
kono
parents:
diff changeset
550 q = (char **) calloc ((unsigned) (p - bp -> bb_dist + 1), sizeof *q);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
551 if (q == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
552 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
553 for (p = bp -> bb_dist; *p; *q++ = getcpy (*p++))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
554 continue;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
555 *q = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
556
bce86c4163a3 Initial revision
kono
parents:
diff changeset
557 b -> bb_next = bp -> bb_next;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
558 b -> bb_link = bp -> bb_link;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
559 b -> bb_chain = bp -> bb_chain;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
560
bce86c4163a3 Initial revision
kono
parents:
diff changeset
561 return b;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
562 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
563
bce86c4163a3 Initial revision
kono
parents:
diff changeset
564 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
565
bce86c4163a3 Initial revision
kono
parents:
diff changeset
566 int getbbdist (bb, action)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
567 register struct bboard *bb;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
568 register int (*action) ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
569 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
570 register int result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
571 register char **dp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
572
bce86c4163a3 Initial revision
kono
parents:
diff changeset
573 BBErrors[0] = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
574 for (dp = bb -> bb_dist; *dp; dp++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
575 if (result = getbbitem (bb, *dp, action))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
576 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
577
bce86c4163a3 Initial revision
kono
parents:
diff changeset
578 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
579 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
580
bce86c4163a3 Initial revision
kono
parents:
diff changeset
581 char *getbberr () {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
582 return (BBErrors[0] ? BBErrors : NULL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
583 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
584
bce86c4163a3 Initial revision
kono
parents:
diff changeset
585 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
586
bce86c4163a3 Initial revision
kono
parents:
diff changeset
587 static int getbbitem (bb, item, action)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
588 register struct bboard *bb;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
589 register char *item;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
590 register int (*action) ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
591 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
592 register int result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
593 register char *cp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
594 *dp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
595 *hp,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
596 *np;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
597 char mbox[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
598 buffer[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
599 file[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
600 host[BUFSIZ],
bce86c4163a3 Initial revision
kono
parents:
diff changeset
601 prf[BUFSIZ];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
602 register FILE *fp;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
603
bce86c4163a3 Initial revision
kono
parents:
diff changeset
604 switch (*item) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
605 case '*':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
606 switch (*++item) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
607 case '/':
bce86c4163a3 Initial revision
kono
parents:
diff changeset
608 hp = item;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
609 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
610
bce86c4163a3 Initial revision
kono
parents:
diff changeset
611 case NULL:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
612 if ((cp = rindex (bb -> bb_file, '/')) == NULL || *++cp == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
613 (void) strcpy (prf, ""), cp = bb -> bb_file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
614 else
bce86c4163a3 Initial revision
kono
parents:
diff changeset
615 (void) sprintf (prf, "%.*s", cp - bb -> bb_file, bb -> bb_file);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
616 if ((dp = index (cp, '.')) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
617 dp = cp + strlen (cp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
618 (void) sprintf (file, "%s.%.*s%s", prf, dp - cp, cp, DSTFILE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
619 hp = file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
620 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
621
bce86c4163a3 Initial revision
kono
parents:
diff changeset
622 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
623 (void) sprintf (file, "%s/%s", BBDir, item);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
624 hp = file;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
625 break;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
626 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
627
bce86c4163a3 Initial revision
kono
parents:
diff changeset
628 if ((fp = fopen (hp, "r")) == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
629 return bblose ("unable to read file %s", hp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
630 while (fgets (buffer, sizeof buffer, fp)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
631 if (np = index (buffer, '\n'))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
632 *np = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
633 if (result = getbbitem (bb, buffer, action)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
634 (void) fclose (fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
635 (void) bblose ("error with file %s, item %s", hp, buffer);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
636 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
637 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
638 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
639 (void) fclose (fp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
640 return OK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
641
bce86c4163a3 Initial revision
kono
parents:
diff changeset
642 default:
bce86c4163a3 Initial revision
kono
parents:
diff changeset
643 if (hp = rindex (item, '@')) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
644 *hp++ = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
645 (void) strcpy (mbox, item);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
646 (void) strcpy (host, hp);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
647 *--hp = '@';
bce86c4163a3 Initial revision
kono
parents:
diff changeset
648 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
649 else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
650 (void) sprintf (mbox, "%s%s", DISTADR, bb -> bb_name);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
651 (void) strcpy (host, item);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
652 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
653 if (result = (*action) (mbox, host))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
654 (void) bblose ("action (%s, %s) returned 0%o", mbox, host, result);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
655 return result;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
656 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
657 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
658
bce86c4163a3 Initial revision
kono
parents:
diff changeset
659 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
660
bce86c4163a3 Initial revision
kono
parents:
diff changeset
661 /* VARARGS1 */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
662
bce86c4163a3 Initial revision
kono
parents:
diff changeset
663 static int bblose (fmt, a, b, c)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
664 char *fmt,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
665 *a,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
666 *b,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
667 *c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
668 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
669 if (BBErrors[0] == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
670 (void) sprintf (BBErrors, fmt, a, b, c);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
671
bce86c4163a3 Initial revision
kono
parents:
diff changeset
672 return NOTOK;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
673 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
674
bce86c4163a3 Initial revision
kono
parents:
diff changeset
675 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
676
bce86c4163a3 Initial revision
kono
parents:
diff changeset
677 void make_lower (s1, s2)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
678 register char *s1,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
679 *s2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
680 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
681 if (s1 == NULL || s2 == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
682 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
683
bce86c4163a3 Initial revision
kono
parents:
diff changeset
684 for (; *s2; s2++)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
685 *s1++ = isupper (*s2) ? tolower (*s2) : *s2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
686 *s1 = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
687 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
688
bce86c4163a3 Initial revision
kono
parents:
diff changeset
689 /* */
bce86c4163a3 Initial revision
kono
parents:
diff changeset
690
bce86c4163a3 Initial revision
kono
parents:
diff changeset
691 static char *bbskip (p, c)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
692 register char *p,
bce86c4163a3 Initial revision
kono
parents:
diff changeset
693 c;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
694 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
695 if (p == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
696 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
697
bce86c4163a3 Initial revision
kono
parents:
diff changeset
698 while (*p && *p != c)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
699 p++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
700 if (*p)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
701 *p++ = NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
702
bce86c4163a3 Initial revision
kono
parents:
diff changeset
703 return p;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
704 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
705
bce86c4163a3 Initial revision
kono
parents:
diff changeset
706
bce86c4163a3 Initial revision
kono
parents:
diff changeset
707 static char *getcpy (s)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
708 register char *s;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
709 {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
710 register char *p;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
711
bce86c4163a3 Initial revision
kono
parents:
diff changeset
712 if (s == NULL)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
713 return NULL;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
714
bce86c4163a3 Initial revision
kono
parents:
diff changeset
715 if (p = malloc ((unsigned) (strlen (s) + 1)))
bce86c4163a3 Initial revision
kono
parents:
diff changeset
716 (void) strcpy (p, s);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
717 return p;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
718 }