]> andersk Git - moira.git/blame - clients/mmoira/moira_cb.c
Used /bin/sh format instead of /bin/csh format, by accident.
[moira.git] / clients / mmoira / moira_cb.c
CommitLineData
c4095074 1/* $Header$
2 */
3
4#include <stdio.h>
5#include <moira.h>
6#include <moira_site.h>
7#include <sys/types.h>
8#include <netdb.h>
9#include <sys/socket.h>
10#include <netinet/in.h>
11#include <Xm/Xm.h>
12#include "mmoira.h"
13
14
15/******* temporary ********/
16char *atot(s) char *s; { return s; }
17
18
19
20int DisplayCallback(argc, info, form)
21int argc;
22char **info;
23EntryForm *form;
24{
25 char buf[1024], name[128];
26 char *MOD_FORMAT = "Modified by %s at %s with %s\n";
27 int i;
28
29 switch (form->menu->operation) {
30 case MM_SHOW_USER:
31 sprintf(name, "%s, %s %s", info[U_LAST], info[U_FIRST], info[U_MIDDLE]);
32 sprintf(buf, "Login name: %-20s Full name: %s\n", info[U_NAME], name);
33 add_to_display(buf);
34 sprintf(buf, "User id: %-23s Login shell %-10s Class: %s\n",
35 info[U_UID], info[U_SHELL], info[U_CLASS]);
36 add_to_display(buf);
37 sprintf(buf, "Account is: %-20s Encrypted MIT ID number: %s\n",
38 user_states[atoi(info[U_STATE])], info[U_MITID]);
39 add_to_display(buf);
40 sprintf(buf, MOD_FORMAT,
41 info[U_MODBY], info[U_MODTIME],info[U_MODWITH]);
42 add_to_display(buf);
43 break;
44 case MM_SHOW_FINGER:
45 sprintf(buf, "Nickname: %-29s Department: %s\n", info[F_NICKNAME],
46 info[F_MIT_DEPT]);
47 add_to_display(buf);
48 sprintf(buf, "finger %s =>\n", info[F_NAME]);
49 add_to_display(buf);
50 sprintf(buf, "Login name: %-27s In real life: %s\n", info[F_NAME],
51 info[F_FULLNAME]);
52 add_to_display(buf);
53 sprintf(buf, "Home: %-33s Home phone: %s\n", info[F_HOME_ADDR],
54 info[F_HOME_PHONE]);
55 add_to_display(buf);
56 sprintf(buf, "Office: %-31s Office phone: %s\n", info[F_OFFICE_ADDR],
57 info[F_OFFICE_PHONE]);
58 add_to_display(buf);
59 break;
60 case MM_SHOW_POBOX:
61 sprintf(buf, "Address: %-10s Box: %-35s Type: %s\n", info[PO_NAME],
62 info[PO_BOX], info[PO_TYPE]);
63 add_to_display(buf);
64 sprintf(buf, MOD_FORMAT, info[4], info[3], info[5]);
65 add_to_display(buf);
66 break;
67 case MM_SHOW_KRBMAP:
68 sprintf(buf, "User: %-9s Principal: %s\n",
69 info[KMAP_USER], info[KMAP_PRINCIPAL]);
70 add_to_display(buf);
71 break;
72 case MM_SHOW_FILSYS:
73 case MM_SHOW_FSGROUP:
74 if (!strcmp(info[FS_TYPE], "FSGROUP")) {
75 int stat;
76/* struct qelem *elem = NULL; */
77
78 sprintf(buf,"%20s Filesystem Group: %s\n", " ", info[FS_NAME]);
79 add_to_display(buf);
80
81 sprintf(buf,"Comments: %s\n",info[FS_COMMENTS]);
82 add_to_display(buf);
83 sprintf(buf, MOD_FORMAT, info[FS_MODBY], info[FS_MODTIME],
84 info[FS_MODWITH]);
85 add_to_display(buf);
86 add_to_display("Containing the filesystems (in order):");
87/*
88 if ((stat = do_moira_query("get_fsgroup_members", 1, &info[FS_NAME],
89 StoreInfo, (char *)&elem)) != 0) {
90 if (stat == MR_NO_MATCH)
91 add_to_display(" [no members]");
92 else
93 com_err(program_name, stat, NULL);
94 } else {
95 fsgCount = 1;
96 Loop(QueueTop(elem), (void *) PrintFSGMembers);
97 FreeQueue(elem);
98 }
99*/
100 } else {
101 sprintf(buf,"%20s Filesystem: %s\n", " ", info[FS_NAME]);
102 add_to_display(buf);
103 sprintf(buf,"Type: %-40s Machine: %-15s\n",
104 info[FS_TYPE], info[FS_MACHINE]);
105 add_to_display(buf);
106 sprintf(buf,"Default Access: %-2s Packname: %-17s Mountpoint %s \n",
107 info[FS_ACCESS], info[FS_PACK], info[FS_M_POINT]);
108 add_to_display(buf);
109 sprintf(buf,"Comments: %s\n",info[FS_COMMENTS]);
110 add_to_display(buf);
111 sprintf(buf, "User Ownership: %-30s Group Ownership: %s\n",
112 info[FS_OWNER], info[FS_OWNERS]);
113 add_to_display(buf);
114 sprintf(buf, "Auto Create: %-34s Locker Type: %s\n",
115 atoi(info[FS_CREATE]) ? "ON" : "OFF",
116 info[FS_L_TYPE]);
117 add_to_display(buf);
118 sprintf(buf, MOD_FORMAT, info[FS_MODBY], info[FS_MODTIME],
119 info[FS_MODWITH]);
120 add_to_display(buf);
121 }
122 break;
123 case MM_SHOW_NFS:
124 sprintf(buf,"Machine: %-20s Directory: %-15s Device: %s\n",
125 info[NFS_NAME], info[NFS_DIR], info[NFS_DEVICE]);
126 add_to_display(buf);
127
128 sprintf(buf, "Status: %s\n",
129 format_filesys_type(atoi(info[NFS_STATUS])));
130 add_to_display(buf);
131 sprintf(buf, "Quota Allocated: %-17s Size: %s\n",
132 info[NFS_ALLOC], info[NFS_SIZE]);
133 add_to_display(buf);
134 sprintf(buf, MOD_FORMAT, info[NFS_MODBY], info[NFS_MODTIME],
135 info[NFS_MODWITH]);
136 add_to_display(buf);
137 break;
138 case MM_SHOW_QUOTA:
139 if (!strcmp(info[Q_TYPE], "ANY"))
140 sprintf(buf, "Filesystem: %s\n", info[Q_FILESYS]);
141 else
142 sprintf(buf, "Filesystem: %-45s %s %s\n", info[Q_FILESYS],
143 info[Q_TYPE], info[Q_NAME]);
144 add_to_display(buf);
145 sprintf(buf, "Machine: %-20s Directory: %-15s\n",
146 info[Q_MACHINE], info[Q_DIRECTORY]);
147 add_to_display(buf);
148 sprintf(buf, "Quota: %s\n", info[Q_QUOTA]);
149 add_to_display(buf);
150 sprintf(buf, MOD_FORMAT, info[Q_MODBY], info[Q_MODTIME], info[Q_MODWITH]);
151 add_to_display(buf);
152 break;
153 case MM_SHOW_LIST:
154 (void) sprintf(buf, "%20sList: %s\n", "", info[L_NAME]);
155 add_to_display(buf);
156 (void) sprintf(buf, "Description: %s\n", info[L_DESC]);
157 add_to_display(buf);
158 if ( atoi(info[L_MAILLIST]))
159 add_to_display("This list is a mailing list.\n");
160 else
161 add_to_display("This list is NOT a mailing list.\n");
162 if (atoi(info[L_GROUP])) {
163 (void) sprintf(buf,"This list is a Group and its ID number is %s\n",
164 info[L_GID]);
165 add_to_display(buf);
166 } else
167 add_to_display("This list is NOT a Group.\n");
168 if (strcmp(info[L_ACE_TYPE],"NONE") == 0)
169 add_to_display("This list has no Administrator, how strange?!\n");
170 else {
171 sprintf(buf, "The Administrator of this list is the %s: %s\n",
172 info[L_ACE_TYPE], info[L_ACE_NAME]);
173 add_to_display(buf);
174 }
175 (void) sprintf(buf, "This list is: %s, %s, and %s\n",
176 atoi(info[L_ACTIVE]) ? "active" : "inactive",
177 atoi(info[L_PUBLIC]) ? "public" : "private",
178 atoi(info[L_HIDDEN]) ? "hidden" : "visible");
179 add_to_display(buf);
180 sprintf(buf, MOD_FORMAT, info[L_MODBY], info[L_MODTIME], info[L_MODWITH]);
181 add_to_display(buf);
182 break;
183 case MM_SHOW_MACH:
184 sprintf(buf, "Machine: %-30s Type: %s\n", info[M_NAME], info[M_TYPE]);
185 add_to_display(buf);
186 sprintf(buf, MOD_FORMAT, info[M_MODBY], info[M_MODTIME], info[M_MODWITH]);
187 add_to_display(buf);
188 break;
189 case MM_SHOW_CLUSTER:
190 sprintf(buf, "Cluster: %s\n", info[C_NAME]);
191 add_to_display(buf);
192 sprintf(buf, "Description: %s\n", info[C_DESCRIPT]);
193 add_to_display(buf);
194 sprintf(buf, "Location: %s\n", info[C_LOCATION]);
195 add_to_display(buf);
196 sprintf(buf, MOD_FORMAT, info[C_MODBY], info[C_MODTIME], info[C_MODWITH]);
197 add_to_display(buf);
198 break;
199 case MM_SHOW_CLDATA:
200 sprintf(buf, "Cluster: %-20s Label: %-15s Data: %s\n",
201 info[CD_NAME], info[CD_LABEL], info[CD_DATA]);
202 add_to_display(buf);
203 break;
204 case MM_SHOW_MEMBERS:
205 if (argc == 2)
206 sprintf(buf, "%-9s %s\n", info[0], info[1]);
207 else
208 sprintf(buf, "%s\n", info[0]);
209 add_to_display(buf);
210 break;
211 case MM_STATS:
212 sprintf(buf, "Table: %-20s Modified: %s\n", info[0], info[5]);
213 add_to_display(buf);
214 sprintf(buf, " %-8D appends, %-8d updates, %-8d deletes\n",
215 info[2], info[3], info[4]);
216 add_to_display(buf);
217 break;
218 case MM_CLIENTS:
219 {
220 unsigned long host_address;
221 struct hostent *host_entry;
222
223 host_address = inet_addr(info[1]);
224 if (host_address != NULL) {
225 host_entry = gethostbyaddr((char *)&host_address, 4, AF_INET);
226 if (host_entry != NULL) {
227 free(info[1]);
228 info[1] = strsave(host_entry->h_name);
229 }
230 }
231 }
232 sprintf(buf, "Principal %s on %s (%s)\n", info[0], info[1], info[2]);
233 add_to_display(buf);
234 sprintf(buf, " Connected at %s, client %s\n", info[3], info[4]);
235 add_to_display(buf);
236 break;
237 case MM_SHOW_VALUE:
238 sprintf(buf, "Variable: %-20s Value: %s\n", stringval(form, 0),
239 info[0]);
240 add_to_display(buf);
241 break;
242 case MM_SHOW_ALIAS:
243 sprintf(buf, "Alias: %-20s Type: %-8s Value: %s\n",
244 info[0], info[1], info[2]);
245 add_to_display(buf);
246 break;
247 case MM_SHOW_HOST:
248 sprintf(buf, "%s:%s mod by %s on %s with %s\n", info[SH_MACHINE],
249 info[SH_SERVICE], info[SH_MODBY], info[SH_MODTIME],
250 info[SH_MODWITH]);
251 Put_message(buf);
252 if (atoi(info[SH_HOSTERROR]))
253 sprintf(name, "Error %d: %s", atoi(info[SH_HOSTERROR]),
254 info[SH_ERRMSG]);
255 else
256 strcpy(name, "No error");
257 sprintf(buf, " %s/%s/%s/%s/%s\n",
258 atoi(info[SH_ENABLE]) ? "Enabled" : "Disabled",
259 atoi(info[SH_SUCCESS]) ? "Success" : "Failure",
260 atoi(info[SH_INPROGRESS]) ? "InProgress" : "Idle",
261 atoi(info[SH_OVERRIDE]) ? "Override" : "Normal", name);
262 Put_message(buf);
263 Put_message(" Last Try Last Success Value1 Value2 Value3\n");
264 strcpy(name, atot(info[SH_LASTTRY]));
265 sprintf(buf, " %-20s %-20s %-9d %-9d %s\n", name,
266 atot(info[SH_LASTSUCCESS]), atoi(info[SH_VALUE1]),
267 atoi(info[SH_VALUE2]), info[SH_VALUE3]);
268 Put_message(buf);
269 break;
270 case MM_SHOW_DQUOTA:
271 sprintf(buf, "The default quota is %s Kbytes.\n", info[0]);
272 Put_message(buf);
273 break;
274 case MM_SHOW_DCM:
275 if (argc == 2)
276 sprintf(buf, "%s:%s\n", info[0], info[1]);
277 else
278 sprintf(buf, "%s\n", info[0]);
279 Put_message(buf);
280 break;
281 default:
282 for (i = 0; i < argc; i++) {
283 if (i != 0) add_to_display(", ");
284 add_to_display(info[i]);
285 }
286 add_to_display("\n");
287 }
288 return(MR_CONT);
289}
290
291
292/* Called with moira data that is to be modified. */
293
294int ModifyCallback(argc, argv, form)
295int argc;
296char **argv;
297EntryForm *form;
298{
299 EntryForm *f;
300 char *fn;
301 int count, i, offset;
302
303 count = -1;
304 offset = 0;
305 switch (form->menu->operation) {
306 case MM_MOD_USER:
307 fn = "mod_user";
308 count = U_MODTIME;
309 break;
310 case MM_MOD_FINGER:
311 fn = "mod_finger";
312 count = F_MODTIME - 1;
313 offset = 1;
314 break;
315 case MM_REGISTER:
316 if (form->extrastuff)
317 form->extrastuff = NULL;
318 else
319 form->extrastuff = strsave(argv[U_UID]);
320 return;
321 break;
322 case MM_MOD_LIST:
323 fn = "mod_list";
324 count = L_MODTIME;
325 break;
326 case MM_MOD_FILSYS:
327 fn = "mod_filsys";
328 count = FS_MODTIME;
329 break;
330 }
331
332 if (count > 0) {
333 f = GetAndClearForm(fn);
334 if (f == NULL) {
335 display_error("Unknown form in ModifyCallback!\n");
336 return;
337 }
338 f->extrastuff = form->extrastuff;
339 f->menu = form->menu;
340 for (i = 0; i < count; i++)
341 if (f->inputlines[i]->type == FT_BOOLEAN)
342 f->inputlines[i]->returnvalue.boolean =
343 strcmp(argv[i + offset], "0") ? 1 : 0;
344 else
345 StoreField(f, i, argv[i + offset]);
346 } else {
347 display_error("Unknown function in ModifyCallback!\n");
348 return;
349 }
350}
351
352
353
354/* callback when form is complete to process the data */
355
356MoiraFormComplete(dummy1, form)
357int dummy1;
358EntryForm *form;
359{
360 char *qy, *argv[32], buf[256];
361 int (*retfunc)(), argc, i;
362 EntryForm *f;
363
364 retfunc = DisplayCallback;
365 argc = -1;
366
367 for (i = 0; form->inputlines[i]; i++)
368 if (form->inputlines[i]->type == FT_BOOLEAN)
369 argv[i] = boolval(form, i) ? "1" : "0";
370 else
371 argv[i] = stringval(form, i);
372
373 switch (form->menu->operation) {
374 case MM_SHOW_USER:
375 if (*stringval(form, 0)) {
376 qy = "get_user_by_login";
377 argv[0] = stringval(form, 0);
378 argc = 1;
379 } else if (*stringval(form, 3)) {
380 qy = "get_user_by_uid";
381 argv[0] = stringval(form, 3);
382 argc = 1;
383 } else if (*stringval(form, 4)) {
384 qy = "get_user_by_class";
385 argv[0] = stringval(form, 4);
386 argc = 1;
387 } else if (*stringval(form, 1) == 0 &&
388 *stringval(form, 2) == 0) {
389 DisplayError("Must fill in at least one blank.");
390 return;
391 } else {
392 if (*stringval(form, 1) == 0)
393 StoreField(form, 1, "*");
394 if (*stringval(form, 2) == 0)
395 StoreField(form, 2, "*");
396 qy = "get_user_by_name";
397 argv[0] = stringval(form, 1);
398 argv[1] = stringval(form, 2);
399 argc = 2;
400 }
401 break;
402 case MM_ADD_USER:
403 qy = "add_user";
404 argv[U_STATE][1] = 0;
405 if (argv[U_MITID][0] == '"')
406 strcpy(argv[U_MITID], stringval(form, U_MITID) + 1,
407 strlen(stringval(form, U_MITID) - 2));
408 else
409 EncryptID(argv[U_MITID], argv[U_MITID], argv[U_FIRST], argv[U_LAST]);
410 argc = U_MODTIME;
411 break;
412 case MM_REGISTER:
413 if (*stringval(form, 2)) {
414 argv[0] = stringval(form, 2);
415 } else {
416 argv[0] = stringval(form, 0);
417 argv[1] = stringval(form, 1);
418 form->extrastuff = NULL;
419 i = MoiraQuery("get_user_by_name", 2, argv,
420 ModifyCallback, (char *)form);
421 if (i) {
422 com_err(program_name, i, "looking up user by name");
423 return;
424 }
425 if (form->extrastuff == NULL) {
426 display_error("Ambiguous user specification");
427 return;
428 }
429 argv[0] = (char *)form->extrastuff;
430 }
431 qy = "register_user";
432 argv[1] = stringval(form, 3);
433 argv[2] = "1";
434 argc = 3;
435 break;
436 case MM_MOD_USER:
437 if (!strcmp(form->formname, "mod_user")) {
438 qy = "update_user";
439 for (i = 0; i < U_MODTIME; i++)
440 argv[i + 1] = stringval(form, i);
441 argv[0] = form->extrastuff;
442 argv[U_STATE + 1][1] = 0;
443 if (argv[U_MITID + 1][0] == '"') {
444 strcpy(argv[U_MITID + 1], stringval(form, U_MITID) + 1);
445 stringval(form, U_MITID)[strlen(stringval(form, U_MITID))-1] = 0;
446 } else
447 EncryptID(argv[U_MITID + 1], argv[U_MITID + 1],
448 argv[U_FIRST + 1], argv[U_LAST + 1]);
449 argc = U_MODTIME + 1;
450 break;
451 }
452 qy = "get_user_by_login";
453 argv[0] = stringval(form, 0);
454 argc = 1;
455 form->extrastuff = (caddr_t) "mod_user";
456 retfunc = ModifyCallback;
457 break;
458 case MM_DEACTIVATE:
459 qy = "update_user_status";
460 argv[0] = stringval(form, 0);
461 argv[1] = "3";
462 argc = 2;
463 break;
464 case MM_EXPUNGE:
465 display_error("Expunge is not yet implemented");
466 return;
467 break;
468 case MM_SHOW_FINGER:
469 qy = "get_finger_by_login";
470 argc = 1;
471 break;
472 case MM_MOD_FINGER:
473 if (!strcmp(form->formname, "mod_finger")) {
474 qy = "update_finger_by_login";
475 for (i = 0; i < F_MODTIME - 1; i++)
476 argv[i + 1] = stringval(form, i);
477 argv[0] = form->extrastuff;
478 argc = F_MODTIME;
479 break;
480 }
481 qy = "get_finger_by_login";
482 argc = 1;
483 form->extrastuff = (caddr_t) "mod_finger";
484 retfunc = ModifyCallback;
485 break;
486 case MM_SHOW_KRBMAP:
487 qy = "get_krbmap";
488 if (!*stringval(form, 0))
489 argv[0] = "*";
490 if (!*stringval(form, 1))
491 argv[1] = "*";
492 argc = 2;
493 break;
494 case MM_ADD_KRBMAP:
495 qy = "add_krbmap";
496 argc = 2;
497 break;
498 case MM_DEL_KRBMAP:
499 qy = "delete_krbmap";
500 argc = 2;
501 break;
502 case MM_SHOW_POBOX:
503 qy = "get_pobox";
504 argc = 1;
505 break;
506 case MM_SET_POBOX:
507 qy = "set_pobox";
508 if (!strcmp(argv[1], "POP"))
509 argv[2] = stringval(form, 3);
510 argc = 3;
511 break;
512 case MM_RESET_POBOX:
513 qy = "set_pobox_pop";
514 argc = 1;
515 break;
516 case MM_DEL_POBOX:
517 qy = "set_pobox";
518 argv[0] = stringval(form, 0);
519 argv[1] = "NONE";
520 argv[2] = "";
521 argc = 3;
522 break;
523 case MM_SHOW_LIST:
524 qy = "get_list_info";
525 argc = 1;
526 break;
527 case MM_SHOW_ACE_USE:
528 qy = "get_ace_use";
529 if (boolval(form, 2)) {
530 sprintf(buf, "R%s", stringval(form, 0));
531 argv[0] = buf;
532 }
533 argc = 2;
534 break;
535 case MM_ADD_LIST:
536 qy = "add_list";
537 argc = L_MODTIME;
538 break;
539 case MM_MOD_LIST:
540 if (!strcmp(form->formname, "mod_list")) {
541 qy = "update_list";
542 for (i = 0; i < L_MODTIME; i++)
543 argv[i + 1] = stringval(form, i);
544 argv[0] = form->extrastuff;
545 argc = L_MODTIME + 1;
546 break;
547 }
548 qy = "get_list_info";
549 argc = 1;
550 form->extrastuff = (caddr_t) "mod_list";
551 retfunc = ModifyCallback;
552 break;
553 case MM_DEL_LIST:
554 qy = "delete_list";
555 argc = 1;
556 break;
557 case MM_SHOW_MEMBERS:
558 if (*stringval(form, 0)) {
559 qy = "get_members_of_list";
560 argc = 1;
561 } else {
562 qy = "get_lists_of_member";
563 argv[0] = stringval(form, 1);
564 if (boolval(form, 3)) {
565 sprintf(buf, "R%s", stringval(form, 1));
566 argv[0] = buf;
567 }
568 argv[1] = stringval(form, 2);
569 argc = 2;
570 }
571 break;
572 case MM_ADD_MEMBER:
573 qy = "add_member_to_list";
574 argc = 3;
575 break;
576 case MM_DEL_MEMBER:
577 qy = "delete_member_from_list";
578 argc = 3;
579 break;
580 case MM_DEL_ALL_MEMBER:
581 display_error("Not yet implemented.");
582 return;
583 break;
584 case MM_SHOW_FILSYS:
585 if (*stringval(form, 0)) {
586 qy = "get_filesys_by_label";
587 argv[0] = stringval(form, 0);
588 argc = 1;
589 } else if (*stringval(form, 1)) {
590 argv[0] = canonicalize_hostname(stringval(form, 1));
591 if (*stringval(form, 2)) {
592 qy = "get_filesys_by_nfsphys";
593 argv[1] = stringval(form, 2);
594 argc = 2;
595 } else {
596 qy = "get_filesys_by_machine";
597 argc = 1;
598 }
599 } else if (*stringval(form, 3)) {
600 qy = "get_filesys_by_group";
601 argv[0] = stringval(form, 3);
602 argc = 1;
603 }
604 break;
605 case MM_ADD_FILSYS:
606 qy = "add_filesys";
607 argv[FS_MACHINE] = canonicalize_hostname(stringval(form, FS_MACHINE));
608 if (!strcmp(stringval(form, FS_TYPE), "AFS") ||
609 !strcmp(stringval(form, FS_TYPE), "FSGROUP"))
610 argv[FS_MACHINE] = "\\[NONE\\]";
611 argc = FS_MODTIME;
612 break;
613 case MM_MOD_FILSYS:
614 if (!strcmp(form->formname, "mod_filsys")) {
615 qy = "update_filsys";
616 for (i = 0; i < FS_MODTIME; i++)
617 argv[i + 1] = stringval(form, i);
618 argv[0] = form->extrastuff;
619 argc = FS_MODTIME + 1;
620 break;
621 }
622 qy = "get_filesys_by_label";
623 argv[0] = stringval(form, 0);
624 argc = 1;
625 form->extrastuff = (caddr_t) "mod_filsys";
626 retfunc = ModifyCallback;
627 break;
628 }
629
630 if (argc == -1) {
631 display_error("Unknown function in form callback.\n");
632 return;
633 }
634 i = MoiraQuery(qy, argc, argv, retfunc, (char *)form);
635 if (i) {
636 com_err(program_name, i, "executing database query");
637 return;
638 }
639
640 f = NULL;
641 if (form->extrastuff && (f = GetForm((char *)(form->extrastuff)))) {
642 f->extrastuff = (caddr_t) strsave(stringval(form, 0));
643 f->menu = form->menu;
644 }
645
646 switch (form->menu->operation) {
647 case MM_MOD_USER:
648 if (f) {
649 qy = strsave(stringval(f, U_MITID));
650 sprintf(stringval(f, U_MITID), "\"%s\"", qy);
651 free(qy);
652 f->inputlines[U_STATE]->keywords = user_states;
653 StoreField(f, U_STATE, user_states[atoi(stringval(f, U_STATE))]);
654 GetKeywords(f, U_CLASS, "class");
655 } else
656 add_to_display("Done.\n");
657 break;
658 case MM_MOD_FINGER:
659 if (!f)
660 add_to_display("Done.\n");
661 break;
662 case MM_MOD_LIST:
663 if (f)
664 GetKeywords(f, L_ACE_TYPE, "ace_type");
665 else
666 add_to_display("Done.\n");
667 break;
668 case MM_MOD_FILSYS:
669 if (f) {
670 GetKeywords(f, FS_TYPE, "filesys");
671 sprintf(buf, "fs_access_%s", stringval(f, FS_TYPE));
672 GetKeywords(f, FS_ACCESS, buf);
673 GetKeywords(f, FS_L_TYPE, "lockertype");
674 if (!strcmp(stringval(f, FS_MACHINE), "[NONE]"))
675 StoreField(f, FS_MACHINE, "\\[NONE\\]");
676 } else
677 add_to_display("Done.\n");
678 break;
679 case MM_ADD_HOST:
680 case MM_DEL_HOST:
681 case MM_CLEAR_HOST:
682 case MM_RESET_HOST:
683 case MM_ADD_SERVICE:
684 case MM_DEL_SERVICE:
685 case MM_CLEAR_SERVICE:
686 case MM_RESET_SERVICE:
687 case MM_ENABLE_DCM:
688 case MM_TRIGGER_DCM:
689 case MM_ADD_ZEPHYR:
690 case MM_DEL_ZEPHYR:
691 case MM_ADD_PCAP:
692 case MM_DEL_PCAP:
693 case MM_ADD_CLDATA:
694 case MM_DEL_CLDATA:
695 case MM_ADD_MCMAP:
696 case MM_DEL_MCMAP:
697 case MM_ADD_CLUSTER:
698 case MM_DEL_CLUSTER:
699 case MM_ADD_MACH:
700 case MM_DEL_MACH:
701 case MM_ADD_MEMBER:
702 case MM_DEL_MEMBER:
703 case MM_DEL_ALL_MEMBER:
704 case MM_ADD_LIST:
705 case MM_DEL_LIST:
706 case MM_ADD_QUOTA:
707 case MM_DEL_QUOTA:
708 case MM_SET_DQUOTA:
709 case MM_ADD_NFS:
710 case MM_DEL_NFS:
711 case MM_ADD_FS_ALIAS:
712 case MM_DEL_FS_ALIAS:
713 case MM_ADD_FSGROUP:
714 case MM_MOV_FSGROUP:
715 case MM_DEL_FSGROUP:
716 case MM_ADD_FILSYS:
717 case MM_DEL_FILSYS:
718 case MM_ADD_KRBMAP:
719 case MM_DEL_KRBMAP:
720 case MM_SET_POBOX:
721 case MM_DEL_POBOX:
722 case MM_ADD_USER:
723 case MM_REGISTER:
724 case MM_DEACTIVATE:
725 case MM_EXPUNGE:
726 add_to_display("Done.\n");
727 }
728
729 if (f)
730 DisplayForm(f);
731}
732
733
734MoiraMenuComplete(m)
735MenuItem *m;
736{
737 char *qy, *argv[32];
738 int (*retfunc)(), argc, i;
739 EntryForm dummy;
740
741 retfunc = DisplayCallback;
742 argc = -1;
743 dummy.menu = m;
744
745 switch (m->operation) {
746 case MM_SHOW_MAILLIST:
747 qy = "qualified_get_lists";
748 argv[0] = argv[1] = argv[3] = "TRUE";
749 argv[2] = "FALSE";
750 argv[4] = "DONTCARE";
751 argc = 5;
752 break;
753 case MM_SHOW_DQUOTA:
754 qy = "get_value";
755 argv[0] = "def_quota";
756 argc = 1;
757 break;
758 case MM_SHOW_DCM:
759 Put_message("Services and Hosts with failed updates:");
760 argv[0] = argv[2] = "DONTCARE";
761 argv[1] = "TRUE";
762 i = MoiraQuery("qualified_get_server", 3, argv, retfunc, NULL);
763 if (i && i != MR_NO_MATCH)
764 com_err(program_name, i, "executing database query");
765 qy = "qualified_get_server_host";
766 argv[0] = "*";
767 argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE";
768 argv[4] = "TRUE";
769 argc = 6;
770 break;
771 case MM_STATS:
772 qy = "get_all_table_stats";
773 argc = 0;
774 break;
775 case MM_CLIENTS:
776 qy = "_list_users";
777 argc = 0;
778 break;
779 }
780 if (argc == -1) {
781 display_error("Unknown function in menu callback.\n");
782 return;
783 }
784 i = MoiraQuery(qy, argc, argv, retfunc, (char *)&dummy);
785 if (i)
786 com_err(program_name, i, "executing database query");
787}
788
789
790/******* temporary ********/
791DisplayError(msg) char *msg; { fprintf(stderr, "%s\n", msg); }
792Put_message(msg) char *msg; { fputs( msg, stderr); }
793add_to_display(msg) char *msg; { fputs(msg, stderr); }
This page took 0.347453 seconds and 5 git commands to generate.