2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 * This file implements the bos related funtions for afscp
14 #include <afsconfig.h>
15 #include <afs/param.h>
26 * Generic fuction for converting input string to an integer. Pass
27 * the error_msg you want displayed if there is an error converting
32 GetIntFromString(const char *int_str, const char *error_msg) {
34 char *bad_char = NULL;
36 i = strtoul(int_str, &bad_char, 10);
37 if ((bad_char == NULL) || (*bad_char == 0)) {
45 * Functions for reading and displaying bos restart times. These are copied
46 * from util/ktime.c and changed to handle the bos types.
54 static char *day[] = {
64 static LocalFreeTokens(
67 register struct token *nlist;
68 for(; alist; alist = nlist) {
79 if (x == 0 || x == ' ' || x == '\t' || x== '\n') return 1;
83 static LocalParseLine(
90 struct token *first, *last;
91 register struct token *ttok;
94 inToken = 0; /* not copying token chars at start */
95 first = (struct token *) 0;
96 last = (struct token *) 0;
99 if (tc == 0 || space(tc)) {
101 inToken = 0; /* end of this token */
103 ttok = (struct token *) malloc(sizeof(struct token));
104 ttok->next = (struct token *) 0;
105 ttok->key = (char *) malloc(strlen(tbuffer)+1);
106 strcpy(ttok->key, tbuffer);
112 if (!first) first = ttok;
116 /* an alpha character */
121 if (tptr - tbuffer >= sizeof(tbuffer)) return -1;
125 /* last token flushed 'cause space(0) --> true */
126 if (last) last->next = (struct token *) 0;
133 /* keyword database for periodic date parsing */
134 static struct ptemp {
148 "wednesday", 0x10003,
161 bos_RestartTime_p ak,
169 field = 0; /* 0=hour, 1=min, 2=sec */
172 ak->mask |= (BOS_RESTART_TIME_HOUR | BOS_RESTART_TIME_MINUTE | BOS_RESTART_TIME_SECOND);
175 if (tc == 0 || tc == ':') {
187 else if (!isdigit(tc)) return -1; /* syntax error */
194 if (ak->hour >= 24 || ak->min >= 60 || ak->sec >= 60) return -1;
198 int ktime_ParsePeriodic(
200 bos_RestartTime_p ak)
203 register afs_int32 code;
206 bzero(ak, sizeof(*ak));
207 code = LocalParseLine(adate, &tt);
209 for(;tt;tt=tt->next) {
210 /* look at each token */
211 if (strcmp(tt->key, "now") == 0) {
212 ak->mask |= BOS_RESTART_TIME_NOW;
216 if (strcmp(tt->key, "never") == 0) {
217 ak->mask |= BOS_RESTART_TIME_NEVER;
221 if (strcmp(tt->key, "at") == 0) continue;
222 if (strcmp(tt->key, "every") == 0) continue;
223 if (isdigit(tt->key[0])) {
225 code = ParseTime(ak, tt->key);
232 /* otherwise use keyword table */
233 for(tp = ptkeys;; tp++) {
234 if (tp->key == (char *) 0) {
238 if (strcmp(tp->key, tt->key) == 0) break;
240 /* now look at tp->value to see what we've got */
241 if ((tp->value>>16) == 1) {
243 ak->mask |= BOS_RESTART_TIME_DAY;
244 ak->day = tp->value & 0xff;
246 if ((tp->value >> 16) == 2) {
248 if ((tp->value & 0xff) == 1) {
250 if (!(ak->mask & BOS_RESTART_TIME_HOUR)) return -1;
251 if (ak->hour < 12) ak->hour += 12;
253 else if (ak->hour != 12) {
259 /* am is almost a noop, except that we map 12:01 am to 0:01 */
264 if (ak->hour == 12) ak->hour = 0;
273 DoBosProcessCreate(struct cmd_syndesc *as, char *arock)
275 typedef enum {SERVER, PROCESS, BINARY, CRON, CRONTIME, NOTIFIER}
276 DoBosProcessCreate_parm_t;
278 void *bos_server = NULL;
279 const char *process = NULL;
280 bos_ProcessType_t process_type = BOS_PROCESS_SIMPLE;
281 const char *binary = NULL;
283 const char *cron_time = NULL;
284 int has_cron_time = 0;
285 const char *notifier = NULL;
287 if (as->parms[SERVER].items) {
288 if (!bos_ServerOpen(cellHandle,
289 as->parms[SERVER].items->data,
292 ERR_ST_EXT("bos_ServerOpen", st);
296 if (as->parms[PROCESS].items) {
297 process = as->parms[PROCESS].items->data;
300 if (as->parms[BINARY].items) {
301 binary = as->parms[BINARY].items->data;
304 if (as->parms[CRON].items) {
306 process_type = BOS_PROCESS_CRON;
309 if (as->parms[CRONTIME].items) {
310 cron_time = as->parms[CRONTIME].items->data;
315 if (!has_cron_time) {
316 ERR_EXT("must specify cron time when creating a cron process");
320 ERR_EXT("cron time is meaningless for non cron process");
324 if (as->parms[NOTIFIER].items) {
325 notifier = as->parms[NOTIFIER].items->data;
328 if (!bos_ProcessCreate(bos_server,
335 ERR_ST_EXT("bos_ProcessCreate", st);
338 bos_ServerClose(bos_server, 0);
344 DoBosFSProcessCreate(struct cmd_syndesc *as, char *arock)
346 typedef enum {SERVER, PROCESS, FILESERVER, VOLSERVER, SALVAGER, NOTIFIER}
347 DoBosFSProcessCreate_parm_t;
349 void *bos_server = NULL;
350 const char *process = NULL;
351 const char *fileserver = NULL;
352 const char *volserver = NULL;
353 const char *salvager= NULL;
354 const char *notifier = NULL;
356 if (as->parms[SERVER].items) {
357 if (!bos_ServerOpen(cellHandle,
358 as->parms[SERVER].items->data,
361 ERR_ST_EXT("bos_ServerOpen", st);
365 if (as->parms[PROCESS].items) {
366 process = as->parms[PROCESS].items->data;
369 if (as->parms[FILESERVER].items) {
370 fileserver = as->parms[FILESERVER].items->data;
373 if (as->parms[VOLSERVER].items) {
374 volserver = as->parms[VOLSERVER].items->data;
377 if (as->parms[SALVAGER].items) {
378 salvager = as->parms[SALVAGER].items->data;
381 if (as->parms[NOTIFIER].items) {
382 notifier = as->parms[NOTIFIER].items->data;
385 if (!bos_FSProcessCreate(bos_server,
392 ERR_ST_EXT("bos_FSProcessCreate", st);
395 bos_ServerClose(bos_server, 0);
401 DoBosProcessDelete(struct cmd_syndesc *as, char *arock)
403 typedef enum {SERVER, PROCESS}
404 DoBosProcessDelete_parm_t;
406 void *bos_server = NULL;
407 const char *process = NULL;
409 if (as->parms[SERVER].items) {
410 if (!bos_ServerOpen(cellHandle,
411 as->parms[SERVER].items->data,
414 ERR_ST_EXT("bos_ServerOpen", st);
418 if (as->parms[PROCESS].items) {
419 process = as->parms[PROCESS].items->data;
422 if (!bos_ProcessDelete(bos_server,
425 ERR_ST_EXT("bos_ProcessDelete", st);
428 bos_ServerClose(bos_server, 0);
434 Print_bos_ProcessExecutionState_p(
435 bos_ProcessExecutionState_p state,
438 printf("%sThe process executation state is: ", prefix);
440 case BOS_PROCESS_STOPPED:
443 case BOS_PROCESS_RUNNING:
446 case BOS_PROCESS_STOPPING:
447 printf("stopping\n");
449 case BOS_PROCESS_STARTING:
450 printf("starting\n");
456 DoBosProcessExecutionStateGet(struct cmd_syndesc *as, char *arock)
458 typedef enum {SERVER, PROCESS}
459 DoBosProcessExecutionStateGet_parm_t;
461 void *bos_server = NULL;
462 const char *process = NULL;
463 bos_ProcessExecutionState_t state;
464 char aux_status[BOS_MAX_NAME_LEN];
466 if (as->parms[SERVER].items) {
467 if (!bos_ServerOpen(cellHandle,
468 as->parms[SERVER].items->data,
471 ERR_ST_EXT("bos_ServerOpen", st);
475 if (as->parms[PROCESS].items) {
476 process = as->parms[PROCESS].items->data;
479 if (!bos_ProcessExecutionStateGet(bos_server,
484 ERR_ST_EXT("bos_ProcessExecutionStateGet", st);
487 Print_bos_ProcessExecutionState_p(&state, "");
488 if (aux_status[0] != 0) {
489 printf("Aux process status: %s\n", aux_status);
492 bos_ServerClose(bos_server, 0);
498 DoBosProcessExecutionStateSet(struct cmd_syndesc *as, char *arock)
500 typedef enum {SERVER, PROCESS, STOPPED, RUNNING}
501 DoBosProcessExecutionStateSet_parm_t;
503 void *bos_server = NULL;
504 const char *process = NULL;
507 bos_ProcessExecutionState_t state;
509 if (as->parms[SERVER].items) {
510 if (!bos_ServerOpen(cellHandle,
511 as->parms[SERVER].items->data,
514 ERR_ST_EXT("bos_ServerOpen", st);
518 if (as->parms[PROCESS].items) {
519 process = as->parms[PROCESS].items->data;
522 if (as->parms[STOPPED].items) {
524 state = BOS_PROCESS_STOPPED;
527 if (as->parms[RUNNING].items) {
529 state = BOS_PROCESS_RUNNING;
532 if ((stop == 1) && (run == 1)) {
533 ERR_EXT("you must specify either running or stopped, but not both");
536 if ((stop == 0) && (run == 0)) {
537 ERR_EXT("you must specify either running or stopped");
540 if (!bos_ProcessExecutionStateSet(bos_server,
544 ERR_ST_EXT("bos_ProcessExecutionStateSet", st);
547 bos_ServerClose(bos_server, 0);
553 DoBosProcessExecutionStateSetTemporary(struct cmd_syndesc *as, char *arock)
555 typedef enum {SERVER, PROCESS, STOPPED, RUNNING}
556 DoBosProcessExecutionStateSetTemporary_parm_t;
558 void *bos_server = NULL;
559 const char *process = NULL;
562 bos_ProcessExecutionState_t state;
564 if (as->parms[SERVER].items) {
565 if (!bos_ServerOpen(cellHandle,
566 as->parms[SERVER].items->data,
569 ERR_ST_EXT("bos_ServerOpen", st);
573 if (as->parms[PROCESS].items) {
574 process = as->parms[PROCESS].items->data;
577 if (as->parms[STOPPED].items) {
579 state = BOS_PROCESS_STOPPED;
582 if (as->parms[RUNNING].items) {
584 state = BOS_PROCESS_RUNNING;
587 if ((stop == 1) && (run == 1)) {
588 ERR_EXT("you must specify either running or stopped, but not both");
591 if ((stop == 0) && (run == 0)) {
592 ERR_EXT("you must specify either running or stopped");
595 if (!bos_ProcessExecutionStateSetTemporary(bos_server,
599 ERR_ST_EXT("bos_ProcessExecutionStateSetTemporary", st);
602 bos_ServerClose(bos_server, 0);
608 DoBosProcessNameList(struct cmd_syndesc *as, char *arock)
610 typedef enum {SERVER}
611 DoBosProcessNameList_parm_t;
613 void *bos_server = NULL;
615 char process[BOS_MAX_NAME_LEN];
617 if (as->parms[SERVER].items) {
618 if (!bos_ServerOpen(cellHandle,
619 as->parms[SERVER].items->data,
622 ERR_ST_EXT("bos_ServerOpen", st);
626 if (!bos_ProcessNameGetBegin(bos_server, &iter, &st)) {
627 ERR_ST_EXT("bos_ProcessNameGetBegin", st);
630 printf("Listing processes at server %s:\n", as->parms[SERVER].items->data);
632 while (bos_ProcessNameGetNext(iter, process, &st)) {
633 printf("\t%s\n", process);
636 if (st != ADMITERATORDONE) {
637 ERR_ST_EXT("bos_ProcessNameGetNext", st);
640 if (!bos_ProcessNameGetDone(iter, &st)) {
641 ERR_ST_EXT("bos_ProcessNameGetDone", st);
648 Print_bos_ProcessType_p(
649 bos_ProcessType_p type,
652 printf("%sProcess type: \n", prefix);
654 case BOS_PROCESS_SIMPLE:
660 case BOS_PROCESS_CRON:
667 Print_bos_ProcessState_p(
668 bos_ProcessState_p state,
671 printf("%sProcess state:\n", prefix);
672 if (*state & BOS_PROCESS_OK) {
673 printf("%s\tBOS_PROCESS_OK:\n", prefix);
675 if (*state & BOS_PROCESS_CORE_DUMPED) {
676 printf("%s\tBOS_PROCESS_CORE_DUMPED:\n", prefix);
678 if (*state & BOS_PROCESS_TOO_MANY_ERRORS) {
679 printf("%s\tBOS_PROCESS_TOO_MANY_ERRORS:\n", prefix);
681 if (*state & BOS_PROCESS_BAD_FILE_ACCESS) {
682 printf("%s\tBOS_PROCESS_BAD_FILE_ACCESS:\n", prefix);
687 Print_bos_ProcessInfo_p(
688 bos_ProcessInfo_p info,
691 Print_bos_ProcessExecutionState_p(&info->processGoal, prefix);
692 printf("%sStart time %lu\n", prefix, info->processStartTime);
693 printf("%sNumber of process starts %lu \n",
695 info->numberProcessStarts);
696 printf("%sProcess exit time %lu\n", prefix, info->processExitTime);
697 printf("%sProcess exit error time %lu\n",
699 info->processExitErrorTime);
700 printf("%sProcess error code %lu\n", prefix, info->processErrorCode);
701 printf("%sProcess error signal %lu\n", prefix, info->processErrorSignal);
702 Print_bos_ProcessState_p(&info->state, prefix);
706 DoBosProcessInfoGet(struct cmd_syndesc *as, char *arock)
708 typedef enum {SERVER, PROCESS}
709 DoBosProcessInfoGet_parm_t;
711 void *bos_server = NULL;
712 const char *process = NULL;
713 bos_ProcessType_t type;
714 bos_ProcessInfo_t info;
716 if (as->parms[SERVER].items) {
717 if (!bos_ServerOpen(cellHandle,
718 as->parms[SERVER].items->data,
721 ERR_ST_EXT("bos_ServerOpen", st);
725 if (as->parms[PROCESS].items) {
726 process = as->parms[PROCESS].items->data;
729 if (!bos_ProcessInfoGet(bos_server,
734 ERR_ST_EXT("bos_ProcessInfoGet", st);
737 Print_bos_ProcessType_p(&type, "");
738 Print_bos_ProcessInfo_p(&info, "");
744 DoBosProcessParameterList(struct cmd_syndesc *as, char *arock)
746 typedef enum {SERVER, PROCESS}
747 DoBosProcessParameterList_parm_t;
749 void *bos_server = NULL;
750 char *process = NULL;
752 char parameter[BOS_MAX_NAME_LEN];
754 if (as->parms[SERVER].items) {
755 if (!bos_ServerOpen(cellHandle,
756 as->parms[SERVER].items->data,
759 ERR_ST_EXT("bos_ServerOpen", st);
763 if (as->parms[PROCESS].items) {
764 process = as->parms[PROCESS].items->data;
767 if (!bos_ProcessParameterGetBegin(bos_server,
771 ERR_ST_EXT("bos_ProcessParameterGetBegin", st);
774 printf("Getting parameters for %s\n", process);
776 while(bos_ProcessParameterGetNext(iter, parameter, &st)) {
777 printf("\t%s\n", parameter);
780 if (st != ADMITERATORDONE) {
781 ERR_ST_EXT("bos_ProcessParameterGetNext", st);
784 if (!bos_ProcessParameterGetDone(iter, &st)) {
785 ERR_ST_EXT("bos_ProcessParameterGetDone", st);
788 bos_ServerClose(bos_server, 0);
794 DoBosProcessNotifierGet(struct cmd_syndesc *as, char *arock)
796 typedef enum {SERVER, PROCESS}
797 DoBosProcessNotifierGet_parm_t;
799 void *bos_server = NULL;
800 const char *process = NULL;
801 char notifier[BOS_MAX_NAME_LEN];
803 if (as->parms[SERVER].items) {
804 if (!bos_ServerOpen(cellHandle,
805 as->parms[SERVER].items->data,
808 ERR_ST_EXT("bos_ServerOpen", st);
812 if (as->parms[PROCESS].items) {
813 process = as->parms[PROCESS].items->data;
816 if (!bos_ProcessNotifierGet(bos_server,
820 ERR_ST_EXT("bos_ProcessNotifierGet", st);
823 if (notifier[0] == 0) {
824 printf("%s does not have a notifier.\n", process);
826 printf("The notifier for %s is %s\n", process, notifier);
829 bos_ServerClose(bos_server, 0);
835 DoBosProcessRestart(struct cmd_syndesc *as, char *arock)
837 typedef enum {SERVER, PROCESS}
838 DoBosProcessRestart_parm_t;
840 void *bos_server = NULL;
841 const char *process = NULL;
843 if (as->parms[SERVER].items) {
844 if (!bos_ServerOpen(cellHandle,
845 as->parms[SERVER].items->data,
848 ERR_ST_EXT("bos_ServerOpen", st);
852 if (as->parms[PROCESS].items) {
853 process = as->parms[PROCESS].items->data;
856 if (!bos_ProcessRestart(bos_server,
859 ERR_ST_EXT("bos_ProcessRestart", st);
862 bos_ServerClose(bos_server, 0);
868 DoBosProcessAllStop(struct cmd_syndesc *as, char *arock)
870 typedef enum {SERVER}
871 DoBosProcessAllStop_parm_t;
873 void *bos_server = NULL;
875 if (as->parms[SERVER].items) {
876 if (!bos_ServerOpen(cellHandle,
877 as->parms[SERVER].items->data,
880 ERR_ST_EXT("bos_ServerOpen", st);
884 if (!bos_ProcessAllStop(bos_server,
886 ERR_ST_EXT("bos_ProcessAllStop", st);
889 bos_ServerClose(bos_server, 0);
895 DoBosProcessAllStart(struct cmd_syndesc *as, char *arock)
897 typedef enum {SERVER}
898 DoBosProcessAllStart_parm_t;
900 void *bos_server = NULL;
902 if (as->parms[SERVER].items) {
903 if (!bos_ServerOpen(cellHandle,
904 as->parms[SERVER].items->data,
907 ERR_ST_EXT("bos_ServerOpen", st);
911 if (!bos_ProcessAllStart(bos_server,
913 ERR_ST_EXT("bos_ProcessAllStart", st);
916 bos_ServerClose(bos_server, 0);
922 DoBosProcessAllWaitStop(struct cmd_syndesc *as, char *arock)
924 typedef enum {SERVER}
925 DoBosProcessAllWaitStop_parm_t;
927 void *bos_server = NULL;
929 if (as->parms[SERVER].items) {
930 if (!bos_ServerOpen(cellHandle,
931 as->parms[SERVER].items->data,
934 ERR_ST_EXT("bos_ServerOpen", st);
938 if (!bos_ProcessAllWaitStop(bos_server,
940 ERR_ST_EXT("bos_ProcessAllWaitStop", st);
943 bos_ServerClose(bos_server, 0);
949 DoBosProcessAllWaitTransition(struct cmd_syndesc *as, char *arock)
951 typedef enum {SERVER}
952 DoBosProcessAllWaitTransition_parm_t;
954 void *bos_server = NULL;
956 if (as->parms[SERVER].items) {
957 if (!bos_ServerOpen(cellHandle,
958 as->parms[SERVER].items->data,
961 ERR_ST_EXT("bos_ServerOpen", st);
965 if (!bos_ProcessAllWaitTransition(bos_server,
967 ERR_ST_EXT("bos_ProcessAllWaitTransition", st);
970 bos_ServerClose(bos_server, 0);
976 DoBosProcessAllStopAndRestart(struct cmd_syndesc *as, char *arock)
978 typedef enum {SERVER, INCLUDEBOS}
979 DoBosProcessAllStopAndRestart_parm_t;
981 void *bos_server = NULL;
982 bos_RestartBosServer_t restart = BOS_DONT_RESTART_BOS_SERVER;
984 if (as->parms[SERVER].items) {
985 if (!bos_ServerOpen(cellHandle,
986 as->parms[SERVER].items->data,
989 ERR_ST_EXT("bos_ServerOpen", st);
993 if (as->parms[INCLUDEBOS].items) {
994 restart = BOS_RESTART_BOS_SERVER;
997 if (!bos_ProcessAllStopAndRestart(bos_server,
1000 ERR_ST_EXT("bos_ProcessAllStopAndRestart", st);
1003 bos_ServerClose(bos_server, 0);
1009 DoBosAdminCreate(struct cmd_syndesc *as, char *arock)
1011 typedef enum {SERVER, ADMIN}
1012 DoBosAdminCreate_parm_t;
1013 afs_status_t st = 0;
1014 void *bos_server = NULL;
1017 if (as->parms[SERVER].items) {
1018 if (!bos_ServerOpen(cellHandle,
1019 as->parms[SERVER].items->data,
1022 ERR_ST_EXT("bos_ServerOpen", st);
1026 if (as->parms[ADMIN].items) {
1027 admin = as->parms[ADMIN].items->data;
1030 if (!bos_AdminCreate(bos_server,
1033 ERR_ST_EXT("bos_AdminCreate", st);
1036 bos_ServerClose(bos_server, 0);
1042 DoBosAdminDelete(struct cmd_syndesc *as, char *arock)
1044 typedef enum {SERVER, ADMIN}
1045 DoBosAdminDelete_parm_t;
1046 afs_status_t st = 0;
1047 void *bos_server = NULL;
1050 if (as->parms[SERVER].items) {
1051 if (!bos_ServerOpen(cellHandle,
1052 as->parms[SERVER].items->data,
1055 ERR_ST_EXT("bos_ServerOpen", st);
1059 if (as->parms[ADMIN].items) {
1060 admin = as->parms[ADMIN].items->data;
1063 if (!bos_AdminDelete(bos_server,
1066 ERR_ST_EXT("bos_AdminDelete", st);
1069 bos_ServerClose(bos_server, 0);
1075 DoBosAdminList(struct cmd_syndesc *as, char *arock)
1077 typedef enum {SERVER}
1078 DoBosAdminList_parm_t;
1079 afs_status_t st = 0;
1080 void *bos_server = NULL;
1082 char admin[BOS_MAX_NAME_LEN];
1084 if (as->parms[SERVER].items) {
1085 if (!bos_ServerOpen(cellHandle,
1086 as->parms[SERVER].items->data,
1089 ERR_ST_EXT("bos_ServerOpen", st);
1093 if (!bos_AdminGetBegin(bos_server,
1096 ERR_ST_EXT("bos_AdminGetBegin", st);
1099 printf("Administrators at %s\n", as->parms[SERVER].items->data);
1101 while(bos_AdminGetNext(iter, admin, &st)) {
1102 printf("%s\n", admin);
1105 if (st != ADMITERATORDONE) {
1106 ERR_ST_EXT("bos_AdminGetNext", st);
1109 if (!bos_AdminGetDone(iter, &st)) {
1110 ERR_ST_EXT("bos_AdminGetDone", st);
1113 bos_ServerClose(bos_server, 0);
1119 DoBosKeyCreate(struct cmd_syndesc *as, char *arock)
1121 typedef enum {SERVER, VERSIONNUMBER, KEY}
1122 DoBosKeyCreate_parm_t;
1123 afs_status_t st = 0;
1124 void *bos_server = NULL;
1126 kas_encryptionKey_t key = {{0,0,0,0,0,0,0,0}};
1129 if (as->parms[SERVER].items) {
1130 if (!bos_ServerOpen(cellHandle,
1131 as->parms[SERVER].items->data,
1134 ERR_ST_EXT("bos_ServerOpen", st);
1138 if (as->parms[VERSIONNUMBER].items) {
1139 version_number = GetIntFromString(as->parms[VERSIONNUMBER].items->data,
1140 "invalid version number");
1143 if (as->parms[KEY].items) {
1144 const char *str = as->parms[KEY].items->data;
1145 if (!afsclient_CellNameGet(cellHandle, &cell, &st)) {
1146 ERR_ST_EXT("afsclient_CellNameGet", st);
1148 if (!kas_StringToKey(cell, str, &key, &st)) {
1149 ERR_ST_EXT("kas_StringToKey", st);
1153 if (!bos_KeyCreate(bos_server, version_number, &key, &st)) {
1154 ERR_ST_EXT("bos_KeyCreate", st);
1157 bos_ServerClose(bos_server, 0);
1163 DoBosKeyDelete(struct cmd_syndesc *as, char *arock)
1165 typedef enum {SERVER, VERSIONNUMBER}
1166 DoBosKeyDelete_parm_t;
1167 afs_status_t st = 0;
1168 void *bos_server = NULL;
1171 if (as->parms[SERVER].items) {
1172 if (!bos_ServerOpen(cellHandle,
1173 as->parms[SERVER].items->data,
1176 ERR_ST_EXT("bos_ServerOpen", st);
1180 if (as->parms[VERSIONNUMBER].items) {
1181 version_number = GetIntFromString(as->parms[VERSIONNUMBER].items->data,
1182 "invalid version number");
1185 if (!bos_KeyDelete(bos_server, version_number, &st)) {
1186 ERR_ST_EXT("bos_KeyDelete", st);
1189 bos_ServerClose(bos_server, 0);
1195 Print_bos_KeyInfo_p(
1200 printf("%sVersion number: %d\n", prefix, key->keyVersionNumber);
1201 printf("%sLast modification date %d\n",
1203 key->keyStatus.lastModificationDate);
1204 printf("%sLast modification micro seconds %d\n",
1205 key->keyStatus.lastModificationMicroSeconds,
1207 printf("%sChecksum %u\n", prefix, key->keyStatus.checkSum);
1209 printf("%sKey: \n", prefix);
1210 for(i=0;i<KAS_ENCRYPTION_KEY_LEN;i++) {
1211 printf("%s\t%d ", key->key.key[i]);
1217 DoBosKeyList(struct cmd_syndesc *as, char *arock)
1219 typedef enum {SERVER}
1220 DoBosKeyList_parm_t;
1221 afs_status_t st = 0;
1222 void *bos_server = NULL;
1226 if (as->parms[SERVER].items) {
1227 if (!bos_ServerOpen(cellHandle,
1228 as->parms[SERVER].items->data,
1231 ERR_ST_EXT("bos_ServerOpen", st);
1235 if (!bos_KeyGetBegin(bos_server, &iter, &st)) {
1236 ERR_ST_EXT("bos_KeyGetBegin", st);
1239 printf("Listing keys at server %s:\n", as->parms[SERVER].items->data);
1241 while (bos_KeyGetNext(iter, &key, &st)) {
1242 Print_bos_KeyInfo_p(&key, "");
1245 if (st != ADMITERATORDONE) {
1246 ERR_ST_EXT("bos_KeyGetNext", st);
1249 if (!bos_KeyGetDone(iter, &st)) {
1250 ERR_ST_EXT("bos_KeyGetDone", st);
1253 bos_ServerClose(bos_server, 0);
1259 DoBosCellSet(struct cmd_syndesc *as, char *arock)
1261 typedef enum {SERVER, CELL}
1262 DoBosCellSet_parm_t;
1263 afs_status_t st = 0;
1264 void *bos_server = NULL;
1267 if (as->parms[SERVER].items) {
1268 if (!bos_ServerOpen(cellHandle,
1269 as->parms[SERVER].items->data,
1272 ERR_ST_EXT("bos_ServerOpen", st);
1276 if (as->parms[SERVER].items) {
1277 cell = as->parms[SERVER].items->data;
1280 if (!bos_CellSet(bos_server, cell, &st)) {
1281 ERR_ST_EXT("bos_CellSet", st);
1284 bos_ServerClose(bos_server, 0);
1290 DoBosCellGet(struct cmd_syndesc *as, char *arock)
1292 typedef enum {SERVER}
1293 DoBosCellGet_parm_t;
1294 afs_status_t st = 0;
1295 void *bos_server = NULL;
1296 char cell[BOS_MAX_NAME_LEN];
1298 if (as->parms[SERVER].items) {
1299 if (!bos_ServerOpen(cellHandle,
1300 as->parms[SERVER].items->data,
1303 ERR_ST_EXT("bos_ServerOpen", st);
1307 if (!bos_CellGet(bos_server, cell, &st)) {
1308 ERR_ST_EXT("bos_CellGet", st);
1311 printf("The cell name is %s\n", cell);
1313 bos_ServerClose(bos_server, 0);
1319 DoBosHostCreate(struct cmd_syndesc *as, char *arock)
1321 typedef enum {SERVER, HOST}
1322 DoBosHostCreate_parm_t;
1323 afs_status_t st = 0;
1324 void *bos_server = NULL;
1327 if (as->parms[SERVER].items) {
1328 if (!bos_ServerOpen(cellHandle,
1329 as->parms[SERVER].items->data,
1332 ERR_ST_EXT("bos_ServerOpen", st);
1336 if (as->parms[HOST].items) {
1337 host = as->parms[HOST].items->data;
1340 if (!bos_HostCreate(bos_server, host, &st)) {
1341 ERR_ST_EXT("bos_HostCreate", st);
1344 bos_ServerClose(bos_server, 0);
1350 DoBosHostDelete(struct cmd_syndesc *as, char *arock)
1352 typedef enum {SERVER, HOST}
1353 DoBosHostDelete_parm_t;
1354 afs_status_t st = 0;
1355 void *bos_server = NULL;
1358 if (as->parms[SERVER].items) {
1359 if (!bos_ServerOpen(cellHandle,
1360 as->parms[SERVER].items->data,
1363 ERR_ST_EXT("bos_ServerOpen", st);
1367 if (as->parms[HOST].items) {
1368 host = as->parms[HOST].items->data;
1371 if (!bos_HostDelete(bos_server, host, &st)) {
1372 ERR_ST_EXT("bos_HostDelete", st);
1375 bos_ServerClose(bos_server, 0);
1381 DoBosHostList(struct cmd_syndesc *as, char *arock)
1383 typedef enum {SERVER}
1384 DoBosHostList_parm_t;
1385 afs_status_t st = 0;
1386 void *bos_server = NULL;
1388 char host[BOS_MAX_NAME_LEN];
1390 if (as->parms[SERVER].items) {
1391 if (!bos_ServerOpen(cellHandle,
1392 as->parms[SERVER].items->data,
1395 ERR_ST_EXT("bos_ServerOpen", st);
1399 if (!bos_HostGetBegin(bos_server, &iter, &st)) {
1400 ERR_ST_EXT("bos_HostGetBegin", st);
1403 printf("Listing hosts at server %s\n", as->parms[SERVER].items->data);
1405 while(bos_HostGetNext(iter, host, &st)) {
1406 printf("\t%s\n", host);
1409 if (st != ADMITERATORDONE) {
1410 ERR_ST_EXT("bos_HostGetNext", st);
1413 if (!bos_HostGetDone(iter, &st)) {
1414 ERR_ST_EXT("bos_HostGetDone", st);
1417 bos_ServerClose(bos_server, 0);
1423 DoBosExecutableCreate(struct cmd_syndesc *as, char *arock)
1425 typedef enum {SERVER, BINARY, DEST}
1426 DoBosExecutableCreate_parm_t;
1427 afs_status_t st = 0;
1428 void *bos_server = NULL;
1429 const char *binary = NULL;
1430 const char *dest = NULL;
1432 if (as->parms[SERVER].items) {
1433 if (!bos_ServerOpen(cellHandle,
1434 as->parms[SERVER].items->data,
1437 ERR_ST_EXT("bos_ServerOpen", st);
1441 if (as->parms[BINARY].items) {
1442 binary = as->parms[BINARY].items->data;
1445 if (as->parms[DEST].items) {
1446 dest = as->parms[DEST].items->data;
1449 if (!bos_ExecutableCreate(bos_server, binary, dest, &st)) {
1450 ERR_ST_EXT("bos_ExecutableCreate", st);
1453 bos_ServerClose(bos_server, 0);
1459 DoBosExecutableRevert(struct cmd_syndesc *as, char *arock)
1461 typedef enum {SERVER, EXECUTABLE}
1462 DoBosExecutableRevert_parm_t;
1463 afs_status_t st = 0;
1464 void *bos_server = NULL;
1465 const char *executable = NULL;
1467 if (as->parms[SERVER].items) {
1468 if (!bos_ServerOpen(cellHandle,
1469 as->parms[SERVER].items->data,
1472 ERR_ST_EXT("bos_ServerOpen", st);
1476 if (as->parms[EXECUTABLE].items) {
1477 executable = as->parms[EXECUTABLE].items->data;
1480 if (!bos_ExecutableRevert(bos_server, executable, &st)) {
1481 ERR_ST_EXT("bos_ExecutableRevert", st);
1484 bos_ServerClose(bos_server, 0);
1490 DoBosExecutableTimestampGet(struct cmd_syndesc *as, char *arock)
1492 typedef enum {SERVER, EXECUTABLE}
1493 DoBosExecutableTimestampGet_parm_t;
1494 afs_status_t st = 0;
1495 void *bos_server = NULL;
1496 const char *executable = NULL;
1497 unsigned long new_time = 0;
1498 unsigned long old_time = 0;
1499 unsigned long bak_time = 0;
1501 if (as->parms[SERVER].items) {
1502 if (!bos_ServerOpen(cellHandle,
1503 as->parms[SERVER].items->data,
1506 ERR_ST_EXT("bos_ServerOpen", st);
1510 if (as->parms[EXECUTABLE].items) {
1511 executable = as->parms[EXECUTABLE].items->data;
1514 if (!bos_ExecutableTimestampGet(bos_server,
1520 ERR_ST_EXT("bos_ExecutableTimestampGet", st);
1523 bos_ServerClose(bos_server, 0);
1529 DoBosExecutablePrune(struct cmd_syndesc *as, char *arock)
1531 typedef enum {SERVER, OLDFILES, BAKFILES, COREFILES}
1532 DoBosExecutablePrune_parm_t;
1533 afs_status_t st = 0;
1534 void *bos_server = NULL;
1535 bos_Prune_t old_files = BOS_DONT_PRUNE;
1536 bos_Prune_t bak_files = BOS_DONT_PRUNE;
1537 bos_Prune_t core_files = BOS_DONT_PRUNE;
1539 if (as->parms[SERVER].items) {
1540 if (!bos_ServerOpen(cellHandle,
1541 as->parms[SERVER].items->data,
1544 ERR_ST_EXT("bos_ServerOpen", st);
1548 if (as->parms[OLDFILES].items) {
1549 old_files = BOS_PRUNE;
1552 if (as->parms[BAKFILES].items) {
1553 bak_files = BOS_PRUNE;
1556 if (as->parms[COREFILES].items) {
1557 core_files = BOS_PRUNE;
1560 if (!bos_ExecutablePrune(bos_server,
1565 ERR_ST_EXT("bos_ExecutablePrune", st);
1568 bos_ServerClose(bos_server, 0);
1574 DoBosExecutableRestartTimeSet(struct cmd_syndesc *as, char *arock)
1576 typedef enum {SERVER, DAILY, WEEKLY, TIME}
1577 DoBosExecutableRestartTimeSet_parm_t;
1578 afs_status_t st = 0;
1579 void *bos_server = NULL;
1582 int have_weekly = 0;
1583 bos_RestartTime_t time;
1585 if (as->parms[SERVER].items) {
1586 if (!bos_ServerOpen(cellHandle,
1587 as->parms[SERVER].items->data,
1590 ERR_ST_EXT("bos_ServerOpen", st);
1594 if (as->parms[DAILY].items) {
1595 type = BOS_RESTART_DAILY;
1599 if (as->parms[WEEKLY].items) {
1600 type = BOS_RESTART_WEEKLY;
1604 if ((have_daily == 0) && (have_weekly == 0)) {
1605 ERR_EXT("must specify either daily or weekly");
1608 if ((have_daily == 1) && (have_weekly == 1)) {
1609 ERR_EXT("must specify either daily or weekly, not both");
1612 if (as->parms[TIME].items) {
1613 if (ktime_ParsePeriodic(as->parms[TIME].items->data, &time) == -1) {
1614 ERR_EXT("error parsing time");
1618 if (!bos_ExecutableRestartTimeSet(bos_server, type, time, &st)) {
1619 ERR_ST_EXT("bos_ExecutableRestartTimeSet", st);
1622 bos_ServerClose(bos_server, 0);
1628 Print_bos_RestartTime_p(
1629 bos_RestartTime_p restart,
1632 char tempString[50];
1638 if (restart->mask & BOS_RESTART_TIME_NEVER) {
1639 printf("%snever\n", prefix);
1641 else if (restart->mask & BOS_RESTART_TIME_NOW) {
1642 printf("%snow\n", prefix);
1645 strcpy(astring, "at");
1646 if (restart->mask & BOS_RESTART_TIME_DAY) {
1647 strcat(astring, " ");
1648 strcat(astring, day[restart->day]);
1650 if (restart->mask & BOS_RESTART_TIME_HOUR) {
1651 if (restart->hour > 12)
1652 sprintf(tempString, " %d", restart->hour-12);
1653 else if (restart->hour == 0)
1654 strcpy(tempString, " 12");
1656 sprintf(tempString, " %d", restart->hour);
1657 strcat(astring, tempString);
1659 if (restart->mask & BOS_RESTART_TIME_MINUTE) {
1660 sprintf(tempString, ":%02d", restart->min);
1661 strcat(astring, tempString);
1663 if ((restart->mask & BOS_RESTART_TIME_SECOND) && restart->sec != 0) {
1664 sprintf(tempString, ":%02d", restart->sec);
1665 strcat(astring, tempString);
1667 if (restart->mask & BOS_RESTART_TIME_HOUR) {
1668 if (restart->hour >= 12)
1669 strcat(astring, " pm");
1671 strcat(astring, " am");
1673 printf("%s%s\n", prefix, astring);
1678 DoBosExecutableRestartTimeGet(struct cmd_syndesc *as, char *arock)
1680 typedef enum {SERVER, DAILY, WEEKLY}
1681 DoBosExecutableRestartTimeGet_parm_t;
1682 afs_status_t st = 0;
1683 void *bos_server = NULL;
1686 int have_weekly = 0;
1687 bos_RestartTime_t restart_time;
1689 if (as->parms[SERVER].items) {
1690 if (!bos_ServerOpen(cellHandle,
1691 as->parms[SERVER].items->data,
1694 ERR_ST_EXT("bos_ServerOpen", st);
1698 if (as->parms[DAILY].items) {
1699 type = BOS_RESTART_DAILY;
1703 if (as->parms[WEEKLY].items) {
1704 type = BOS_RESTART_WEEKLY;
1708 if ((have_daily == 0) && (have_weekly == 0)) {
1709 ERR_EXT("must specify either daily or weekly");
1712 if ((have_daily == 1) && (have_weekly == 1)) {
1713 ERR_EXT("must specify either daily or weekly, not both");
1716 if (!bos_ExecutableRestartTimeGet(bos_server,
1720 ERR_ST_EXT("bos_ExecutableRestartTimeGet", st);
1723 Print_bos_RestartTime_p(&restart_time, "");
1725 bos_ServerClose(bos_server, 0);
1730 #define INITIAL_BUF_SIZE 4096
1733 DoBosLogGet(struct cmd_syndesc *as, char *arock)
1735 typedef enum {SERVER, LOGFILE}
1737 afs_status_t st = 0;
1738 void *bos_server = NULL;
1739 const char *log_file;
1740 unsigned long buf_size = INITIAL_BUF_SIZE;
1743 if (as->parms[SERVER].items) {
1744 if (!bos_ServerOpen(cellHandle,
1745 as->parms[SERVER].items->data,
1748 ERR_ST_EXT("bos_ServerOpen", st);
1752 if (as->parms[LOGFILE].items) {
1753 log_file = as->parms[LOGFILE].items->data;
1757 while (st == ADMMOREDATA) {
1758 buf = realloc(buf, buf_size);
1760 ERR_EXT("cannot dynamically allocate memory");
1762 bos_LogGet(bos_server, log_file, &buf_size, buf, &st);
1763 if (st == ADMMOREDATA) {
1764 buf_size = buf_size + (unsigned long) (0.2 * buf_size);
1769 ERR_ST_EXT("bos_LogGet", st);
1771 printf("Log file:\n%s", buf);
1778 bos_ServerClose(bos_server, 0);
1784 DoBosAuthSet(struct cmd_syndesc *as, char *arock)
1786 typedef enum {SERVER, REQUIREAUTH, DISABLEAUTH}
1787 DoBosAuthSet_parm_t;
1788 afs_status_t st = 0;
1789 void *bos_server = NULL;
1794 if (as->parms[SERVER].items) {
1795 if (!bos_ServerOpen(cellHandle,
1796 as->parms[SERVER].items->data,
1799 ERR_ST_EXT("bos_ServerOpen", st);
1803 if (as->parms[REQUIREAUTH].items) {
1804 auth = BOS_AUTH_REQUIRED;
1808 if (as->parms[DISABLEAUTH].items) {
1813 if ((have_req == 0) && (have_dis == 0)) {
1814 ERR_EXT("must specify either requireauth or disableauth");
1817 if ((have_req == 1) && (have_dis == 1)) {
1818 ERR_EXT("must specify either requireauth or disableauth, not both");
1821 if (!bos_AuthSet(bos_server, auth, &st)) {
1822 ERR_ST_EXT("bos_AuthSet", st);
1825 bos_ServerClose(bos_server, 0);
1831 DoBosCommandExecute(struct cmd_syndesc *as, char *arock)
1833 typedef enum {SERVER, COMMAND}
1834 DoBosCommandExecute_parm_t;
1835 afs_status_t st = 0;
1836 void *bos_server = NULL;
1837 const char *command;
1839 if (as->parms[SERVER].items) {
1840 if (!bos_ServerOpen(cellHandle,
1841 as->parms[SERVER].items->data,
1844 ERR_ST_EXT("bos_ServerOpen", st);
1848 if (as->parms[COMMAND].items) {
1849 command = as->parms[COMMAND].items->data;
1852 if (!bos_CommandExecute(bos_server, command, &st)) {
1853 ERR_ST_EXT("bos_CommandExecute", st);
1856 bos_ServerClose(bos_server, 0);
1862 DoBosSalvage(struct cmd_syndesc *as, char *arock)
1864 typedef enum {SERVER, PARTITION, VOLUME, NUMSALVAGERS, TMPDIR, LOGFILE,
1865 FORCE, NOWRITE, INODES, ROOTINODES, SALVAGEDIRS, BLOCKREADS}
1866 DoBosSalvage_parm_t;
1867 afs_status_t st = 0;
1868 void *bos_server = NULL;
1869 const char *partition = NULL;
1870 const char *volume = NULL;
1871 int num_salvagers = 1;
1872 const char *tmp_dir = NULL;
1873 const char *log_file = NULL;
1874 vos_force_t force = VOS_NORMAL;
1875 bos_SalvageDamagedVolumes_t no_write = BOS_SALVAGE_DAMAGED_VOLUMES;
1876 bos_WriteInodes_t inodes = BOS_SALVAGE_WRITE_INODES;
1877 bos_WriteRootInodes_t root_inodes = BOS_SALVAGE_WRITE_ROOT_INODES;
1878 bos_ForceDirectory_t salvage_dirs = BOS_SALVAGE_DONT_FORCE_DIRECTORIES;
1879 bos_ForceBlockRead_t block_reads = BOS_SALVAGE_DONT_FORCE_BLOCK_READS;
1882 if (as->parms[SERVER].items) {
1883 if (!bos_ServerOpen(cellHandle,
1884 as->parms[SERVER].items->data,
1887 ERR_ST_EXT("bos_ServerOpen", st);
1891 if (as->parms[PARTITION].items) {
1892 partition = as->parms[PARTITION].items->data;
1895 if (as->parms[VOLUME].items) {
1896 volume = as->parms[VOLUME].items->data;
1899 if (as->parms[NUMSALVAGERS].items) {
1900 num_salvagers = GetIntFromString(as->parms[NUMSALVAGERS].items->data,
1901 "invalid number of salvagers");
1904 if (as->parms[TMPDIR].items) {
1905 tmp_dir = as->parms[TMPDIR].items->data;
1908 if (as->parms[LOGFILE].items) {
1909 log_file = as->parms[LOGFILE].items->data;
1912 if (as->parms[FORCE].items) {
1916 if (as->parms[NOWRITE].items) {
1917 no_write = BOS_DONT_SALVAGE_DAMAGED_VOLUMES;
1920 if (as->parms[INODES].items) {
1921 inodes = BOS_SALVAGE_DONT_WRITE_INODES;
1924 if (as->parms[ROOTINODES].items) {
1925 root_inodes = BOS_SALVAGE_DONT_WRITE_ROOT_INODES;
1928 if (as->parms[SALVAGEDIRS].items) {
1929 salvage_dirs = BOS_SALVAGE_FORCE_DIRECTORIES;
1932 if (as->parms[BLOCKREADS].items) {
1933 block_reads = BOS_SALVAGE_FORCE_BLOCK_READS;
1936 if (!bos_Salvage(cellHandle,
1950 ERR_ST_EXT("bos_Salvage", st);
1953 bos_ServerClose(bos_server, 0);
1959 Print_afs_RPCStatsState_p(
1960 afs_RPCStatsState_p state,
1963 printf("%sThe rpc stats state is: ", prefix);
1965 case AFS_RPC_STATS_DISABLED:
1966 printf("disabled\n");
1968 case AFS_RPC_STATS_ENABLED:
1969 printf("enabled\n");
1975 SetupBosAdminCmd(void)
1977 struct cmd_syndesc *ts;
1979 ts = cmd_CreateSyntax("BosProcessCreate",
1980 DoBosProcessCreate, 0,
1981 "create a new bos process");
1986 "server where process will be created");
1991 "the name of the process");
1996 "path to the process binary");
2001 "this is a cron process");
2006 "the time when the process will be run");
2011 "path to notifier binary that is run when process terminates");
2012 SetupCommonCmdArgs(ts);
2014 ts = cmd_CreateSyntax("BosFSProcessCreate",
2015 DoBosFSProcessCreate,
2017 "create a fs bos process");
2022 "server where process will be created");
2027 "the name of the process");
2032 "path to the fileserver binary");
2037 "path to the volserver binary");
2042 "path to the salvager binary");
2047 "path to notifier binary that is run when process terminates");
2048 SetupCommonCmdArgs(ts);
2050 ts = cmd_CreateSyntax("BosProcessDelete",
2053 "delete a bos process");
2058 "server where process will be deleted");
2063 "the name of the process");
2064 SetupCommonCmdArgs(ts);
2066 ts = cmd_CreateSyntax("BosProcessExecutionStateGet",
2067 DoBosProcessExecutionStateGet,
2069 "get the process execution state of a process");
2074 "server where process exists");
2079 "the name of the process");
2080 SetupCommonCmdArgs(ts);
2082 ts = cmd_CreateSyntax("BosProcessExecutionStateSet",
2083 DoBosProcessExecutionStateSet,
2085 "set the process execution state of a process");
2090 "server where process exists");
2095 "the name of the process");
2100 "set the process state to stopped");
2105 "set the process state to running");
2106 SetupCommonCmdArgs(ts);
2108 ts = cmd_CreateSyntax("BosProcessExecutionStateSetTemporary",
2109 DoBosProcessExecutionStateSetTemporary,
2111 "set the process execution state "
2112 "of a process temporarily");
2117 "server where process exists");
2122 "the name of the process");
2127 "set the process state to stopped");
2132 "set the process state to running");
2133 SetupCommonCmdArgs(ts);
2135 ts = cmd_CreateSyntax("BosProcessNameList",
2136 DoBosProcessNameList,
2138 "list the names of all processes at a bos server");
2144 SetupCommonCmdArgs(ts);
2146 ts = cmd_CreateSyntax("BosProcessInfoGet",
2147 DoBosProcessInfoGet,
2149 "get information about a process");
2154 "server where process exists");
2159 "the name of the process");
2160 SetupCommonCmdArgs(ts);
2162 ts = cmd_CreateSyntax("BosProcessParameterList",
2163 DoBosProcessParameterList,
2165 "list the parameters of a process");
2170 "server where process exists");
2175 "the name of the process");
2176 SetupCommonCmdArgs(ts);
2178 ts = cmd_CreateSyntax("BosProcessNotifierGet",
2179 DoBosProcessNotifierGet,
2181 "get the notifier for a process");
2186 "server where process exists");
2191 "the name of the process");
2192 SetupCommonCmdArgs(ts);
2194 ts = cmd_CreateSyntax("BosProcessRestart",
2195 DoBosProcessRestart,
2197 "restart a process");
2202 "server where process exists");
2207 "the name of the process");
2208 SetupCommonCmdArgs(ts);
2210 ts = cmd_CreateSyntax("BosProcessAllStop",
2211 DoBosProcessAllStop,
2213 "stop all processes at a bos server");
2218 "server where processes exists");
2219 SetupCommonCmdArgs(ts);
2221 ts = cmd_CreateSyntax("BosProcessAllWaitStop",
2222 DoBosProcessAllWaitStop,
2224 "stop all processes at a bos server and block "
2225 "until they all exit");
2230 "server where processes exists");
2231 SetupCommonCmdArgs(ts);
2233 ts = cmd_CreateSyntax("BosProcessAllWaitTransition",
2234 DoBosProcessAllWaitTransition,
2236 "wait until all processes have transitioned to "
2237 "their desired state");
2242 "server where processes exists");
2243 SetupCommonCmdArgs(ts);
2245 ts = cmd_CreateSyntax("BosProcessAllStopAndRestart",
2246 DoBosProcessAllStopAndRestart,
2248 "stop all processes at a bos server and "
2249 "then restart them");
2254 "server where processes exists");
2259 "include the bos server in the processes to be restarted");
2260 SetupCommonCmdArgs(ts);
2262 ts = cmd_CreateSyntax("BosAdminCreate",
2265 "create an admin user at a bos server");
2270 "server where admin will be created");
2275 "the name of the administrator to add");
2276 SetupCommonCmdArgs(ts);
2278 ts = cmd_CreateSyntax("BosAdminDelete",
2281 "delete an admin user at a bos server");
2286 "server where admin will be deleted");
2291 "the name of the administrator to delete");
2292 SetupCommonCmdArgs(ts);
2294 ts = cmd_CreateSyntax("BosAdminList",
2297 "list all admin users at a bos server");
2302 "server where admins will be listed");
2303 SetupCommonCmdArgs(ts);
2305 ts = cmd_CreateSyntax("BosKeyCreate",
2308 "create a key at a bos server");
2313 "server where key will be created");
2318 "version number of new key");
2323 "new encryption key");
2324 SetupCommonCmdArgs(ts);
2326 ts = cmd_CreateSyntax("BosKeyDelete",
2329 "delete a key at a bos server");
2334 "server where key will be deleted");
2339 "version number of the key");
2340 SetupCommonCmdArgs(ts);
2342 ts = cmd_CreateSyntax("BosKeyList",
2345 "list keys at a bos server");
2350 "server where keys exist");
2351 SetupCommonCmdArgs(ts);
2353 ts = cmd_CreateSyntax("BosCellSet",
2356 "set the cell at a bos server");
2361 "server to modify");
2367 SetupCommonCmdArgs(ts);
2369 ts = cmd_CreateSyntax("BosCellGet",
2372 "get the cell at a bos server");
2378 SetupCommonCmdArgs(ts);
2380 ts = cmd_CreateSyntax("BosHostCreate",
2383 "add a host entry to the server CellServDB");
2388 "server to modify");
2394 SetupCommonCmdArgs(ts);
2396 ts = cmd_CreateSyntax("BosHostDelete",
2399 "delete a host entry from the server CellServDB");
2404 "server to modify");
2410 SetupCommonCmdArgs(ts);
2412 ts = cmd_CreateSyntax("BosHostList",
2415 "list all host entries from the server CellServDB");
2421 SetupCommonCmdArgs(ts);
2423 ts = cmd_CreateSyntax("BosExecutableCreate",
2424 DoBosExecutableCreate,
2426 "create a new binary at a bos server");
2431 "server to modify");
2436 "path to the binary to create");
2441 "path where the binary will be stored");
2442 SetupCommonCmdArgs(ts);
2444 ts = cmd_CreateSyntax("BosExecutableRevert",
2445 DoBosExecutableRevert,
2447 "revert a binary at a bos server");
2452 "server to modify");
2457 "path to the binary to revert");
2458 SetupCommonCmdArgs(ts);
2460 ts = cmd_CreateSyntax("BosExecutableTimestampGet",
2461 DoBosExecutableTimestampGet,
2463 "get the timestamps for a binary at bos server");
2473 "path to the binary to revert");
2474 SetupCommonCmdArgs(ts);
2476 ts = cmd_CreateSyntax("BosExecutablePrune",
2477 DoBosExecutablePrune,
2479 "prune various files at bos server");
2484 "server to modify");
2489 "prune .old files");
2494 "prune .bak files");
2499 "prune core files");
2500 SetupCommonCmdArgs(ts);
2502 ts = cmd_CreateSyntax("BosExecutableRestartTimeSet",
2503 DoBosExecutableRestartTimeSet,
2505 "set the restart times at a bos server");
2510 "server to modify");
2515 "set daily restart time");
2520 "set weekly restart time");
2525 "the new restart time");
2526 SetupCommonCmdArgs(ts);
2528 ts = cmd_CreateSyntax("BosExecutableRestartTimeGet",
2529 DoBosExecutableRestartTimeGet,
2531 "get the restart times at a bos server");
2541 "get daily restart time");
2546 "get weekly restart time");
2547 SetupCommonCmdArgs(ts);
2549 ts = cmd_CreateSyntax("BosLogGet",
2552 "get a log file from the bos server");
2562 "path to the log file to retrieve");
2563 SetupCommonCmdArgs(ts);
2565 ts = cmd_CreateSyntax("BosAuthSet",
2568 "set the authorization level at a bos server");
2573 "server to modify");
2578 "require authorization");
2583 "don't require authorization");
2584 SetupCommonCmdArgs(ts);
2586 ts = cmd_CreateSyntax("BosCommandExecute",
2587 DoBosCommandExecute,
2589 "execute a command at a bos server");
2594 "server where command will execute");
2599 "command to execute");
2600 SetupCommonCmdArgs(ts);
2602 ts = cmd_CreateSyntax("BosSalvage",
2605 "execute a salvage command at a bos server");
2610 "server where salvager will execute");
2615 "partition to salvage");
2620 "volume to salvage");
2625 "number of salvagers to run in parallel");
2630 "directory to place temporary files");
2635 "file where salvager log will be written");
2640 "run salvager -force");
2645 "run salvager -nowrite");
2650 "run salvager -inodes");
2655 "run salvager -rootinodes");
2660 "run salvager -salvagedirs");
2665 "run salvager -blockreads");
2666 SetupCommonCmdArgs(ts);