]>
Commit | Line | Data |
---|---|---|
83d3aa0c | 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 | /* Called with moira data that is to be modified. */ | |
16 | ||
17 | int ModifyCallback(argc, argv, form) | |
18 | int argc; | |
19 | char **argv; | |
20 | EntryForm *form; | |
21 | { | |
22 | EntryForm *f; | |
23 | char *fn; | |
24 | int count, i, offset; | |
25 | ||
26 | count = -1; | |
27 | offset = 0; | |
28 | switch (form->menu->operation) { | |
29 | case MM_MOD_USER: | |
30 | fn = "mod_user"; | |
31 | count = U_MODTIME; | |
32 | break; | |
33 | case MM_MOD_FINGER: | |
34 | fn = "mod_finger"; | |
35 | count = F_MODTIME - 1; | |
36 | offset = 1; | |
37 | break; | |
38 | case MM_REGISTER: | |
39 | if (form->extrastuff) | |
40 | form->extrastuff = NULL; | |
41 | else | |
42 | form->extrastuff = strsave(argv[U_UID]); | |
43 | return; | |
44 | break; | |
45 | case MM_MOD_LIST: | |
46 | fn = "mod_list"; | |
47 | count = L_MODTIME; | |
48 | break; | |
49 | case MM_MOD_FILSYS: | |
50 | fn = "mod_filsys"; | |
51 | count = FS_MODTIME; | |
52 | break; | |
b2d21e59 | 53 | case MM_MOD_NFS: |
54 | f = GetAndClearForm("mod_nfs"); | |
55 | if (f == NULL) { | |
56 | display_error("Unknown form in ModifyCallback of mod_nfs\n"); | |
57 | return; | |
58 | } | |
59 | f->extrastuff = form->extrastuff; | |
60 | f->menu = form->menu; | |
61 | StoreField(f, 0, argv[0]); | |
62 | StoreField(f, 1, argv[1]); | |
63 | StoreField(f, 2, argv[2]); | |
64 | f->inputlines[3]->keywords = nfs_states; | |
65 | for (i = 0; nfs_states[i]; i++) | |
66 | if ((atoi(nfs_states[i]) & ~MR_FS_GROUPQUOTA) == atoi(argv[3])) | |
67 | StoreField(f, 3, nfs_states[i]); | |
68 | StoreField(f, 3, argv[3]); | |
69 | if (atoi(argv[3]) && MR_FS_GROUPQUOTA) | |
70 | f->inputlines[4]->returnvalue.booleanvalue = 1; | |
71 | StoreField(f, 5, argv[4]); | |
72 | StoreField(f, 6, argv[5]); | |
73 | return; | |
74 | case MM_MOD_MACH: | |
75 | fn = "mod_machine"; | |
76 | count = M_MODTIME; | |
77 | break; | |
78 | case MM_MOD_CLUSTER: | |
79 | fn = "mod_cluster"; | |
80 | count = C_MODTIME; | |
81 | break; | |
83d3aa0c | 82 | } |
83 | ||
84 | if (count > 0) { | |
85 | f = GetAndClearForm(fn); | |
86 | if (f == NULL) { | |
87 | display_error("Unknown form in ModifyCallback!\n"); | |
88 | return; | |
89 | } | |
90 | f->extrastuff = form->extrastuff; | |
91 | f->menu = form->menu; | |
92 | for (i = 0; i < count; i++) | |
93 | if (f->inputlines[i]->type == FT_BOOLEAN) | |
94 | f->inputlines[i]->returnvalue.booleanvalue = | |
95 | strcmp(argv[i + offset], "0") ? 1 : 0; | |
96 | else | |
97 | StoreField(f, i, argv[i + offset]); | |
98 | } else { | |
99 | display_error("Unknown function in ModifyCallback!\n"); | |
100 | return; | |
101 | } | |
102 | } | |
103 | ||
104 | ||
105 | ||
106 | /* callback when form is complete to process the data */ | |
107 | ||
108 | MoiraFormComplete(dummy1, form) | |
109 | int dummy1; | |
110 | EntryForm *form; | |
111 | { | |
b2d21e59 | 112 | char *qy, *argv[32], buf[256], *s; |
83d3aa0c | 113 | int (*retfunc)(), argc, i; |
114 | EntryForm *f; | |
b2d21e59 | 115 | static int persistant_forms = 0; |
83d3aa0c | 116 | |
117 | retfunc = DisplayCallback; | |
118 | argc = -1; | |
119 | ||
120 | for (i = 0; form->inputlines[i]; i++) | |
892c98b2 | 121 | argv[i] = StringValue(form, i); |
122 | qy = form->menu->query; | |
123 | argc = form->menu->argc; | |
83d3aa0c | 124 | |
125 | switch (form->menu->operation) { | |
126 | case MM_SHOW_USER: | |
127 | if (*stringval(form, 0)) { | |
128 | qy = "get_user_by_login"; | |
129 | argv[0] = stringval(form, 0); | |
130 | argc = 1; | |
131 | } else if (*stringval(form, 3)) { | |
132 | qy = "get_user_by_uid"; | |
133 | argv[0] = stringval(form, 3); | |
134 | argc = 1; | |
135 | } else if (*stringval(form, 4)) { | |
136 | qy = "get_user_by_class"; | |
137 | argv[0] = stringval(form, 4); | |
138 | argc = 1; | |
139 | } else if (*stringval(form, 1) == 0 && | |
140 | *stringval(form, 2) == 0) { | |
892c98b2 | 141 | display_error("Must fill in at least one blank."); |
83d3aa0c | 142 | return; |
143 | } else { | |
144 | if (*stringval(form, 1) == 0) | |
145 | StoreField(form, 1, "*"); | |
146 | if (*stringval(form, 2) == 0) | |
147 | StoreField(form, 2, "*"); | |
148 | qy = "get_user_by_name"; | |
149 | argv[0] = stringval(form, 1); | |
150 | argv[1] = stringval(form, 2); | |
151 | argc = 2; | |
152 | } | |
153 | break; | |
154 | case MM_ADD_USER: | |
83d3aa0c | 155 | argv[U_STATE][1] = 0; |
156 | if (argv[U_MITID][0] == '"') | |
157 | strcpy(argv[U_MITID], stringval(form, U_MITID) + 1, | |
158 | strlen(stringval(form, U_MITID) - 2)); | |
159 | else | |
160 | EncryptID(argv[U_MITID], argv[U_MITID], argv[U_FIRST], argv[U_LAST]); | |
83d3aa0c | 161 | break; |
162 | case MM_REGISTER: | |
163 | if (*stringval(form, 2)) { | |
164 | argv[0] = stringval(form, 2); | |
165 | } else { | |
166 | argv[0] = stringval(form, 0); | |
167 | argv[1] = stringval(form, 1); | |
168 | form->extrastuff = NULL; | |
169 | i = MoiraQuery("get_user_by_name", 2, argv, | |
170 | ModifyCallback, (char *)form); | |
171 | if (i) { | |
b2d21e59 | 172 | com_err(program_name, i, " looking up user by name"); |
83d3aa0c | 173 | return; |
174 | } | |
175 | if (form->extrastuff == NULL) { | |
176 | display_error("Ambiguous user specification"); | |
177 | return; | |
178 | } | |
179 | argv[0] = (char *)form->extrastuff; | |
180 | } | |
181 | qy = "register_user"; | |
182 | argv[1] = stringval(form, 3); | |
183 | argv[2] = "1"; | |
184 | argc = 3; | |
185 | break; | |
186 | case MM_MOD_USER: | |
187 | if (!strcmp(form->formname, "mod_user")) { | |
188 | qy = "update_user"; | |
189 | for (i = 0; i < U_MODTIME; i++) | |
892c98b2 | 190 | argv[i + 1] = StringValue(form, i); |
83d3aa0c | 191 | argv[0] = form->extrastuff; |
192 | argv[U_STATE + 1][1] = 0; | |
193 | if (argv[U_MITID + 1][0] == '"') { | |
194 | strcpy(argv[U_MITID + 1], stringval(form, U_MITID) + 1); | |
195 | stringval(form, U_MITID)[strlen(stringval(form, U_MITID))-1] = 0; | |
196 | } else | |
197 | EncryptID(argv[U_MITID + 1], argv[U_MITID + 1], | |
198 | argv[U_FIRST + 1], argv[U_LAST + 1]); | |
199 | argc = U_MODTIME + 1; | |
200 | break; | |
201 | } | |
83d3aa0c | 202 | form->extrastuff = (caddr_t) "mod_user"; |
203 | retfunc = ModifyCallback; | |
204 | break; | |
205 | case MM_DEACTIVATE: | |
83d3aa0c | 206 | argv[1] = "3"; |
83d3aa0c | 207 | break; |
208 | case MM_EXPUNGE: | |
209 | display_error("Expunge is not yet implemented"); | |
210 | return; | |
211 | break; | |
83d3aa0c | 212 | case MM_MOD_FINGER: |
213 | if (!strcmp(form->formname, "mod_finger")) { | |
214 | qy = "update_finger_by_login"; | |
215 | for (i = 0; i < F_MODTIME - 1; i++) | |
892c98b2 | 216 | argv[i + 1] = StringValue(form, i); |
83d3aa0c | 217 | argv[0] = form->extrastuff; |
218 | argc = F_MODTIME; | |
219 | break; | |
220 | } | |
83d3aa0c | 221 | form->extrastuff = (caddr_t) "mod_finger"; |
222 | retfunc = ModifyCallback; | |
223 | break; | |
224 | case MM_SHOW_KRBMAP: | |
83d3aa0c | 225 | if (!*stringval(form, 0)) |
226 | argv[0] = "*"; | |
227 | if (!*stringval(form, 1)) | |
228 | argv[1] = "*"; | |
83d3aa0c | 229 | break; |
230 | case MM_SET_POBOX: | |
83d3aa0c | 231 | if (!strcmp(argv[1], "POP")) |
232 | argv[2] = stringval(form, 3); | |
83d3aa0c | 233 | break; |
234 | case MM_SHOW_ACE_USE: | |
83d3aa0c | 235 | if (boolval(form, 2)) { |
236 | sprintf(buf, "R%s", stringval(form, 0)); | |
237 | argv[0] = buf; | |
238 | } | |
83d3aa0c | 239 | break; |
240 | case MM_MOD_LIST: | |
241 | if (!strcmp(form->formname, "mod_list")) { | |
242 | qy = "update_list"; | |
243 | for (i = 0; i < L_MODTIME; i++) | |
892c98b2 | 244 | argv[i + 1] = StringValue(form, i); |
83d3aa0c | 245 | argv[0] = form->extrastuff; |
246 | argc = L_MODTIME + 1; | |
247 | break; | |
248 | } | |
83d3aa0c | 249 | form->extrastuff = (caddr_t) "mod_list"; |
250 | retfunc = ModifyCallback; | |
251 | break; | |
83d3aa0c | 252 | case MM_SHOW_MEMBERS: |
892c98b2 | 253 | if (!*stringval(form, 0)) { |
83d3aa0c | 254 | qy = "get_lists_of_member"; |
255 | argv[0] = stringval(form, 1); | |
b2d21e59 | 256 | sprintf(buf, "Lists of %s %s:\n", stringval(form, 1), argv[1]); |
257 | AppendToLog(buf); | |
83d3aa0c | 258 | if (boolval(form, 3)) { |
259 | sprintf(buf, "R%s", stringval(form, 1)); | |
260 | argv[0] = buf; | |
261 | } | |
262 | argv[1] = stringval(form, 2); | |
263 | argc = 2; | |
b2d21e59 | 264 | } else { |
265 | sprintf(buf, "Members of list %s:\n", argv[0]); | |
266 | AppendToLog(buf); | |
83d3aa0c | 267 | } |
268 | break; | |
83d3aa0c | 269 | case MM_DEL_ALL_MEMBER: |
270 | display_error("Not yet implemented."); | |
271 | return; | |
272 | break; | |
273 | case MM_SHOW_FILSYS: | |
274 | if (*stringval(form, 0)) { | |
275 | qy = "get_filesys_by_label"; | |
276 | argv[0] = stringval(form, 0); | |
277 | argc = 1; | |
278 | } else if (*stringval(form, 1)) { | |
b2d21e59 | 279 | StoreHost(form, 1, &argv[0]); |
83d3aa0c | 280 | if (*stringval(form, 2)) { |
281 | qy = "get_filesys_by_nfsphys"; | |
282 | argv[1] = stringval(form, 2); | |
283 | argc = 2; | |
284 | } else { | |
285 | qy = "get_filesys_by_machine"; | |
286 | argc = 1; | |
287 | } | |
288 | } else if (*stringval(form, 3)) { | |
289 | qy = "get_filesys_by_group"; | |
290 | argv[0] = stringval(form, 3); | |
291 | argc = 1; | |
292 | } | |
293 | break; | |
294 | case MM_ADD_FILSYS: | |
b2d21e59 | 295 | StoreHost(form, FS_MACHINE, &argv[FS_MACHINE]); |
83d3aa0c | 296 | if (!strcmp(stringval(form, FS_TYPE), "AFS") || |
297 | !strcmp(stringval(form, FS_TYPE), "FSGROUP")) | |
298 | argv[FS_MACHINE] = "\\[NONE\\]"; | |
83d3aa0c | 299 | break; |
300 | case MM_MOD_FILSYS: | |
301 | if (!strcmp(form->formname, "mod_filsys")) { | |
b2d21e59 | 302 | qy = "update_filesys"; |
83d3aa0c | 303 | for (i = 0; i < FS_MODTIME; i++) |
892c98b2 | 304 | argv[i + 1] = StringValue(form, i); |
b2d21e59 | 305 | StoreHost(form, FS_MACHINE, &argv[FS_MACHINE + 1]); |
83d3aa0c | 306 | argv[0] = form->extrastuff; |
307 | argc = FS_MODTIME + 1; | |
308 | break; | |
309 | } | |
83d3aa0c | 310 | form->extrastuff = (caddr_t) "mod_filsys"; |
311 | retfunc = ModifyCallback; | |
312 | break; | |
b2d21e59 | 313 | case MM_ADD_FSGROUP: |
314 | ||
315 | break; | |
316 | case MM_SHOW_FS_ALIAS: | |
317 | case MM_ADD_FS_ALIAS: | |
318 | case MM_DEL_FS_ALIAS: | |
319 | argv[1] = "FILESYS"; | |
320 | argv[2] = stringval(form, 1); | |
321 | break; | |
322 | case MM_SHOW_NFS: | |
323 | StoreHost(form, NFS_NAME, &argv[NFS_NAME]); | |
324 | if (!*stringval(form, 1)) | |
325 | argv[1] = "*"; | |
326 | break; | |
327 | case MM_ADD_NFS: | |
328 | StoreHost(form, NFS_NAME, &argv[NFS_NAME]); | |
329 | sprintf(buf, "%d", atoi(stringval(form, NFS_STATUS)) + | |
330 | (boolval(form, 4) ? MR_FS_GROUPQUOTA : 0)); | |
331 | argv[NFS_STATUS] = buf; | |
332 | argv[NFS_ALLOC] = stringval(form, 5); | |
333 | argv[NFS_SIZE] = stringval(form, 6); | |
334 | break; | |
335 | case MM_MOD_NFS: | |
336 | StoreHost(form, NFS_NAME, &argv[NFS_NAME]); | |
337 | if (!strcmp(form->formname, "mod_nfs")) { | |
338 | qy = "update_nfsphys"; | |
339 | argc = NFS_MODTIME; | |
340 | break; | |
341 | } | |
342 | form->extrastuff = (caddr_t) "mod_nfs"; | |
343 | retfunc = ModifyCallback; | |
344 | break; | |
345 | case MM_DEL_NFS: | |
346 | StoreHost(form, NFS_NAME, &argv[NFS_NAME]); | |
347 | break; | |
892c98b2 | 348 | case MM_SHOW_QUOTA: |
349 | if (!*stringval(form, 0)) | |
350 | argv[0] = "*"; | |
351 | if (*stringval(form, 1)) { | |
352 | argv[1] = "USER"; | |
353 | argv[2] = stringval(form, 1); | |
354 | } else if (*stringval(form, 2)) { | |
355 | argv[1] = "GROUP"; | |
356 | argv[2] = stringval(form, 2); | |
357 | } else if (!*stringval(form, 0)) { | |
358 | display_error("Must specify something."); | |
359 | return; | |
360 | } else { | |
361 | qy = "get_quota_by_filesys"; | |
362 | argc = 1; | |
363 | } | |
364 | break; | |
365 | case MM_SHOW_MACH: | |
366 | case MM_ADD_MACH: | |
367 | case MM_DEL_MACH: | |
b2d21e59 | 368 | StoreHost(form, 0, &argv[0]); |
892c98b2 | 369 | break; |
370 | case MM_MOD_MACH: | |
371 | if (!strcmp(form->formname, "mod_machine")) { | |
372 | qy = "update_machine"; | |
373 | for (i = 0; i < M_MODTIME; i++) | |
374 | argv[i + 1] = StringValue(form, i); | |
375 | argv[0] = form->extrastuff; | |
376 | argc = M_MODTIME + 1; | |
377 | break; | |
378 | } | |
b2d21e59 | 379 | StoreHost(form, 0, &argv[0]); |
892c98b2 | 380 | form->extrastuff = (caddr_t) "mod_machine"; |
381 | retfunc = ModifyCallback; | |
382 | break; | |
b2d21e59 | 383 | case MM_MOD_CLUSTER: |
384 | if (!strcmp(form->formname, "mod_cluster")) { | |
385 | qy = "update_cluster"; | |
386 | for (i = 0; i < C_MODTIME; i++) | |
387 | argv[i + 1] = StringValue(form, i); | |
388 | argv[0] = form->extrastuff; | |
389 | argc = C_MODTIME + 1; | |
390 | break; | |
391 | } | |
392 | form->extrastuff = (caddr_t) "mod_cluster"; | |
393 | retfunc = ModifyCallback; | |
394 | break; | |
395 | case MM_SHOW_MCMAP: | |
396 | if (!*stringval(form, 0)) | |
397 | argv[0] = "*"; | |
398 | else | |
399 | StoreHost(form, 0, &argv[0]); | |
400 | if (!*stringval(form, 1)) | |
401 | argv[1] = "*"; | |
402 | AppendToLog("Cluster mappings:\n"); | |
403 | break; | |
404 | case MM_ADD_MCMAP: | |
405 | case MM_DEL_MCMAP: | |
406 | StoreHost(form, 0, &argv[0]); | |
407 | break; | |
408 | case MM_SHOW_CLDATA: | |
409 | if (!*stringval(form, 1)) | |
410 | argv[1] = "*"; | |
411 | break; | |
412 | case MM_ADD_PCAP: | |
413 | StoreHost(form, PCAP_SPOOL_HOST, &argv[PCAP_SPOOL_HOST]); | |
414 | StoreHost(form, PCAP_QSERVER, &argv[PCAP_QSERVER]); | |
415 | break; | |
416 | case MM_SAVE_LOG: | |
417 | display_error("Not yet implemented."); | |
418 | return; | |
419 | case MM_PERSISTANT_FORMS: | |
420 | persistant_forms = boolval(form, 0); | |
421 | if (!persistant_forms) | |
422 | XtUnmanageChild(form->formpointer); | |
423 | return; | |
83d3aa0c | 424 | } |
425 | ||
426 | if (argc == -1) { | |
427 | display_error("Unknown function in form callback.\n"); | |
428 | return; | |
429 | } | |
430 | i = MoiraQuery(qy, argc, argv, retfunc, (char *)form); | |
431 | if (i) { | |
b2d21e59 | 432 | com_err(program_name, i, " executing database query"); |
83d3aa0c | 433 | return; |
434 | } | |
435 | ||
436 | f = NULL; | |
437 | if (form->extrastuff && (f = GetForm((char *)(form->extrastuff)))) { | |
438 | XtUnmanageChild(form->formpointer); | |
439 | f->extrastuff = (caddr_t) strsave(stringval(form, 0)); | |
440 | f->menu = form->menu; | |
441 | } | |
442 | ||
443 | switch (form->menu->operation) { | |
444 | case MM_MOD_USER: | |
445 | if (f) { | |
446 | qy = strsave(stringval(f, U_MITID)); | |
447 | sprintf(stringval(f, U_MITID), "\"%s\"", qy); | |
448 | free(qy); | |
449 | f->inputlines[U_STATE]->keywords = user_states; | |
450 | StoreField(f, U_STATE, user_states[atoi(stringval(f, U_STATE))]); | |
451 | GetKeywords(f, U_CLASS, "class"); | |
452 | } else | |
453 | AppendToLog("Done.\n"); | |
454 | break; | |
455 | case MM_MOD_FINGER: | |
b2d21e59 | 456 | case MM_MOD_CLUSTER: |
83d3aa0c | 457 | if (!f) |
458 | AppendToLog("Done.\n"); | |
459 | break; | |
460 | case MM_MOD_LIST: | |
461 | if (f) | |
462 | GetKeywords(f, L_ACE_TYPE, "ace_type"); | |
463 | else | |
464 | AppendToLog("Done.\n"); | |
465 | break; | |
466 | case MM_MOD_FILSYS: | |
467 | if (f) { | |
468 | GetKeywords(f, FS_TYPE, "filesys"); | |
469 | sprintf(buf, "fs_access_%s", stringval(f, FS_TYPE)); | |
470 | GetKeywords(f, FS_ACCESS, buf); | |
471 | GetKeywords(f, FS_L_TYPE, "lockertype"); | |
472 | if (!strcmp(stringval(f, FS_MACHINE), "[NONE]")) | |
473 | StoreField(f, FS_MACHINE, "\\[NONE\\]"); | |
474 | } else | |
475 | AppendToLog("Done.\n"); | |
476 | break; | |
892c98b2 | 477 | case MM_MOD_MACH: |
478 | if (f) | |
479 | GetKeywords(f, 1, "mac_type"); | |
480 | else | |
481 | AppendToLog("Done.\n"); | |
482 | break; | |
b2d21e59 | 483 | case MM_MOD_NFS: |
484 | if (f) | |
485 | f->inputlines[3]->keywords = nfs_states; | |
486 | else | |
487 | AppendToLog("Done.\n"); | |
488 | break; | |
83d3aa0c | 489 | case MM_ADD_HOST: |
490 | case MM_DEL_HOST: | |
491 | case MM_CLEAR_HOST: | |
492 | case MM_RESET_HOST: | |
493 | case MM_ADD_SERVICE: | |
494 | case MM_DEL_SERVICE: | |
495 | case MM_CLEAR_SERVICE: | |
496 | case MM_RESET_SERVICE: | |
497 | case MM_ENABLE_DCM: | |
498 | case MM_TRIGGER_DCM: | |
499 | case MM_ADD_ZEPHYR: | |
500 | case MM_DEL_ZEPHYR: | |
501 | case MM_ADD_PCAP: | |
502 | case MM_DEL_PCAP: | |
503 | case MM_ADD_CLDATA: | |
504 | case MM_DEL_CLDATA: | |
505 | case MM_ADD_MCMAP: | |
506 | case MM_DEL_MCMAP: | |
507 | case MM_ADD_CLUSTER: | |
508 | case MM_DEL_CLUSTER: | |
509 | case MM_ADD_MACH: | |
510 | case MM_DEL_MACH: | |
511 | case MM_ADD_MEMBER: | |
512 | case MM_DEL_MEMBER: | |
513 | case MM_DEL_ALL_MEMBER: | |
514 | case MM_ADD_LIST: | |
515 | case MM_DEL_LIST: | |
516 | case MM_ADD_QUOTA: | |
517 | case MM_DEL_QUOTA: | |
518 | case MM_SET_DQUOTA: | |
519 | case MM_ADD_NFS: | |
520 | case MM_DEL_NFS: | |
521 | case MM_ADD_FS_ALIAS: | |
522 | case MM_DEL_FS_ALIAS: | |
523 | case MM_ADD_FSGROUP: | |
524 | case MM_MOV_FSGROUP: | |
525 | case MM_DEL_FSGROUP: | |
526 | case MM_ADD_FILSYS: | |
527 | case MM_DEL_FILSYS: | |
528 | case MM_ADD_KRBMAP: | |
529 | case MM_DEL_KRBMAP: | |
530 | case MM_SET_POBOX: | |
531 | case MM_DEL_POBOX: | |
532 | case MM_ADD_USER: | |
533 | case MM_REGISTER: | |
534 | case MM_DEACTIVATE: | |
535 | case MM_EXPUNGE: | |
892c98b2 | 536 | case MM_RESET_POBOX: |
83d3aa0c | 537 | AppendToLog("Done.\n"); |
538 | } | |
539 | ||
b2d21e59 | 540 | if (!persistant_forms) |
541 | XtUnmanageChild(form->formpointer); | |
542 | ||
83d3aa0c | 543 | if (f) |
544 | DisplayForm(f); | |
892c98b2 | 545 | else |
546 | AppendToLog("\n"); | |
83d3aa0c | 547 | } |
548 | ||
549 | ||
550 | MoiraMenuComplete(m) | |
551 | MenuItem *m; | |
552 | { | |
553 | char *qy, *argv[32]; | |
554 | int (*retfunc)(), argc, i; | |
555 | EntryForm dummy; | |
556 | ||
557 | retfunc = DisplayCallback; | |
558 | argc = -1; | |
559 | dummy.menu = m; | |
892c98b2 | 560 | qy = m->query; |
561 | argc = m->argc; | |
83d3aa0c | 562 | |
563 | switch (m->operation) { | |
564 | case MM_SHOW_MAILLIST: | |
83d3aa0c | 565 | argv[0] = argv[1] = argv[3] = "TRUE"; |
566 | argv[2] = "FALSE"; | |
567 | argv[4] = "DONTCARE"; | |
b2d21e59 | 568 | AppendToLog("Public Mailinglists:\n"); |
83d3aa0c | 569 | break; |
570 | case MM_SHOW_DQUOTA: | |
83d3aa0c | 571 | argv[0] = "def_quota"; |
83d3aa0c | 572 | break; |
573 | case MM_SHOW_DCM: | |
b2d21e59 | 574 | AppendToLog("Services and Hosts with failed updates:\n"); |
83d3aa0c | 575 | argv[0] = argv[2] = "DONTCARE"; |
576 | argv[1] = "TRUE"; | |
577 | i = MoiraQuery("qualified_get_server", 3, argv, retfunc, NULL); | |
578 | if (i && i != MR_NO_MATCH) | |
b2d21e59 | 579 | com_err(program_name, i, " executing database query"); |
83d3aa0c | 580 | argv[0] = "*"; |
581 | argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE"; | |
582 | argv[4] = "TRUE"; | |
b2d21e59 | 583 | i = MoiraQuery("qualified_get_server_host", 6, argv, retfunc, NULL); |
584 | if (i && i != MR_NO_MATCH) | |
585 | com_err(program_name, i, " executing database query"); | |
586 | AppendToLog("\n"); | |
587 | return; | |
588 | case MM_HELP_MOIRA: | |
589 | case MM_HELP_WILDCARDS: | |
590 | case MM_HELP_AUTHORS: | |
591 | case MM_HELP_BUGS: | |
592 | help(m->query); | |
593 | return; | |
594 | case MM_QUIT: | |
595 | mr_disconnect(); | |
596 | exit(0); | |
83d3aa0c | 597 | } |
598 | if (argc == -1) { | |
599 | display_error("Unknown function in menu callback.\n"); | |
600 | return; | |
601 | } | |
602 | i = MoiraQuery(qy, argc, argv, retfunc, (char *)&dummy); | |
603 | if (i) | |
b2d21e59 | 604 | com_err(program_name, i, " executing database query"); |
605 | AppendToLog("\n"); | |
83d3aa0c | 606 | } |
607 | ||
608 | ||
609 | /******* temporary ********/ | |
892c98b2 | 610 | display_error(msg) char *msg; { PopupErrorMessage(msg, "Sorry, no help is available"); } |