afs_int32 SBOZO_Restart(struct rx_call *acall, char *ainstance) { struct bnode *tb; afs_int32 code; char caller[MAXKTCNAMELEN]; if (!afsconf_SuperUser(bozo_confdir, acall, caller)) { code = BZACCESS; goto fail; } if (DoLogging) bozo_Log("%s is executing Restart '%s'\n", caller, ainstance); tb = bnode_FindInstance(ainstance); if (!tb) { code = BZNOENT; goto fail; } bnode_Hold(tb); bnode_SetStat(tb, BSTAT_SHUTDOWN); code = bnode_WaitStatus(tb, BSTAT_SHUTDOWN); /* this can fail */ bnode_ResetErrorCount(tb); bnode_SetStat(tb, BSTAT_NORMAL); bnode_Release(tb); fail: osi_auditU(acall, BOS_RestartEvent, code, AUD_STR, ainstance, AUD_END); return code; }
afs_int32 SBOZO_GetInstanceStrings(struct rx_call *acall, char *abnodeName, char **as1, char **as2, char **as3, char **as4) { struct bnode *tb; *as2 = malloc(1); **as2 = 0; *as3 = malloc(1); **as3 = 0; *as4 = malloc(1); **as4 = 0; tb = bnode_FindInstance(abnodeName); if (!tb) goto fail; /* now, return the appropriate error string, if any */ if (tb->lastErrorName) { *as1 = strdup(tb->lastErrorName); } else { *as1 = malloc(1); **as1 = 0; } return 0; fail: *as1 = malloc(1); **as1 = 0; return BZNOENT; }
afs_int32 SBOZO_GetInstanceParm(struct rx_call *acall, char *ainstance, afs_int32 anum, char **aparm) { struct bnode *tb; char *tp; afs_int32 code; tp = malloc(BOZO_BSSIZE); *aparm = tp; *tp = 0; /* null-terminate string in error case */ tb = bnode_FindInstance(ainstance); if (!tb) return BZNOENT; bnode_Hold(tb); if (anum == 999) { if (tb->notifier) { memcpy(tp, tb->notifier, strlen(tb->notifier) + 1); code = 0; } else code = BZNOENT; /* XXXXX */ } else code = bnode_GetParm(tb, anum, tp, BOZO_BSSIZE); bnode_Release(tb); /* Not Currently Audited */ return code; }
afs_int32 SBOZO_GetInstanceInfo(IN struct rx_call *acall, IN char *ainstance, OUT char **atype, OUT struct bozo_status *astatus) { struct bnode *tb; tb = bnode_FindInstance(ainstance); *atype = malloc(BOZO_BSSIZE); **atype = 0; if (!tb) return BZNOENT; if (tb->type) strcpy(*atype, tb->type->name); else (*atype)[0] = 0; /* null string */ memset(astatus, 0, sizeof(struct bozo_status)); /* good defaults */ astatus->goal = tb->goal; astatus->fileGoal = tb->fileGoal; astatus->procStartTime = tb->procStartTime; astatus->procStarts = tb->procStarts; astatus->lastAnyExit = tb->lastAnyExit; astatus->lastErrorExit = tb->lastErrorExit; astatus->errorCode = tb->errorCode; astatus->errorSignal = tb->errorSignal; if (tb->flags & BNODE_ERRORSTOP) astatus->flags |= BOZO_ERRORSTOP; if (bnode_HasCore(tb)) astatus->flags |= BOZO_HASCORE; if (!DirAccessOK()) astatus->flags |= BOZO_BADDIRACCESS; return 0; }
afs_int32 SBOZO_GetStatus(struct rx_call *acall, char *ainstance, afs_int32 *astat, char **astatDescr) { struct bnode *tb; afs_int32 code; tb = bnode_FindInstance(ainstance); if (!tb) { code = BZNOENT; goto fail; } bnode_Hold(tb); code = bnode_GetStat(tb, astat); if (code) { bnode_Release(tb); goto fail; } *astatDescr = malloc(BOZO_BSSIZE); code = bnode_GetString(tb, *astatDescr, BOZO_BSSIZE); bnode_Release(tb); if (code) (*astatDescr)[0] = 0; /* null string means no further info */ return 0; fail: *astatDescr = malloc(1); **astatDescr = 0; return code; }
afs_int32 SBOZO_SetStatus(struct rx_call *acall, char *ainstance, afs_int32 astatus) { struct bnode *tb; afs_int32 code; char caller[MAXKTCNAMELEN]; if (!afsconf_SuperUser(bozo_confdir, acall, caller)) { code = BZACCESS; goto fail; } if (DoLogging) bozo_Log("%s is executing SetStatus '%s' (status = %d)\n", caller, ainstance, astatus); tb = bnode_FindInstance(ainstance); if (!tb) { code = BZNOENT; goto fail; } bnode_Hold(tb); bnode_SetFileGoal(tb, astatus); code = bnode_SetStat(tb, astatus); bnode_Release(tb); fail: osi_auditU(acall, BOS_SetStatusEvent, code, AUD_STR, ainstance, AUD_END); return code; }
int bnode_DeleteName(char *ainstance) { struct bnode *tb; tb = bnode_FindInstance(ainstance); if (!tb) return BZNOENT; return bnode_Delete(tb); }
afs_int32 bnode_Create(char *atype, char *ainstance, struct bnode ** abp, char *ap1, char *ap2, char *ap3, char *ap4, char *ap5, char *notifier, int fileGoal, int rewritefile) { struct bnode_type *type; struct bnode *tb; char *notifierpath = NULL; struct stat tstat; if (bnode_FindInstance(ainstance)) return BZEXISTS; type = FindType(atype); if (!type) return BZBADTYPE; if (notifier && strcmp(notifier, NONOTIFIER)) { /* construct local path from canonical (wire-format) path */ if (ConstructLocalBinPath(notifier, ¬ifierpath)) { bozo_Log("BNODE-Create: Notifier program path invalid '%s'\n", notifier); return BZNOCREATE; } if (stat(notifierpath, &tstat)) { bozo_Log("BNODE-Create: Notifier program '%s' not found\n", notifierpath); free(notifierpath); return BZNOCREATE; } } tb = (*type->ops->create) (ainstance, ap1, ap2, ap3, ap4, ap5); if (!tb) { free(notifierpath); return BZNOCREATE; } tb->notifier = notifierpath; *abp = tb; tb->type = type; /* The fs_create above calls bnode_InitBnode() which always sets the ** fileGoal to BSTAT_NORMAL .... overwrite it with whatever is passed into ** this function as a parameter... */ tb->fileGoal = fileGoal; bnode_SetStat(tb, tb->goal); /* nudge it once */ if (rewritefile != 0) WriteBozoFile(0); return 0; }