]> andersk Git - moira.git/blame_incremental - clients/moira/dcmmaint.c
Change strings.h to string.h (we weren't using any BSD-isms anyway!)
[moira.git] / clients / moira / dcmmaint.c
... / ...
CommitLineData
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
20extern char *whoami;
21static char buf[BUFSIZ];
22char *unparse_interval(), *canonicalize_hostname();
23char *atot();
24
25#define DCM_ENABLE_FLAG 0
26
27genable(argc, argv, info)
28int argc;
29char **argv;
30char **info;
31{
32 info[1] = strsave(argv[0]);
33 return(MR_CONT);
34}
35
36EnableDcm(argc, argv)
37int argc;
38char **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
56int shserv(argc, argv)
57int argc;
58char **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
89showserv(argc, argv)
90int argc;
91char **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
103char *unparse_interval(i)
104int i;
105{
106 static char uibuf[10];
107
108 sprintf(uibuf, "%02d:%02d:00", i / 60, i % 60);
109 return(uibuf);
110}
111
112addserv(argc, argv)
113int argc;
114char **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
130char **askserv(info)
131char **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
153gserv(argc, argv, cargv)
154int argc;
155char **argv;
156char **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
170initserv(name, argv)
171char *name;
172char **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
190updateserv(argc, argv)
191int argc;
192char **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
213int shhost(argc, argv)
214int argc;
215char **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
244showhost(argc, argv)
245int argc;
246char **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
259resetsrverr(argc, argv)
260int argc;
261char **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
270resetsrvc(argc, argv)
271int argc;
272char **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
293resethosterr(argc, argv)
294int argc;
295char **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
307resethost(argc, argv)
308int argc;
309char **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
334sethostor(argc, argv)
335int argc;
336char **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
348ghost(argc, argv, cargv)
349int argc;
350char **argv;
351char **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
364inithost(info)
365char **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
376char **askhost(info)
377char **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
391updatehost(argc, argv)
392int argc;
393char **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
417addhost(argc, argv)
418int argc;
419char **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
439delserv(argc, argv)
440int argc;
441char **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
451delhost(argc, argv)
452int argc;
453char **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
465pserv(argc, argv, count)
466int argc;
467char **argv;
468int *count;
469{
470 sprintf(buf, "Service %s", argv[0]);
471 Put_message(buf);
472 (*count)++;
473 return(MR_CONT);
474}
475
476phost(argc, argv, count)
477int argc;
478char **argv;
479int *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
488InProgress()
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
515DcmFailed()
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
543Dcm()
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.137399 seconds and 5 git commands to generate.