X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/314752ee49ee8564cc2adf7378d58d30675a2f9e..17bbb3bc324b5546a23c357435817bf93d248025:/clients/moira/dcmmaint.c diff --git a/clients/moira/dcmmaint.c b/clients/moira/dcmmaint.c index a9851bc8..ff4f0571 100644 --- a/clients/moira/dcmmaint.c +++ b/clients/moira/dcmmaint.c @@ -1,535 +1,518 @@ -/* $Header$ +/* $Id$ * - * Copyright 1987, 1988 by the Massachusetts Institute of Technology. + * DCM-related functions for Moira client + * + * Copyright (C) 1987-1998 by the Massachusetts Institute of Technology. * For copying and distribution information, please see the file * . */ -#include -#include -#include +#include #include #include -#include - -#include "mit-copyright.h" #include "defs.h" #include "f_defs.h" #include "globals.h" +#include +#include +#include + +RCSID("$Header$"); + extern char *whoami; static char buf[BUFSIZ]; -char *unparse_interval(), *canonicalize_hostname(); -char *atot(); + +int genable(int argc, char **argv, void *info); +int shserv(int argc, char **argv, void *hint); +char *unparse_interval(int i); +char **askserv(char **info); +int gserv(int argc, char **argv, void *hint); +void initserv(char *name, char **argv); +int shhost(int argc, char **argv, void *hint); +int ghost(int argc, char **argv, void *hint); +void inithost(char **info); +char **askhost(char **info); +int pserv(int argc, char **argv, void *count); +int phost(int argc, char **argv, void *count); #define DCM_ENABLE_FLAG 0 -genable(argc, argv, info) -int argc; -char **argv; -char **info; +int genable(int argc, char **argv, void *info) { - info[1] = strsave(argv[0]); - return(MR_CONT); + ((char **)info)[1] = strdup(argv[0]); + return MR_CONT; } -EnableDcm(argc, argv) -int argc; -char **argv; +int EnableDcm(int argc, char **argv) { - int status; - char *info[3]; - - info[0] = "dcm_enable"; - if (status = do_mr_query("get_value", 1, info, genable, info)) - com_err(whoami, status, " while getting value of dcm_enable"); - GetValueFromUser("Enable value", &info[1]); - if (status = do_mr_query("update_value", 2, info, Scream, NULL)) - com_err(whoami, status, " while updating value of dcm_enable"); - FreeAndClear(&info[0], FALSE); - FreeAndClear(&info[1], TRUE); - return(DM_NORMAL); + int status; + char *info[3]; + + info[0] = "dcm_enable"; + if ((status = do_mr_query("get_value", 1, info, genable, info))) + com_err(whoami, status, " while getting value of dcm_enable"); + if (GetValueFromUser("Enable value", &info[1]) == SUB_ERROR) + return DM_NORMAL; + if ((status = do_mr_query("update_value", 2, info, NULL, NULL))) + com_err(whoami, status, " while updating value of dcm_enable"); + FreeAndClear(&info[0], FALSE); + FreeAndClear(&info[1], TRUE); + return DM_NORMAL; } -int shserv(argc, argv) -int argc; -char **argv; +int shserv(int argc, char **argv, void *hint) { - char tmp[64], *dfgen; - - Put_message("Name Type Owner Modified"); - sprintf(tmp, "%s:%s", argv[SVC_ACE_TYPE], argv[SVC_ACE_NAME]); - sprintf(buf, "%-10s %-8s %-11s by %s on %s with %s", argv[SVC_SERVICE], - argv[SVC_TYPE], tmp, argv[SVC_MODBY], argv[SVC_MODTIME], - argv[SVC_MODWITH]); - Put_message(buf); - sprintf(buf, " Interval %s, Target:%s, Script:%s", - unparse_interval(atoi(argv[SVC_INTERVAL])), argv[SVC_TARGET], - argv[SVC_SCRIPT]); - Put_message(buf); - if (atoi(argv[SVC_HARDERROR])) - sprintf(tmp, "Error %d: %s", atoi(argv[SVC_HARDERROR]), argv[SVC_ERRMSG]); - else - strcpy(tmp, "No error"); - dfgen = strsave(atot(argv[SVC_DFGEN])); - sprintf(buf, " Generated %s; Last Checked %s", dfgen, - atot(argv[SVC_DFCHECK])); - free(dfgen); - Put_message(buf); - sprintf(buf, " %s/%s/%s", atoi(argv[SVC_ENABLE]) ? "Enabled" : "Disabled", - atoi(argv[SVC_INPROGRESS]) ? "InProgress" : "Idle", tmp); - Put_message(buf); - Put_message(""); - return(MR_CONT); + char tmp[64], *dfgen; + + Put_message("Name Type Owner Modified"); + sprintf(tmp, "%s:%s", argv[SVC_ACE_TYPE], argv[SVC_ACE_NAME]); + sprintf(buf, "%-10s %-8s %-11s by %s on %s with %s", argv[SVC_SERVICE], + argv[SVC_TYPE], tmp, argv[SVC_MODBY], argv[SVC_MODTIME], + argv[SVC_MODWITH]); + Put_message(buf); + sprintf(buf, " Interval %s, Target:%s, Script:%s", + unparse_interval(atoi(argv[SVC_INTERVAL])), argv[SVC_TARGET], + argv[SVC_SCRIPT]); + Put_message(buf); + if (atoi(argv[SVC_HARDERROR])) + sprintf(tmp, "Error %d: %s", atoi(argv[SVC_HARDERROR]), argv[SVC_ERRMSG]); + else + strcpy(tmp, "No error"); + dfgen = strdup(atot(argv[SVC_DFGEN])); + sprintf(buf, " Generated %s; Last Checked %s", dfgen, + atot(argv[SVC_DFCHECK])); + free(dfgen); + Put_message(buf); + sprintf(buf, " %s/%s/%s", atoi(argv[SVC_ENABLE]) ? "Enabled" : "Disabled", + atoi(argv[SVC_INPROGRESS]) ? "InProgress" : "Idle", tmp); + Put_message(buf); + Put_message(""); + return MR_CONT; } -showserv(argc, argv) -int argc; -char **argv; +int showserv(int argc, char **argv) { - char *qargv[1]; - int status; - - qargv[0] = argv[1]; - if (status = do_mr_query("get_server_info", 1, qargv, shserv, NULL)) - com_err(whoami, status, " while getting server info"); - return(DM_NORMAL); + char *qargv[1]; + int status; + + qargv[0] = argv[1]; + if ((status = do_mr_query("get_server_info", 1, qargv, shserv, NULL))) + com_err(whoami, status, " while getting server info"); + return DM_NORMAL; } -char *unparse_interval(i) -int i; +char *unparse_interval(int i) { - static char uibuf[10]; + static char uibuf[10]; - sprintf(uibuf, "%02d:%02d:00", i / 60, i % 60); - return(uibuf); + sprintf(uibuf, "%02d:%02d:00", i / 60, i % 60); + return uibuf; } -addserv(argc, argv) -int argc; -char **argv; +int addserv(int argc, char **argv) { - int status; - char *info[SC_END]; - - initserv(argv[1], info); - askserv(info); - if (status = do_mr_query("add_server_info", SC_END, info, Scream, NULL)) - com_err(whoami, status, " while updating server info"); - FreeInfo(info); - return(DM_NORMAL); + int status; + char *info[SC_END + 1]; + + initserv(argv[1], info); + if (!askserv(info)) + { + Put_message("Aborted."); + return DM_NORMAL; + } + if ((status = do_mr_query("add_server_info", SC_END, info, NULL, NULL))) + com_err(whoami, status, " while updating server info"); + FreeInfo(info); + return DM_NORMAL; } -askserv(info) -char **info; +char **askserv(char **info) { - GetValueFromUser("Interval", &info[SC_INTERVAL]); - GetValueFromUser("Target", &info[SC_TARGET]); - GetValueFromUser("Script", &info[SC_SCRIPT]); - GetTypeFromUser("Service type", "service", &info[SC_TYPE]); - GetValueFromUser("Enable", &info[SC_ENABLE]); - GetTypeFromUser("ACE type", "ace_type", &info[SC_ACE_TYPE]); - if (strcasecmp("none", info[SC_ACE_TYPE])) - GetValueFromUser("Ace name", &info[SC_ACE_NAME]); + if (GetValueFromUser("Interval", &info[SC_INTERVAL]) == SUB_ERROR) + return NULL; + if (GetValueFromUser("Target", &info[SC_TARGET]) == SUB_ERROR) + return NULL; + if (GetValueFromUser("Script", &info[SC_SCRIPT]) == SUB_ERROR) + return NULL; + if (GetTypeFromUser("Service type", "service", &info[SC_TYPE]) == SUB_ERROR) + return NULL; + if (GetValueFromUser("Enable", &info[SC_ENABLE]) == SUB_ERROR) + return NULL; + if (GetTypeFromUser("ACE type", "ace_type", &info[SC_ACE_TYPE]) == SUB_ERROR) + return NULL; + if (strcasecmp("none", info[SC_ACE_TYPE])) + { + if (GetValueFromUser("Ace name", &info[SC_ACE_NAME]) == SUB_ERROR) + return NULL; + } + return info; } -gserv(argc, argv, cargv) -int argc; -char **argv; -char **cargv; +int gserv(int argc, char **argv, void *hint) { - cargv[SC_SERVICE] = strsave(argv[SVC_SERVICE]); - cargv[SC_INTERVAL] = strsave(argv[SVC_INTERVAL]); - cargv[SC_TARGET] = strsave(argv[SVC_TARGET]); - cargv[SC_SCRIPT] = strsave(argv[SVC_SCRIPT]); - cargv[SC_TYPE] = strsave(argv[SVC_TYPE]); - cargv[SC_ENABLE] = strsave(argv[SVC_ENABLE]); - cargv[SC_ACE_TYPE] = strsave(argv[SVC_ACE_TYPE]); - cargv[SC_ACE_NAME] = strsave(argv[SVC_ACE_NAME]); - cargv[SC_END] = NULL; - return(MR_CONT); + char **cargv = hint; + + cargv[SC_SERVICE] = strdup(argv[SVC_SERVICE]); + cargv[SC_INTERVAL] = strdup(argv[SVC_INTERVAL]); + cargv[SC_TARGET] = strdup(argv[SVC_TARGET]); + cargv[SC_SCRIPT] = strdup(argv[SVC_SCRIPT]); + cargv[SC_TYPE] = strdup(argv[SVC_TYPE]); + cargv[SC_ENABLE] = strdup(argv[SVC_ENABLE]); + cargv[SC_ACE_TYPE] = strdup(argv[SVC_ACE_TYPE]); + cargv[SC_ACE_NAME] = strdup(argv[SVC_ACE_NAME]); + cargv[SC_END] = NULL; + return MR_CONT; } -initserv(name, argv) -char *name; -char **argv; +void initserv(char *name, char **argv) { - char tmp[BUFSIZ]; - - argv[SC_SERVICE] = strsave(name); - argv[SC_INTERVAL] = strsave("1440"); - sprintf(tmp, "/tmp/%s.out", name); - argv[SC_TARGET] = strsave(tmp); - sprintf(tmp, "%s/%s.sh", BIN_DIR, name); - argv[SC_SCRIPT] = strsave(tmp); - argv[SC_TYPE] = strsave("UNIQUE"); - argv[SC_ENABLE] = strsave("1"); - argv[SC_ACE_TYPE] = strsave("LIST"); - argv[SC_ACE_NAME] = strsave("dbadmin"); - argv[SC_END] = NULL; + char tmp[BUFSIZ]; + + argv[SC_SERVICE] = strdup(name); + argv[SC_INTERVAL] = strdup("1440"); + sprintf(tmp, "/tmp/%s.out", name); + argv[SC_TARGET] = strdup(tmp); + sprintf(tmp, "%s/%s.sh", BIN_DIR, name); + argv[SC_SCRIPT] = strdup(tmp); + argv[SC_TYPE] = strdup("UNIQUE"); + argv[SC_ENABLE] = strdup("1"); + argv[SC_ACE_TYPE] = strdup("LIST"); + argv[SC_ACE_NAME] = strdup("dbadmin"); + argv[SC_END] = NULL; } -updateserv(argc, argv) -int argc; -char **argv; +int updateserv(int argc, char **argv) { - char *qargv[SC_END]; - int status; - - qargv[0] = (char *)argv[1]; - if (status = do_mr_query("get_server_info", 1, - qargv, gserv, (char *)qargv)) { - com_err(whoami, status, " while getting server info"); - return(DM_NORMAL); + char *qargv[SC_END + 1]; + int status; + + qargv[0] = (char *)argv[1]; + if ((status = do_mr_query("get_server_info", 1, qargv, gserv, qargv))) + { + com_err(whoami, status, " while getting server info"); + return DM_NORMAL; + } + if (!askserv(qargv)) + { + Put_message("Aborted."); + return DM_NORMAL; } - askserv(qargv); - if (status = do_mr_query("update_server_info", SC_END, qargv, Scream, NULL)) - com_err(whoami, status, " while updating server info"); - return(DM_NORMAL); + if ((status = do_mr_query("update_server_info", SC_END, qargv, NULL, NULL))) + com_err(whoami, status, " while updating server info"); + return DM_NORMAL; } -int shhost(argc, argv) -int argc; -char **argv; +int shhost(int argc, char **argv, void *hint) { - char tmp[64], *ltt; - - sprintf(buf, "%s:%s mod by %s on %s with %s", argv[SH_MACHINE], - argv[SH_SERVICE], argv[SH_MODBY], argv[SH_MODTIME], - argv[SH_MODWITH]); - Put_message(buf); - if (atoi(argv[SH_HOSTERROR])) - sprintf(tmp, "Error %d: %s", atoi(argv[SH_HOSTERROR]), argv[SH_ERRMSG]); - else - strcpy(tmp, "No error"); - sprintf(buf, " %s/%s/%s/%s/%s", - atoi(argv[SH_ENABLE]) ? "Enabled" : "Disabled", - atoi(argv[SH_SUCCESS]) ? "Success" : "Failure", - atoi(argv[SH_INPROGRESS]) ? "InProgress" : "Idle", - atoi(argv[SH_OVERRIDE]) ? "Override" : "Normal", tmp); - Put_message(buf); - Put_message(" Last Try Last Success Value1 Value2 Value3"); - ltt = strsave(atot(argv[SH_LASTTRY])); - sprintf(buf, " %-20s %-20s %-9d %-9d %s", ltt, atot(argv[SH_LASTSUCCESS]), - atoi(argv[SH_VALUE1]), atoi(argv[SH_VALUE2]), argv[SH_VALUE3]); - free(ltt); - Put_message(buf); - Put_message(""); - return(MR_CONT); + char tmp[64], *ltt; + + sprintf(buf, "%s:%s mod by %s on %s with %s", argv[SH_MACHINE], + argv[SH_SERVICE], argv[SH_MODBY], argv[SH_MODTIME], + argv[SH_MODWITH]); + Put_message(buf); + if (atoi(argv[SH_HOSTERROR])) + sprintf(tmp, "Error %d: %s", atoi(argv[SH_HOSTERROR]), argv[SH_ERRMSG]); + else + strcpy(tmp, "No error"); + sprintf(buf, " %s/%s/%s/%s/%s", + atoi(argv[SH_ENABLE]) ? "Enabled" : "Disabled", + atoi(argv[SH_SUCCESS]) ? "Success" : "Failure", + atoi(argv[SH_INPROGRESS]) ? "InProgress" : "Idle", + atoi(argv[SH_OVERRIDE]) ? "Override" : "Normal", tmp); + Put_message(buf); + Put_message(" Last Try Last Success Value1 Value2 Value3"); + ltt = strdup(atot(argv[SH_LASTTRY])); + sprintf(buf, " %-20s %-20s %-9d %-9d %s", ltt, atot(argv[SH_LASTSUCCESS]), + atoi(argv[SH_VALUE1]), atoi(argv[SH_VALUE2]), argv[SH_VALUE3]); + free(ltt); + Put_message(buf); + Put_message(""); + return MR_CONT; } -showhost(argc, argv) -int argc; -char **argv; +int showhost(int argc, char **argv) { - char *qargv[2]; - int status; - - qargv[SHI_SERVICE] = argv[1]; - qargv[SHI_MACHINE] = canonicalize_hostname(argv[2]); - if (status = do_mr_query("get_server_host_info", 2, qargv, shhost, NULL)) - com_err(whoami, status, " getting server/host info"); - return(DM_NORMAL); + char *qargv[2]; + int status; + + qargv[SHI_SERVICE] = argv[1]; + qargv[SHI_MACHINE] = canonicalize_hostname(strdup(argv[2])); + if ((status = do_mr_query("get_server_host_info", 2, qargv, shhost, NULL))) + com_err(whoami, status, " getting server/host info"); + return DM_NORMAL; } -resetsrverr(argc, argv) -int argc; -char **argv; +int resetsrverr(int argc, char **argv) { - int status; - if (status = do_mr_query("reset_server_error", 1, &argv[1], Scream, NULL)) - com_err(whoami, status, " while resetting server error"); - return(DM_NORMAL); + int status; + if ((status = do_mr_query("reset_server_error", 1, &argv[1], NULL, NULL))) + com_err(whoami, status, " while resetting server error"); + return DM_NORMAL; } -resetsrvc(argc, argv) -int argc; -char **argv; +int resetsrvc(int argc, char **argv) { - int status; - char *qargv[6], buf[BUFSIZ]; - - sprintf(buf, "Reset state for service %s (Y/N)", argv[1]); - if (!Confirm(buf)) - return(DM_NORMAL); - qargv[0] = argv[1]; - qargv[1] = "0"; - qargv[2] = "0"; - qargv[3] = "0"; - qargv[4] = "0"; - qargv[5] = ""; - if (status = do_mr_query("set_server_internal_flags", 6, qargv, - Scream, NULL)) - com_err(whoami, status, " while resetting server error"); - return(DM_NORMAL); + int status; + char *qargv[6], buf[BUFSIZ]; + + sprintf(buf, "Reset state for service %s (Y/N)", argv[1]); + if (!Confirm(buf)) + return DM_NORMAL; + qargv[0] = argv[1]; + qargv[1] = "0"; + qargv[2] = "0"; + qargv[3] = "0"; + qargv[4] = "0"; + qargv[5] = ""; + if ((status = do_mr_query("set_server_internal_flags", 6, qargv, + NULL, NULL))) + com_err(whoami, status, " while resetting server error"); + return DM_NORMAL; } -resethosterr(argc, argv) -int argc; -char **argv; +int resethosterr(int argc, char **argv) { - int status; + int status; - argv[2] = canonicalize_hostname(argv[2]); - if (status = do_mr_query("reset_server_host_error", 2, &argv[1], - Scream, NULL)) - com_err(whoami, status, " while resetting server/host error"); - return(DM_NORMAL); + argv[2] = canonicalize_hostname(strdup(argv[2])); + if ((status = do_mr_query("reset_server_host_error", 2, &argv[1], + NULL, NULL))) + com_err(whoami, status, " while resetting server/host error"); + return DM_NORMAL; } -resethost(argc, argv) -int argc; -char **argv; +int resethost(int argc, char **argv) { - int status; - char *qargv[9], buf[BUFSIZ]; - - sprintf(buf, "Reset state for service %s on host %s (Y/N)", argv[1], - canonicalize_hostname(argv[2])); - if (!Confirm(buf)) - return(DM_NORMAL); - qargv[0] = argv[1]; - qargv[1] = canonicalize_hostname(argv[2]); - qargv[2] = "0"; - qargv[3] = "0"; - qargv[4] = "0"; - qargv[5] = "0"; - qargv[6] = ""; - qargv[7] = "0"; - qargv[8] = "0"; - if (status = do_mr_query("set_server_host_internal", 9, qargv, - Scream, NULL)) - com_err(whoami, status, " while resetting server/host error"); - return(DM_NORMAL); + int status; + char *qargv[9], buf[BUFSIZ]; + + sprintf(buf, "Reset state for service %s on host %s (Y/N)", argv[1], + canonicalize_hostname(strdup(argv[2]))); + if (!Confirm(buf)) + return DM_NORMAL; + qargv[0] = argv[1]; + qargv[1] = canonicalize_hostname(strdup(argv[2])); + qargv[2] = "0"; + qargv[3] = "0"; + qargv[4] = "0"; + qargv[5] = "0"; + qargv[6] = ""; + qargv[7] = "0"; + qargv[8] = "0"; + if ((status = do_mr_query("set_server_host_internal", 9, qargv, + NULL, NULL))) + com_err(whoami, status, " while resetting server/host error"); + return DM_NORMAL; } -sethostor(argc, argv) -int argc; -char **argv; +int sethostor(int argc, char **argv) { - int status; + int status; - argv[2] = canonicalize_hostname(argv[2]); - if (status = do_mr_query("set_server_host_override", 2, &argv[1], - Scream, NULL)) - com_err(whoami, status, " while setting server/host override"); - return(DM_NORMAL); + argv[2] = canonicalize_hostname(strdup(argv[2])); + if ((status = do_mr_query("set_server_host_override", 2, &argv[1], + NULL, NULL))) + com_err(whoami, status, " while setting server/host override"); + return DM_NORMAL; } -ghost(argc, argv, cargv) -int argc; -char **argv; -char **cargv; +int ghost(int argc, char **argv, void *hint) { - cargv[SHI_SERVICE] = strsave(argv[SH_SERVICE]); - cargv[SHI_MACHINE] = strsave(argv[SH_MACHINE]); - cargv[SHI_ENABLE] = strsave(argv[SH_ENABLE]); - cargv[SHI_VALUE1] = strsave(argv[SH_VALUE1]); - cargv[SHI_VALUE2] = strsave(argv[SH_VALUE2]); - cargv[SHI_VALUE3] = strsave(argv[SH_VALUE3]); - cargv[SHI_END] = NULL; - return(MR_CONT); + char **cargv = hint; + + cargv[SHI_SERVICE] = strdup(argv[SH_SERVICE]); + cargv[SHI_MACHINE] = strdup(argv[SH_MACHINE]); + cargv[SHI_ENABLE] = strdup(argv[SH_ENABLE]); + cargv[SHI_VALUE1] = strdup(argv[SH_VALUE1]); + cargv[SHI_VALUE2] = strdup(argv[SH_VALUE2]); + cargv[SHI_VALUE3] = strdup(argv[SH_VALUE3]); + cargv[SHI_END] = NULL; + return MR_CONT; } -inithost(info) -char **info; +void inithost(char **info) { - info[SHI_MACHINE] = strsave(canonicalize_hostname(info[SH_MACHINE])); - info[SHI_ENABLE] = strsave("1"); - info[SHI_VALUE1] = strsave("0"); - info[SHI_VALUE2] = strsave("0"); - info[SHI_VALUE3] = strsave(""); - info[SHI_END] = NULL; + info[SHI_MACHINE] = canonicalize_hostname(strdup(info[SH_MACHINE])); + info[SHI_ENABLE] = strdup("1"); + info[SHI_VALUE1] = strdup("0"); + info[SHI_VALUE2] = strdup("0"); + info[SHI_VALUE3] = strdup(""); + info[SHI_END] = NULL; } -askhost(info) -char **info; +char **askhost(char **info) { - GetValueFromUser("Enable", &info[SHI_ENABLE]); - GetValueFromUser("Value 1", &info[SHI_VALUE1]); - GetValueFromUser("Value 2", &info[SHI_VALUE2]); - GetValueFromUser("Value 3", &info[SHI_VALUE3]); + if (GetValueFromUser("Enable", &info[SHI_ENABLE]) == SUB_ERROR) + return NULL; + if (GetValueFromUser("Value 1", &info[SHI_VALUE1]) == SUB_ERROR) + return NULL; + if (GetValueFromUser("Value 2", &info[SHI_VALUE2]) == SUB_ERROR) + return NULL; + if (GetValueFromUser("Value 3", &info[SHI_VALUE3]) == SUB_ERROR) + return NULL; + return info; } -updatehost(argc, argv) -int argc; -char **argv; +int updatehost(int argc, char **argv) { - char *info[SHI_END]; - int status; - - info[SHI_SERVICE] = strsave(argv[1]); - info[SHI_MACHINE] = strsave(canonicalize_hostname(argv[2])); - if (status = do_mr_query("get_server_host_info", 2, info, ghost, - (char *)info)) { - com_err(whoami, status, " while getting server/host info"); - return(DM_NORMAL); + char *info[SHI_END + 1]; + int status; + + info[SHI_SERVICE] = strdup(argv[1]); + info[SHI_MACHINE] = canonicalize_hostname(strdup(argv[2])); + if ((status = do_mr_query("get_server_host_info", 2, info, ghost, info))) + { + com_err(whoami, status, " while getting server/host info"); + return DM_NORMAL; } - askhost(info); - if (status = do_mr_query("update_server_host_info", SHI_END, info, - Scream, NULL)) - com_err(whoami, status, " while updating server/host info"); - FreeInfo(info); - return(DM_NORMAL); + if (!askhost(info)) + { + Put_message("Aborted."); + return DM_NORMAL; + } + if ((status = do_mr_query("update_server_host_info", SHI_END, info, + NULL, NULL))) + com_err(whoami, status, " while updating server/host info"); + FreeInfo(info); + return DM_NORMAL; } -addhost(argc, argv) -int argc; -char **argv; +int addhost(int argc, char **argv) { - char *info[SHI_END]; - int status; - - info[SHI_SERVICE] = strsave(argv[1]); - info[SHI_MACHINE] = strsave(canonicalize_hostname(argv[2])); - inithost(info); - askhost(info); - if (status = do_mr_query("add_server_host_info", SHI_END, info, - Scream, NULL)) - com_err(whoami, status, " while adding server/host info"); - FreeInfo(info); - return(DM_NORMAL); + char *info[SHI_END + 1]; + int status; + + info[SHI_SERVICE] = strdup(argv[1]); + info[SHI_MACHINE] = canonicalize_hostname(strdup(argv[2])); + inithost(info); + if (!askhost(info)) + { + Put_message("Aborted."); + return DM_NORMAL; + } + if ((status = do_mr_query("add_server_host_info", SHI_END, info, + NULL, NULL))) + com_err(whoami, status, " while adding server/host info"); + FreeInfo(info); + return DM_NORMAL; } -delserv(argc, argv) -int argc; -char **argv; +int delserv(int argc, char **argv) { - int status; + int status; - if (status = do_mr_query("delete_server_info", 1, &argv[1], Scream, NULL)) - com_err(whoami, status, " while deleting server info"); - return(DM_NORMAL); + if ((status = do_mr_query("delete_server_info", 1, &argv[1], NULL, NULL))) + com_err(whoami, status, " while deleting server info"); + return DM_NORMAL; } -delhost(argc, argv) -int argc; -char **argv; +int delhost(int argc, char **argv) { - int status; + int status; - argv[2] = canonicalize_hostname(argv[2]); - if (status = do_mr_query("delete_server_host_info", 2, &argv[1], - Scream, NULL)) - com_err(whoami, status, " while deleting server/host info"); - return(DM_NORMAL); + argv[2] = canonicalize_hostname(strdup(argv[2])); + if ((status = do_mr_query("delete_server_host_info", 2, &argv[1], + NULL, NULL))) + com_err(whoami, status, " while deleting server/host info"); + return DM_NORMAL; } -pserv(argc, argv, count) -int argc; -char **argv; -int *count; +int pserv(int argc, char **argv, void *count) { - sprintf(buf, "Service %s", argv[0]); - Put_message(buf); - (*count)++; - return(MR_CONT); + sprintf(buf, "Service %s", argv[0]); + Put_message(buf); + (*(int *)count)++; + return MR_CONT; } -phost(argc, argv, count) -int argc; -char **argv; -int *count; +int phost(int argc, char **argv, void *count) { - sprintf(buf, "Host %s:%s", argv[0], argv[1]); - Put_message(buf); - (*count)++; - return(MR_CONT); + sprintf(buf, "Host %s:%s", argv[0], argv[1]); + Put_message(buf); + (*(int *)count)++; + return MR_CONT; } -InProgress() +int InProgress(int argc, char **oargv) { - char *argv[6]; - int status, count = 0; - - argv[0] = argv[2] = "DONTCARE"; - argv[1] = "TRUE"; - if ((status = do_mr_query("qualified_get_server", 3, argv, pserv, - (char *)&count)) && - status != MR_NO_MATCH) - com_err(whoami, status, " while getting servers"); - argv[0] = "*"; - argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE"; - argv[4] = "TRUE"; - if ((status = do_mr_query("qualified_get_server_host",6,argv,phost, - (char *)&count)) && - status != MR_NO_MATCH) - com_err(whoami, status, " while getting server/hosts"); - if (!count) - strcpy(buf, "Nothing is in progress at this time"); - else - sprintf(buf, "%d update%s in progress at this time", count, - count == 1 ? "" : "s"); - Put_message(buf); - return(DM_NORMAL); + char *argv[6]; + int status, count = 0; + + argv[0] = argv[2] = "DONTCARE"; + argv[1] = "TRUE"; + if ((status = do_mr_query("qualified_get_server", 3, argv, pserv, + &count)) && status != MR_NO_MATCH) + com_err(whoami, status, " while getting servers"); + argv[0] = "*"; + argv[1] = argv[2] = argv[3] = argv[5] = "DONTCARE"; + argv[4] = "TRUE"; + if ((status = do_mr_query("qualified_get_server_host", 6, argv, phost, + &count)) && status != MR_NO_MATCH) + com_err(whoami, status, " while getting server/hosts"); + if (!count) + strcpy(buf, "Nothing is in progress at this time"); + else + sprintf(buf, "%d update%s in progress at this time", count, + count == 1 ? "" : "s"); + Put_message(buf); + return DM_NORMAL; } -DcmFailed() +int DcmFailed(int argc, char **oargv) { - char *argv[6]; - int status, count = 0; - - argv[0] = argv[1] = "DONTCARE"; - argv[2] = "TRUE"; - if ((status = do_mr_query("qualified_get_server", 3, argv, pserv, - (char *)&count)) && - status != MR_NO_MATCH) - com_err(whoami, status, " while getting servers"); - argv[0] = "*"; - argv[1] = argv[2] = argv[3] = argv[4] = "DONTCARE"; - argv[5] = "TRUE"; - if ((status = do_mr_query("qualified_get_server_host",6,argv,phost, - (char *)&count)) && - status != MR_NO_MATCH) - com_err(whoami, status, " while getting server/hosts"); - if (!count) - strcpy(buf, "Nothing has failed at this time"); - else - sprintf(buf, "%d thing%s ha%s failed at this time", count, - count == 1 ? "" : "s", count == 1 ? "s" : "ve"); - Put_message(buf); - return(DM_NORMAL); + char *argv[6]; + int status, count = 0; + + argv[0] = argv[1] = "DONTCARE"; + argv[2] = "TRUE"; + if ((status = do_mr_query("qualified_get_server", 3, argv, pserv, + &count)) && status != MR_NO_MATCH) + com_err(whoami, status, " while getting servers"); + argv[0] = "*"; + argv[1] = argv[2] = argv[3] = argv[4] = "DONTCARE"; + argv[5] = "TRUE"; + if ((status = do_mr_query("qualified_get_server_host", 6, argv, phost, + &count)) && status != MR_NO_MATCH) + com_err(whoami, status, " while getting server/hosts"); + if (!count) + strcpy(buf, "Nothing has failed at this time"); + else + sprintf(buf, "%d thing%s ha%s failed at this time", count, + count == 1 ? "" : "s", count == 1 ? "s" : "ve"); + Put_message(buf); + return DM_NORMAL; } -Dcm() +int Dcm(int argc, char **argv) { - int status; - if (status = mr_do_update()) - com_err(whoami, status, " while triggering update"); - return(DM_NORMAL); -} - - -char *atot(itime) -char *itime; -{ - int time; - char *ct, *ctime(); - - time = atoi(itime); - ct = ctime(&time); - ct[24] = 0; - return(&ct[4]); + int status; + if (Confirm("Are you sure you want to start a DCM now")) + { + if ((status = mr_do_update())) + com_err(whoami, status, " while triggering update"); + } + return DM_NORMAL; }