|
|
1.1 root 1: /* miscellany.c - fred miscellaneous functions */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/others/quipu/uips/fred/RCS/miscellany.c,v 7.9 90/07/27 08:45:28 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/others/quipu/uips/fred/RCS/miscellany.c,v 7.9 90/07/27 08:45:28 mrose Exp $
9: *
10: *
11: * $Log: miscellany.c,v $
12: * Revision 7.9 90/07/27 08:45:28 mrose
13: * update
14: *
15: * Revision 7.8 90/06/11 10:55:27 mrose
16: * UFN
17: *
18: * Revision 7.7 90/05/12 17:03:22 mrose
19: * sync
20: *
21: * Revision 7.6 90/02/19 13:10:39 mrose
22: * update
23: *
24: * Revision 7.5 90/01/16 21:22:42 mrose
25: * one more time
26: *
27: * Revision 7.4 90/01/16 20:43:35 mrose
28: * last check-out
29: *
30: * Revision 7.3 90/01/11 18:36:37 mrose
31: * real-sync
32: *
33: * Revision 7.2 89/12/01 10:45:09 mrose
34: * touch-up
35: *
36: * Revision 7.1 89/11/27 10:32:24 mrose
37: * sync
38: *
39: * Revision 7.0 89/11/23 22:09:01 mrose
40: * Release 6.0
41: *
42: */
43:
44: /*
45: * NOTICE
46: *
47: * Acquisition, use, and distribution of this module and related
48: * materials are subject to the restrictions of a license agreement.
49: * Consult the Preface in the User's Manual for the full terms of
50: * this agreement.
51: *
52: */
53:
54:
55: #include <ctype.h>
56: #include "fred.h"
57:
58: /* DATA */
59:
60: int area_quantum = 0;
61: char *myarea = NULL;
62:
63: struct area_guide areas[] = {
64: W_ORGANIZATION,
65: "organization", "-singlelevel", "organization", "o", NULL,
66:
67: W_UNIT,
68: "unit", "-subtree", "organizationalUnit", "ou", NULL,
69:
70: W_LOCALITY,
71: "locality", "-singlelevel", "locality", "l", NULL,
72:
73: W_PERSON,
74: "person", "-subtree", "person", "cn", NULL,
75:
76: W_DSA,
77: "dsa", "-singlelevel", "dsa", "cn", NULL,
78:
79: W_ROLE,
80: "role", "-subtree", "organizationalRole", "cn", NULL,
81:
82: NULL
83: };
84:
85: /* ALIAS */
86:
87: /* ARGSUSED */
88:
89: int f_alias (vec)
90: char **vec;
91: {
92: char *cp,
93: buffer[BUFSIZ];
94:
95: if ((cp = *++vec) == NULL)
96: return dish ("squid -fred -sequence default", 0);
97:
98: if (strcmp (cp, "-help") == 0) {
99: fprintf (stdfp, "alias [name]\n");
100: fprintf (stdfp, " with no arguments, reports on active aliases\n");
101: fprintf (stdfp,
102: " with one argument, defines an alias for the given name\n");
103:
104: return OK;
105: }
106:
107: (void) sprintf (buffer, "squid -fred -alias \"%s\"", cp);
108: return dish (buffer, runcom);
109: }
110:
111: /* AREA */
112:
113: int f_area (vec)
114: char **vec;
115: {
116: int status;
117: char *cp,
118: *dp,
119: buffer[BUFSIZ];
120: register struct area_guide *ag;
121:
122: if ((cp = *++vec) == NULL) {
123: if (myarea == NULL) {
124: if (dish ("moveto -pwd", 0) == NOTOK)
125: return NOTOK;
126: }
127: else
128: fprintf (stdfp, " default area %s\n", myarea);
129:
130: for (ag = areas; ag -> ag_record; ag++)
131: if (ag -> ag_area)
132: fprintf (stdfp, "area for record-type %-12.12s %s\n",
133: ag -> ag_key, ag -> ag_area);
134:
135: return OK;
136: }
137:
138: if (strcmp (cp, "-help") == 0) {
139: fprintf (stdfp, "area [[record] location]\n");
140: fprintf (stdfp,
141: " with no arguments, lists areas current defined for various searches\n");
142: fprintf (stdfp,
143: " with one argument, sets the default area for general searches\n");
144: fprintf (stdfp,
145: " with two arguments, sets the default area for the given record type\n");
146:
147: return OK;
148: }
149:
150: if ((dp = *++vec) == NULL) {
151: (void) sprintf (buffer, "moveto -pwd \"%s\"", cp);
152: if (dish (buffer, 1) == NOTOK) {
153: advise (NULLCP, "bad area: \"%s\"", cp);
154: return NOTOK;
155: }
156: if (!runcom)
157: fprintf (stdfp, "%s\n", myarea);
158:
159: area_quantum++;
160: return OK;
161: }
162:
163: for (ag = areas; ag -> ag_record; ag++)
164: if (strcmp (ag -> ag_key, cp) == 0)
165: break;
166: if (!ag -> ag_record) {
167: advise (NULLCP, "invalid record-type: \"%s\"", cp);
168: return NOTOK;
169: }
170:
171: if (cp = myarea)
172: myarea = NULL;
173:
174: (void) sprintf (buffer, "moveto -pwd \"%s\"", dp);
175: if ((status = dish (buffer, 1)) == OK) {
176: if (ag -> ag_area)
177: free (ag -> ag_area);
178: ag -> ag_area = myarea;
179:
180: if (!runcom)
181: fprintf (stdfp, "area for record-type %s: %s\n",
182: ag -> ag_key, ag -> ag_area);
183: }
184: else {
185: advise (NULLCP, "bad area: \"%s\"", dp);
186: if (myarea)
187: free (myarea), myarea = NULL;
188: }
189:
190: if (myarea = cp) {
191: (void) sprintf (buffer, "moveto -pwd \"%s\"", myarea);
192: (void) dish (buffer, 1);
193: }
194:
195: area_quantum++;
196: return status;
197: }
198:
199: /* DISH */
200:
201: int f_dish (vec)
202: char **vec;
203: {
204: register char *bp,
205: *cp;
206: char buffer[BUFSIZ];
207:
208: if ((cp = *++vec) == NULL)
209: return dish ("squid -fred", 0);
210: if (strcmp (cp, "-help") == 0) {
211: fprintf (stdfp, "dish [command [arguments ...]]\n");
212: fprintf (stdfp, " with no arguments, reports on status of dish\n");
213: fprintf (stdfp, " with arguments, passes those directly to dish\n");
214:
215: return OK;
216: }
217:
218: (void) strcpy (bp = buffer, cp);
219: bp += strlen (bp);
220:
221: while (cp = *++vec) {
222: (void) sprintf (bp, " \"%s\"", cp);
223: bp += strlen (bp);
224: }
225:
226: return dish (buffer, runcom);
227: }
228:
229: /* EDIT */
230:
231: int f_edit (vec)
232: char **vec;
233: {
234: int result;
235: char buffer[BUFSIZ];
236:
237: if (*++vec != NULL && strcmp (*vec, "-help") == 0) {
238: fprintf (stdfp, "edit\n");
239: fprintf (stdfp, " edit entry in the white pages\n");
240:
241: return OK;
242: }
243:
244: if (mydn == NULL) {
245: advise (NULLCP, "who are you? use the \"thisis\" command first...");
246: return NOTOK;
247: }
248:
249: (void) sprintf (buffer, "modify -dontusecopy -newdraft \"%s\"", mydn);
250: dontpage = 1;
251: result = dish (buffer, 0);
252: dontpage = 0;
253:
254: if (result != OK)
255: return result;
256:
257: (void) sprintf (buffer, "showentry \"%s\" -fred -dontusecopy", mydn);
258: (void) dish (buffer, 0);
259: return OK;
260: }
261:
262: /* MANUAL */
263:
264: int f_manual (vec)
265: char **vec;
266: {
267: char buffer[BUFSIZ];
268: FILE *fp;
269:
270: if (*++vec != NULL && strcmp (*vec, "-help") == 0) {
271: fprintf (stdfp, "manual\n");
272: fprintf (stdfp, " print detailed information\n");
273:
274: return OK;
275: }
276:
277: (void) strcpy (buffer, isodefile ("fred.0", 0));
278: if (fp = fopen (buffer, "r")) {
279: while (fgets (buffer, sizeof buffer, fp))
280: paginate (stdfp, buffer, strlen (buffer));
281: paginate (stdfp, NULLCP, 0);
282:
283: (void) fclose (fp);
284: }
285: else
286: advise (buffer, "unable to open");
287:
288: return OK;
289: }
290:
291: /* REPORT */
292:
293: int f_report (vec)
294: char **vec;
295: {
296: register char *bp;
297: char *cp,
298: buffer[BUFSIZ];
299:
300: if (*++vec != NULL && strcmp (*vec, "-help") == 0) {
301: fprintf (stdfp, "report [subject]\n");
302: fprintf (stdfp, " send report to white pages manager\n");
303:
304: return OK;
305: }
306:
307: if (readonly)
308: (void) strcpy (buffer, _isodefile (isodebinpath, "mhmail"));
309: bp = buffer;
310: cp = strcmp (manager, "internal") ? manager
311: : "[email protected]";
312:
313: if (!readonly || access (buffer, 0x01) == NOTOK) {
314: (void) strcpy (bp, "/usr/ucb/Mail ");
315: bp += strlen (bp);
316:
317: if (debug) {
318: (void) sprintf (bp, "-v ");
319: bp += strlen (bp);
320: }
321:
322: if (readonly) {
323: (void) sprintf (bp, "-r \"%s\" ", cp);
324: bp += strlen (bp);
325: }
326:
327: (void) sprintf (bp, "-s");
328: }
329: else {
330: bp += strlen (bp);
331:
332: (void) sprintf (bp, " -subject");
333: }
334: bp += strlen (bp);
335:
336: (void) sprintf (bp, " \"%s\" \"%s\"",
337: *vec ? *vec : "White Pages report", cp);
338: bp += strlen (bp);
339:
340:
341: fprintf (stdfp, "End report with CTRL-D%s\n",
342: readonly ? ", it will then take 30 seconds to post message" : "");
343: (void) fflush (stdfp);
344:
345: if (watch) {
346: fprintf (stderr, "%s\n", buffer);
347: (void) fflush (stderr);
348: }
349: if (system (buffer))
350: advise (NULLCP, "problem sending report");
351:
352: return OK;
353: }
354:
355: /* THISIS */
356:
357: int f_thisis (vec)
358: char **vec;
359: {
360: register char *bp;
361: char *cp,
362: buffer[BUFSIZ];
363:
364: again: ;
365: if ((cp = *++vec) == NULL) {
366: if (mydn == NULL) {
367: advise (NULLCP, "who are you?");
368: return NOTOK;
369: }
370:
371: printf ("you are \"%s\"\n", mydn);
372: return OK;
373: }
374:
375: if (strcmp (cp, "-help") == 0) {
376: fprintf (stdfp, "thisis [name]\n");
377: fprintf (stdfp,
378: " with no arguments, lists your name in the white pages\n");
379: fprintf (stdfp,
380: " with one argument, identifies you in the white pages\n");
381:
382: return OK;
383: }
384:
385: if (strcmp (cp, "is") == 0)
386: goto again;
387:
388: if (*cp == '!')
389: cp++;
390: for (bp = cp; isdigit (*bp); bp++)
391: continue;
392: if (*bp && (index (cp, '@') == NULL || index (cp, '=') == NULL)) {
393: advise (NULLCP,
394: "expecting a distinguished name (if you don't know what this is, punt)"
395: );
396: return NOTOK;
397: }
398:
399: bp = buffer;
400:
401: (void) sprintf (bp, "bind -user \"%s\"", cp);
402: bp += strlen (bp);
403:
404: if (*++vec) {
405: if (runcom && (rcmode & 077))
406: adios (NULLCP,
407: "incorrect mode for runcom file -- use \"chmod 0600 $HOME/.fredrc\"");
408:
409: (void) sprintf (bp, " -password \"%s\"", *vec);
410: bp += strlen (bp);
411: }
412:
413: if (dish (buffer, 0) != OK) {
414: (void) f_quit (NULLVP);
415: exit (1); /* NOT REACHED */
416: }
417:
418: if (runcom)
419: didbind = 1;
420:
421: (void) dish ("squid -fred -user", 1);
422:
423: return OK;
424: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.