]> andersk Git - moira.git/blob - clients/mmoira/moira_cb.c
Used /bin/sh format instead of /bin/csh format, by accident.
[moira.git] / clients / mmoira / moira_cb.c
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 ********/
16 char *atot(s) char *s; { return s; }
17
18
19
20 int DisplayCallback(argc, info, form)
21 int argc;
22 char **info;
23 EntryForm *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
294 int ModifyCallback(argc, argv, form)
295 int argc;
296 char **argv;
297 EntryForm *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
356 MoiraFormComplete(dummy1, form)
357 int dummy1;
358 EntryForm *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
734 MoiraMenuComplete(m)
735 MenuItem *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 ********/
791 DisplayError(msg) char *msg; { fprintf(stderr, "%s\n", msg); }
792 Put_message(msg) char *msg; { fputs( msg, stderr); }
793 add_to_display(msg) char *msg; { fputs(msg, stderr); }
This page took 0.193221 seconds and 5 git commands to generate.