]> andersk Git - moira.git/blame - clients/moira/dcmmaint.c
cant_fix takes an argument
[moira.git] / clients / moira / dcmmaint.c
CommitLineData
cc5b487a 1/* $Header$
44d40e72 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>.
cc5b487a 6 */
7
8#include <stdio.h>
24419c79 9#include <string.h>
cc5b487a 10#include <ctype.h>
8defc06b 11#include <moira.h>
12#include <moira_site.h>
cc5b487a 13#include <menu.h>
14
15#include "mit-copyright.h"
16#include "defs.h"
17#include "f_defs.h"
18#include "globals.h"
cc5b487a 19
3ed06d63 20extern char *whoami;
cc5b487a 21static char buf[BUFSIZ];
44d40e72 22char *unparse_interval(), *canonicalize_hostname();
cc5b487a 23char *atot();
24
25#define DCM_ENABLE_FLAG 0
26
44d40e72 27genable(argc, argv, info)
cc5b487a 28int argc;
29char **argv;
44d40e72 30char **info;
cc5b487a 31{
44d40e72 32 info[1] = strsave(argv[0]);
8defc06b 33 return(MR_CONT);
cc5b487a 34}
35
3ed06d63 36EnableDcm(argc, argv)
cc5b487a 37int argc;
38char **argv;
39{
44d40e72 40 int status;
41 char *info[3];
cc5b487a 42
44d40e72 43 info[0] = "dcm_enable";
8defc06b 44 if (status = do_mr_query("get_value", 1, info, genable, info))
cc5b487a 45 com_err(whoami, status, " while getting value of dcm_enable");
aca0c2c2 46 if (GetValueFromUser("Enable value", &info[1]) == SUB_ERROR)
47 return(DM_NORMAL);
8defc06b 48 if (status = do_mr_query("update_value", 2, info, Scream, NULL))
cc5b487a 49 com_err(whoami, status, " while updating value of dcm_enable");
44d40e72 50 FreeAndClear(&info[0], FALSE);
51 FreeAndClear(&info[1], TRUE);
cc5b487a 52 return(DM_NORMAL);
53}
54
55
56int shserv(argc, argv)
57int argc;
58char **argv;
59{
60 char tmp[64], *dfgen;
61
44d40e72 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]);
cc5b487a 67 Put_message(buf);
68 sprintf(buf, " Interval %s, Target:%s, Script:%s",
44d40e72 69 unparse_interval(atoi(argv[SVC_INTERVAL])), argv[SVC_TARGET],
70 argv[SVC_SCRIPT]);
cc5b487a 71 Put_message(buf);
44d40e72 72 if (atoi(argv[SVC_HARDERROR]))
73 sprintf(tmp, "Error %d: %s", atoi(argv[SVC_HARDERROR]), argv[SVC_ERRMSG]);
cc5b487a 74 else
75 strcpy(tmp, "No error");
44d40e72 76 dfgen = strsave(atot(argv[SVC_DFGEN]));
77 sprintf(buf, " Generated %s; Last Checked %s", dfgen,
78 atot(argv[SVC_DFCHECK]));
cc5b487a 79 free(dfgen);
80 Put_message(buf);
44d40e72 81 sprintf(buf, " %s/%s/%s", atoi(argv[SVC_ENABLE]) ? "Enabled" : "Disabled",
82 atoi(argv[SVC_INPROGRESS]) ? "InProgress" : "Idle", tmp);
cc5b487a 83 Put_message(buf);
84 Put_message("");
8defc06b 85 return(MR_CONT);
cc5b487a 86}
87
88
89showserv(argc, argv)
90int argc;
91char **argv;
92{
93 char *qargv[1];
94 int status;
95
96 qargv[0] = argv[1];
8defc06b 97 if (status = do_mr_query("get_server_info", 1, qargv, shserv, NULL))
cc5b487a 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{
cc5b487a 116 int status;
2e140f82 117 char *info[SC_END+1], **askserv();
cc5b487a 118
44d40e72 119 initserv(argv[1], info);
aca0c2c2 120 if (askserv(info) == NULL) {
121 Put_message("Aborted.");
122 return(DM_NORMAL);
123 }
314752ee 124 if (status = do_mr_query("add_server_info", SC_END, info, Scream, NULL))
cc5b487a 125 com_err(whoami, status, " while updating server info");
44d40e72 126 FreeInfo(info);
cc5b487a 127 return(DM_NORMAL);
128}
129
aca0c2c2 130char **askserv(info)
44d40e72 131char **info;
132{
aca0c2c2 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);
44d40e72 146 if (strcasecmp("none", info[SC_ACE_TYPE]))
aca0c2c2 147 if (GetValueFromUser("Ace name", &info[SC_ACE_NAME]) == SUB_ERROR)
148 return(NULL);
149 return(info);
44d40e72 150}
151
cc5b487a 152
153gserv(argc, argv, cargv)
154int argc;
155char **argv;
156char **cargv;
157{
44d40e72 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;
8defc06b 167 return(MR_CONT);
cc5b487a 168}
169
44d40e72 170initserv(name, argv)
171char *name;
172char **argv;
cc5b487a 173{
44d40e72 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);
fa714f26 180 sprintf(tmp, "%s/%s.sh", BIN_DIR, name);
44d40e72 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;
cc5b487a 187}
188
189
190updateserv(argc, argv)
191int argc;
192char **argv;
193{
2e140f82 194 char *qargv[SC_END+1];
cc5b487a 195 int status;
196
197 qargv[0] = (char *)argv[1];
8defc06b 198 if (status = do_mr_query("get_server_info", 1,
44d40e72 199 qargv, gserv, (char *)qargv)) {
cc5b487a 200 com_err(whoami, status, " while getting server info");
201 return(DM_NORMAL);
202 }
aca0c2c2 203 if (askserv(qargv) == NULL) {
204 Put_message("Aborted.");
205 return(DM_NORMAL);
206 }
314752ee 207 if (status = do_mr_query("update_server_info", SC_END, qargv, Scream, NULL))
cc5b487a 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
44d40e72 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]);
cc5b487a 222 Put_message(buf);
44d40e72 223 if (atoi(argv[SH_HOSTERROR]))
224 sprintf(tmp, "Error %d: %s", atoi(argv[SH_HOSTERROR]), argv[SH_ERRMSG]);
cc5b487a 225 else
226 strcpy(tmp, "No error");
227 sprintf(buf, " %s/%s/%s/%s/%s",
44d40e72 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);
cc5b487a 232 Put_message(buf);
233 Put_message(" Last Try Last Success Value1 Value2 Value3");
44d40e72 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]);
cc5b487a 237 free(ltt);
238 Put_message(buf);
239 Put_message("");
8defc06b 240 return(MR_CONT);
cc5b487a 241}
242
243
244showhost(argc, argv)
245int argc;
246char **argv;
247{
44d40e72 248 char *qargv[2];
cc5b487a 249 int status;
250
44d40e72 251 qargv[SHI_SERVICE] = argv[1];
0bd1776b 252 qargv[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
8defc06b 253 if (status = do_mr_query("get_server_host_info", 2, qargv, shhost, NULL))
cc5b487a 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;
8defc06b 264 if (status = do_mr_query("reset_server_error", 1, &argv[1], Scream, NULL))
cc5b487a 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;
314752ee 275 char *qargv[6], buf[BUFSIZ];
cc5b487a 276
cf09387e 277 sprintf(buf, "Reset state for service %s (Y/N)", argv[1]);
278 if (!Confirm(buf))
279 return(DM_NORMAL);
cc5b487a 280 qargv[0] = argv[1];
281 qargv[1] = "0";
282 qargv[2] = "0";
283 qargv[3] = "0";
284 qargv[4] = "0";
285 qargv[5] = "";
8defc06b 286 if (status = do_mr_query("set_server_internal_flags", 6, qargv,
44d40e72 287 Scream, NULL))
cc5b487a 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
0bd1776b 299 argv[2] = canonicalize_hostname(strsave(argv[2]));
8defc06b 300 if (status = do_mr_query("reset_server_host_error", 2, &argv[1],
44d40e72 301 Scream, NULL))
cc5b487a 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;
cf09387e 312 char *qargv[9], buf[BUFSIZ];
cc5b487a 313
cf09387e 314 sprintf(buf, "Reset state for service %s on host %s (Y/N)", argv[1],
0bd1776b 315 canonicalize_hostname(strsave(argv[2])));
cf09387e 316 if (!Confirm(buf))
317 return(DM_NORMAL);
cc5b487a 318 qargv[0] = argv[1];
0bd1776b 319 qargv[1] = canonicalize_hostname(strsave(argv[2]));
cc5b487a 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";
8defc06b 327 if (status = do_mr_query("set_server_host_internal", 9, qargv,
44d40e72 328 Scream, NULL))
cc5b487a 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
0bd1776b 340 argv[2] = canonicalize_hostname(strsave(argv[2]));
8defc06b 341 if (status = do_mr_query("set_server_host_override", 2, &argv[1],
44d40e72 342 Scream, NULL))
cc5b487a 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{
44d40e72 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;
8defc06b 360 return(MR_CONT);
cc5b487a 361}
362
363
44d40e72 364inithost(info)
365char **info;
366{
91a7b8e9 367 info[SHI_MACHINE] = canonicalize_hostname(strsave(info[SH_MACHINE]));
44d40e72 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
aca0c2c2 376char **askhost(info)
44d40e72 377char **info;
378{
aca0c2c2 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);
44d40e72 388}
389
390
cc5b487a 391updatehost(argc, argv)
392int argc;
393char **argv;
394{
2e140f82 395 char *info[SHI_END+1];
cc5b487a 396 int status;
397
44d40e72 398 info[SHI_SERVICE] = strsave(argv[1]);
0bd1776b 399 info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
8defc06b 400 if (status = do_mr_query("get_server_host_info", 2, info, ghost,
44d40e72 401 (char *)info)) {
cc5b487a 402 com_err(whoami, status, " while getting server/host info");
403 return(DM_NORMAL);
404 }
aca0c2c2 405 if (askhost(info) == NULL) {
406 Put_message("Aborted.");
407 return(DM_NORMAL);
408 }
8defc06b 409 if (status = do_mr_query("update_server_host_info", SHI_END, info,
44d40e72 410 Scream, NULL))
cc5b487a 411 com_err(whoami, status, " while updating server/host info");
44d40e72 412 FreeInfo(info);
cc5b487a 413 return(DM_NORMAL);
414}
415
416
417addhost(argc, argv)
418int argc;
419char **argv;
420{
2e140f82 421 char *info[SHI_END+1];
cc5b487a 422 int status;
423
44d40e72 424 info[SHI_SERVICE] = strsave(argv[1]);
0bd1776b 425 info[SHI_MACHINE] = canonicalize_hostname(strsave(argv[2]));
44d40e72 426 inithost(info);
aca0c2c2 427 if (askhost(info) == NULL) {
428 Put_message("Aborted.");
429 return(DM_NORMAL);
430 }
314752ee 431 if (status = do_mr_query("add_server_host_info", SHI_END, info,
432 Scream, NULL))
cc5b487a 433 com_err(whoami, status, " while adding server/host info");
44d40e72 434 FreeInfo(info);
cc5b487a 435 return(DM_NORMAL);
436}
437
438
439delserv(argc, argv)
440int argc;
441char **argv;
442{
443 int status;
444
8defc06b 445 if (status = do_mr_query("delete_server_info", 1, &argv[1], Scream, NULL))
cc5b487a 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
0bd1776b 457 argv[2] = canonicalize_hostname(strsave(argv[2]));
8defc06b 458 if (status = do_mr_query("delete_server_host_info", 2, &argv[1],
44d40e72 459 Scream, NULL))
cc5b487a 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)++;
8defc06b 473 return(MR_CONT);
cc5b487a 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)++;
8defc06b 484 return(MR_CONT);
cc5b487a 485}
486
487
3ed06d63 488InProgress()
cc5b487a 489{
490 char *argv[6];
491 int status, count = 0;
492
493 argv[0] = argv[2] = "DONTCARE";
494 argv[1] = "TRUE";
8defc06b 495 if ((status = do_mr_query("qualified_get_server", 3, argv, pserv,
44d40e72 496 (char *)&count)) &&
8defc06b 497 status != MR_NO_MATCH)
cc5b487a 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";
8defc06b 502 if ((status = do_mr_query("qualified_get_server_host",6,argv,phost,
44d40e72 503 (char *)&count)) &&
8defc06b 504 status != MR_NO_MATCH)
cc5b487a 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
3ed06d63 515DcmFailed()
cc5b487a 516{
517 char *argv[6];
518 int status, count = 0;
519
520 argv[0] = argv[1] = "DONTCARE";
521 argv[2] = "TRUE";
8defc06b 522 if ((status = do_mr_query("qualified_get_server", 3, argv, pserv,
44d40e72 523 (char *)&count)) &&
8defc06b 524 status != MR_NO_MATCH)
cc5b487a 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";
8defc06b 529 if ((status = do_mr_query("qualified_get_server_host",6,argv,phost,
44d40e72 530 (char *)&count)) &&
8defc06b 531 status != MR_NO_MATCH)
cc5b487a 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
3ed06d63 543Dcm()
cc5b487a 544{
545 int status;
2e140f82 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");
cc5b487a 549 return(DM_NORMAL);
550}
This page took 0.157763 seconds and 5 git commands to generate.