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