]> andersk Git - moira.git/blob - clients/moira/dcmmaint.c
Diane Delgado's changes for a fixed table-locking order
[moira.git] / clients / moira / dcmmaint.c
1 /* $Header$
2  *
3  * Copyright 1987, 1988 by the Massachusetts Institute of Technology.
4  * For copying and distribution information, please see the file
5  * <mit-copyright.h>.
6  */
7
8 #include <stdio.h>
9 #include <string.h>
10 #include <ctype.h>
11 #include <moira.h>
12 #include <moira_site.h>
13 #include <menu.h>
14
15 #include "mit-copyright.h"
16 #include "defs.h"
17 #include "f_defs.h"
18 #include "globals.h"
19
20 extern char *whoami;
21 static char buf[BUFSIZ];
22 char *unparse_interval(), *canonicalize_hostname();
23 char *atot();
24
25 #define DCM_ENABLE_FLAG 0
26
27 genable(argc, argv, info)
28 int argc;
29 char **argv;
30 char **info;
31 {
32     info[1] = strsave(argv[0]);
33     return(MR_CONT);
34 }
35
36 EnableDcm(argc, argv)
37 int argc;
38 char **argv;
39 {
40     int status;
41     char *info[3];
42
43     info[0] = "dcm_enable";
44     if (status = do_mr_query("get_value", 1, info, genable, info))
45       com_err(whoami, status, " while getting value of dcm_enable");
46     if (GetValueFromUser("Enable value", &info[1]) == SUB_ERROR)
47       return(DM_NORMAL);
48     if (status = do_mr_query("update_value", 2, info, Scream, NULL))
49       com_err(whoami, status, " while updating value of dcm_enable");
50     FreeAndClear(&info[0], FALSE);
51     FreeAndClear(&info[1], TRUE);
52     return(DM_NORMAL);
53 }
54
55
56 int shserv(argc, argv)
57 int argc;
58 char **argv;
59 {
60     char tmp[64], *dfgen;
61
62     Put_message("Name       Type     Owner       Modified");
63     sprintf(tmp, "%s:%s", argv[SVC_ACE_TYPE], argv[SVC_ACE_NAME]);
64     sprintf(buf, "%-10s %-8s %-11s by %s on %s with %s", argv[SVC_SERVICE],
65             argv[SVC_TYPE], tmp, argv[SVC_MODBY], argv[SVC_MODTIME],
66             argv[SVC_MODWITH]);
67     Put_message(buf);
68     sprintf(buf, "  Interval %s, Target:%s, Script:%s",
69             unparse_interval(atoi(argv[SVC_INTERVAL])), argv[SVC_TARGET],
70             argv[SVC_SCRIPT]);
71     Put_message(buf);
72     if (atoi(argv[SVC_HARDERROR]))
73       sprintf(tmp, "Error %d: %s", atoi(argv[SVC_HARDERROR]), argv[SVC_ERRMSG]);
74     else
75       strcpy(tmp, "No error");
76     dfgen = strsave(atot(argv[SVC_DFGEN]));
77     sprintf(buf, "  Generated %s; Last Checked %s", dfgen,
78             atot(argv[SVC_DFCHECK]));
79     free(dfgen);
80     Put_message(buf);
81     sprintf(buf, "  %s/%s/%s", atoi(argv[SVC_ENABLE]) ? "Enabled" : "Disabled",
82             atoi(argv[SVC_INPROGRESS]) ? "InProgress" : "Idle", tmp);
83     Put_message(buf);
84     Put_message("");
85     return(MR_CONT);
86 }
87
88
89 showserv(argc, argv)
90 int argc;
91 char **argv;
92 {
93     char *qargv[1];
94     int status; 
95  
96     qargv[0] = argv[1];
97     if (status = do_mr_query("get_server_info", 1, qargv, shserv, NULL))
98       com_err(whoami, status, " while getting server info");
99     return(DM_NORMAL);
100 }
101
102
103 char *unparse_interval(i)
104 int i;
105 {
106     static char uibuf[10];
107
108     sprintf(uibuf, "%02d:%02d:00", i / 60, i % 60);
109     return(uibuf);
110 }
111
112 addserv(argc, argv)
113 int argc;
114 char **argv;
115 {
116     int status;
117     char *info[SC_END+1], **askserv();
118
119     initserv(argv[1], info);
120     if (askserv(info) == NULL) {
121         Put_message("Aborted.");
122         return(DM_NORMAL);
123     }
124     if (status = do_mr_query("add_server_info", SC_END, info, Scream, NULL))
125       com_err(whoami, status, " while updating server info");
126     FreeInfo(info);
127     return(DM_NORMAL);
128 }
129
130 char **askserv(info)
131 char **info;
132 {
133     if (GetValueFromUser("Interval", &info[SC_INTERVAL]) == SUB_ERROR)
134       return(NULL);
135     if (GetValueFromUser("Target", &info[SC_TARGET]) == SUB_ERROR)
136       return(NULL);
137     if (GetValueFromUser("Script", &info[SC_SCRIPT]) == SUB_ERROR)
138       return(NULL);
139     if (GetTypeFromUser("Service type", "service", &info[SC_TYPE]) == SUB_ERROR)
140       return(NULL);
141     if (GetValueFromUser("Enable", &info[SC_ENABLE]) == SUB_ERROR)
142       return(NULL);
143     if (GetTypeFromUser("ACE type", "ace_type", &info[SC_ACE_TYPE]) ==
144         SUB_ERROR)
145       return(NULL);
146     if (strcasecmp("none", info[SC_ACE_TYPE]))
147       if (GetValueFromUser("Ace name", &info[SC_ACE_NAME]) == SUB_ERROR)
148         return(NULL);
149     return(info);
150 }
151
152
153 gserv(argc, argv, cargv)
154 int argc;
155 char **argv;
156 char **cargv;
157 {
158     cargv[SC_SERVICE] = strsave(argv[SVC_SERVICE]);
159     cargv[SC_INTERVAL] = strsave(argv[SVC_INTERVAL]);
160     cargv[SC_TARGET] = strsave(argv[SVC_TARGET]);
161     cargv[SC_SCRIPT] = strsave(argv[SVC_SCRIPT]);
162     cargv[SC_TYPE] = strsave(argv[SVC_TYPE]);
163     cargv[SC_ENABLE] = strsave(argv[SVC_ENABLE]);
164     cargv[SC_ACE_TYPE] = strsave(argv[SVC_ACE_TYPE]);
165     cargv[SC_ACE_NAME] = strsave(argv[SVC_ACE_NAME]);
166     cargv[SC_END] = NULL;
167     return(MR_CONT);
168 }
169
170 initserv(name, argv)
171 char *name;
172 char **argv;
173 {
174     char tmp[BUFSIZ];
175
176     argv[SC_SERVICE] = strsave(name);
177     argv[SC_INTERVAL] = strsave("1440");
178     sprintf(tmp, "/tmp/%s.out", name);
179     argv[SC_TARGET] = strsave(tmp);
180     sprintf(tmp, "%s/%s.sh", BIN_DIR, name);
181     argv[SC_SCRIPT] = strsave(tmp);
182     argv[SC_TYPE] = strsave("UNIQUE");
183     argv[SC_ENABLE] = strsave("1");
184     argv[SC_ACE_TYPE] = strsave("LIST");
185     argv[SC_ACE_NAME] = strsave("dbadmin");
186     argv[SC_END] = NULL;
187 }
188
189
190 updateserv(argc, argv)
191 int argc;
192 char **argv;
193 {
194     char *qargv[SC_END+1];
195     int status;
196
197     qargv[0] = (char *)argv[1];
198     if (status = do_mr_query("get_server_info", 1,
199                               qargv, gserv, (char *)qargv)) {
200         com_err(whoami, status, " while getting server info");
201         return(DM_NORMAL);
202     }
203     if (askserv(qargv) == NULL) {
204         Put_message("Aborted.");
205         return(DM_NORMAL);
206     }
207     if (status = do_mr_query("update_server_info", SC_END, qargv, Scream, NULL))
208       com_err(whoami, status, " while updating server info");
209     return(DM_NORMAL);
210 }
211
212
213 int shhost(argc, argv)
214 int argc;
215 char **argv;
216 {
217     char tmp[64], *ltt;
218
219     sprintf(buf, "%s:%s  mod by %s on %s with %s", argv[SH_MACHINE],
220             argv[SH_SERVICE], argv[SH_MODBY], argv[SH_MODTIME],
221             argv[SH_MODWITH]);
222     Put_message(buf);
223     if (atoi(argv[SH_HOSTERROR]))
224       sprintf(tmp, "Error %d: %s", atoi(argv[SH_HOSTERROR]), argv[SH_ERRMSG]);
225     else
226       strcpy(tmp, "No error");
227     sprintf(buf, "  %s/%s/%s/%s/%s",
228             atoi(argv[SH_ENABLE]) ? "Enabled" : "Disabled",
229             atoi(argv[SH_SUCCESS]) ? "Success" : "Failure",
230             atoi(argv[SH_INPROGRESS]) ? "InProgress" : "Idle",
231             atoi(argv[SH_OVERRIDE]) ? "Override" : "Normal", tmp);
232     Put_message(buf);
233     Put_message("  Last Try             Last Success         Value1    Value2    Value3");
234     ltt = strsave(atot(argv[SH_LASTTRY]));
235     sprintf(buf, "  %-20s %-20s %-9d %-9d %s", ltt, atot(argv[SH_LASTSUCCESS]),
236             atoi(argv[SH_VALUE1]), atoi(argv[SH_VALUE2]), argv[SH_VALUE3]);
237     free(ltt);
238     Put_message(buf);
239     Put_message("");
240     return(MR_CONT);
241 }
242
243
244 showhost(argc, argv)
245 int argc;
246 char **argv;
247 {
248     char *qargv[2];
249     int status;
250
251     qargv[SHI_SERVICE] = argv[1];
252     qargv[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
253     if (status = do_mr_query("get_server_host_info", 2, qargv, shhost, NULL))
254       com_err(whoami, status, " getting server/host info");
255     return(DM_NORMAL);
256 }
257
258
259 resetsrverr(argc, argv)
260 int argc;
261 char  **argv;
262 {
263     int status;
264     if (status = do_mr_query("reset_server_error", 1, &argv[1], Scream, NULL))
265       com_err(whoami, status, " while resetting server error");
266     return(DM_NORMAL);
267 }
268
269
270 resetsrvc(argc, argv)
271 int argc;
272 char **argv;
273 {
274     int status;
275     char *qargv[6], buf[BUFSIZ];
276
277     sprintf(buf, "Reset state for service %s (Y/N)", argv[1]);
278     if (!Confirm(buf))
279       return(DM_NORMAL);
280     qargv[0] = argv[1];
281     qargv[1] = "0";
282     qargv[2] = "0";
283     qargv[3] = "0";
284     qargv[4] = "0";
285     qargv[5] = "";
286     if (status = do_mr_query("set_server_internal_flags", 6, qargv,
287                               Scream, NULL))
288       com_err(whoami, status, " while resetting server error");
289     return(DM_NORMAL);
290 }
291
292
293 resethosterr(argc, argv)
294 int argc;
295 char  **argv;
296 {
297     int status;
298
299     argv[2] = canonicalize_hostname(strsave(argv[2]));
300     if (status = do_mr_query("reset_server_host_error", 2, &argv[1],
301                               Scream, NULL))
302       com_err(whoami, status, " while resetting server/host error");
303     return(DM_NORMAL);
304 }
305
306
307 resethost(argc, argv)
308 int argc;
309 char **argv;
310 {
311     int status;
312     char *qargv[9], buf[BUFSIZ];
313
314     sprintf(buf, "Reset state for service %s on host %s (Y/N)", argv[1],
315             canonicalize_hostname(strsave(argv[2])));
316     if (!Confirm(buf))
317       return(DM_NORMAL);
318     qargv[0] = argv[1];
319     qargv[1] = canonicalize_hostname(strsave(argv[2]));
320     qargv[2] = "0";
321     qargv[3] = "0";
322     qargv[4] = "0";
323     qargv[5] = "0";
324     qargv[6] = "";
325     qargv[7] = "0";
326     qargv[8] = "0";
327     if (status = do_mr_query("set_server_host_internal", 9, qargv,
328                               Scream, NULL))
329       com_err(whoami, status, " while resetting server/host error");
330     return(DM_NORMAL);
331 }
332
333
334 sethostor(argc, argv)
335 int argc;
336 char  **argv;
337 {
338     int status;
339
340     argv[2] = canonicalize_hostname(strsave(argv[2]));
341     if (status = do_mr_query("set_server_host_override", 2, &argv[1],
342                               Scream, NULL))
343       com_err(whoami, status, " while setting server/host override");
344     return(DM_NORMAL);
345 }
346
347
348 ghost(argc, argv, cargv)
349 int argc;
350 char **argv;
351 char **cargv;
352 {
353     cargv[SHI_SERVICE] = strsave(argv[SH_SERVICE]);
354     cargv[SHI_MACHINE] = strsave(argv[SH_MACHINE]);
355     cargv[SHI_ENABLE] = strsave(argv[SH_ENABLE]);
356     cargv[SHI_VALUE1] = strsave(argv[SH_VALUE1]);
357     cargv[SHI_VALUE2] = strsave(argv[SH_VALUE2]);
358     cargv[SHI_VALUE3] = strsave(argv[SH_VALUE3]);
359     cargv[SHI_END] = NULL;
360     return(MR_CONT);
361 }
362
363
364 inithost(info)
365 char **info;
366 {
367     info[SHI_MACHINE] = canonicalize_hostname(strsave(info[SH_MACHINE]));
368     info[SHI_ENABLE] = strsave("1");
369     info[SHI_VALUE1] = strsave("0");
370     info[SHI_VALUE2] = strsave("0");
371     info[SHI_VALUE3] = strsave("");
372     info[SHI_END] = NULL;
373 }
374
375
376 char **askhost(info)
377 char **info;
378 {
379     if (GetValueFromUser("Enable", &info[SHI_ENABLE]) == SUB_ERROR)
380       return(NULL);
381     if (GetValueFromUser("Value 1", &info[SHI_VALUE1]) == SUB_ERROR)
382       return(NULL);
383     if (GetValueFromUser("Value 2", &info[SHI_VALUE2]) == SUB_ERROR)
384       return(NULL);
385     if (GetValueFromUser("Value 3", &info[SHI_VALUE3]) == SUB_ERROR)
386       return(NULL);
387     return(info);
388 }
389
390
391 updatehost(argc, argv)
392 int argc;
393 char **argv;
394 {
395     char *info[SHI_END+1];
396     int status;
397
398     info[SHI_SERVICE] = strsave(argv[1]);
399     info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
400     if (status = do_mr_query("get_server_host_info", 2, info, ghost, 
401                               (char *)info)) {
402         com_err(whoami, status, " while getting server/host info");
403         return(DM_NORMAL);
404     }
405     if (askhost(info) == NULL) {
406         Put_message("Aborted.");
407         return(DM_NORMAL);
408     }
409     if (status = do_mr_query("update_server_host_info", SHI_END, info,
410                               Scream, NULL))
411       com_err(whoami, status, " while updating server/host info");
412     FreeInfo(info);
413     return(DM_NORMAL);
414 }
415
416
417 addhost(argc, argv)
418 int argc;
419 char **argv;
420 {
421     char *info[SHI_END+1];
422     int status;
423
424     info[SHI_SERVICE] = strsave(argv[1]);
425     info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
426     inithost(info);
427     if (askhost(info) == NULL) {
428         Put_message("Aborted.");
429         return(DM_NORMAL);
430     }
431     if (status = do_mr_query("add_server_host_info", SHI_END, info,
432                              Scream, NULL))
433       com_err(whoami, status, " while adding server/host info");
434     FreeInfo(info);
435     return(DM_NORMAL);
436 }
437
438
439 delserv(argc, argv)
440 int argc;
441 char **argv;
442 {
443     int status;
444
445     if (status = do_mr_query("delete_server_info", 1, &argv[1], Scream, NULL))
446       com_err(whoami, status, " while deleting server info");
447     return(DM_NORMAL);
448 }
449
450
451 delhost(argc, argv)
452 int argc;
453 char **argv;
454 {
455     int status;
456
457     argv[2] = canonicalize_hostname(strsave(argv[2]));
458     if (status = do_mr_query("delete_server_host_info", 2, &argv[1],
459                               Scream, NULL))
460       com_err(whoami, status, " while deleting server/host info");
461     return(DM_NORMAL);
462 }
463
464
465 pserv(argc, argv, count)
466 int argc;
467 char **argv;
468 int *count;
469 {
470     sprintf(buf, "Service %s", argv[0]);
471     Put_message(buf);
472     (*count)++;
473     return(MR_CONT);
474 }
475
476 phost(argc, argv, count)
477 int argc;
478 char **argv;
479 int *count;
480 {
481     sprintf(buf, "Host %s:%s", argv[0], argv[1]);
482     Put_message(buf);
483     (*count)++;
484     return(MR_CONT);
485 }
486
487
488 InProgress()
489 {
490     char *argv[6];
491     int status, count = 0;
492
493     argv[0] = argv[2] = "DONTCARE";
494     argv[1] = "TRUE";
495     if ((status = do_mr_query("qualified_get_server", 3, argv, pserv, 
496                                (char *)&count)) &&
497         status != MR_NO_MATCH)
498       com_err(whoami, status, " while getting servers");
499     argv[0] = "*";
500     argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE";
501     argv[4] = "TRUE";
502     if ((status = do_mr_query("qualified_get_server_host",6,argv,phost,
503                                (char *)&count)) &&
504         status != MR_NO_MATCH)
505       com_err(whoami, status, " while getting server/hosts");
506     if (!count)
507       strcpy(buf, "Nothing is in progress at this time");
508     else
509       sprintf(buf, "%d update%s in progress at this time", count,
510               count == 1 ? "" : "s");
511     Put_message(buf);
512     return(DM_NORMAL);
513 }
514
515 DcmFailed()
516 {
517     char *argv[6];
518     int status, count = 0;
519
520     argv[0] = argv[1] = "DONTCARE";
521     argv[2] = "TRUE";
522     if ((status = do_mr_query("qualified_get_server", 3, argv, pserv, 
523                                (char *)&count)) &&
524         status != MR_NO_MATCH)
525       com_err(whoami, status, " while getting servers");
526     argv[0] = "*";
527     argv[1] = argv[2] = argv[3] = argv[4] = "DONTCARE";
528     argv[5] = "TRUE";
529     if ((status = do_mr_query("qualified_get_server_host",6,argv,phost,
530                                (char *)&count)) &&
531         status != MR_NO_MATCH)
532       com_err(whoami, status, " while getting server/hosts");
533     if (!count)
534       strcpy(buf, "Nothing has failed at this time");
535     else
536       sprintf(buf, "%d thing%s ha%s failed at this time", count,
537               count == 1 ? "" : "s", count == 1 ? "s" : "ve");
538     Put_message(buf);
539     return(DM_NORMAL);
540 }
541
542
543 Dcm()
544 {
545     int status;
546     if (Confirm("Are you sure you want to start a DCM now"))
547       if (status = mr_do_update())
548         com_err(whoami, status, " while triggering update");
549     return(DM_NORMAL);
550 }
This page took 0.076489 seconds and 5 git commands to generate.