X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_dotcmds.c;h=96fc81cf9973b5957f735e56ab77e54bb96fba3f;hb=cc4be3a7c0b43ad093d008707277de22ddffc4a3;hp=f03ea1eadc839d980237e6ffbba75b16ad3c2038;hpb=627eebe04f0d971b9d553d066d600dc589bd5636;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_dotcmds.c b/bacula/src/dird/ua_dotcmds.c index f03ea1eadc..96fc81cf99 100644 --- a/bacula/src/dird/ua_dotcmds.c +++ b/bacula/src/dird/ua_dotcmds.c @@ -42,7 +42,7 @@ extern char my_name[]; /* Imported functions */ extern int qmessagescmd(UAContext *ua, char *cmd); -extern int quitcmd(UAContext *ua, char *cmd); +extern int quit_cmd(UAContext *ua, char *cmd); /* Forward referenced functions */ static int diecmd(UAContext *ua, char *cmd); @@ -50,6 +50,11 @@ static int jobscmd(UAContext *ua, char *cmd); static int filesetscmd(UAContext *ua, char *cmd); static int clientscmd(UAContext *ua, char *cmd); static int msgscmd(UAContext *ua, char *cmd); +static int poolscmd(UAContext *ua, char *cmd); +static int storagecmd(UAContext *ua, char *cmd); +static int defaultscmd(UAContext *ua, char *cmd); +static int typescmd(UAContext *ua, char *cmd); +static int levelscmd(UAContext *ua, char *cmd); struct cmdstruct { char *key; int (*func)(UAContext *ua, char *cmd); char *help; }; static struct cmdstruct commands[] = { @@ -58,9 +63,14 @@ static struct cmdstruct commands[] = { { N_(".filesets"), filesetscmd, NULL}, { N_(".clients"), clientscmd, NULL}, { N_(".msgs"), msgscmd, NULL}, + { N_(".pools"), poolscmd, NULL}, + { N_(".types"), typescmd, NULL}, + { N_(".levels"), levelscmd, NULL}, + { N_(".storage"), storagecmd, NULL}, + { N_(".defaults"), defaultscmd, NULL}, { N_(".messages"), qmessagescmd, NULL}, - { N_(".quit"), quitcmd, NULL}, - { N_(".exit"), quitcmd, NULL} + { N_(".quit"), quit_cmd, NULL}, + { N_(".exit"), quit_cmd, NULL} }; #define comsize (sizeof(commands)/sizeof(struct cmdstruct)) @@ -69,14 +79,13 @@ static struct cmdstruct commands[] = { */ int do_a_dot_command(UAContext *ua, char *cmd) { - unsigned int i; + int i; int len, stat; - int found; + bool found = false; - found = 0; stat = 1; - Dmsg1(200, "Dot command: %s\n", ua->UA_sock->msg); + Dmsg1(400, "Dot command: %s\n", ua->UA_sock->msg); if (ua->argc == 0) { return 1; } @@ -85,15 +94,15 @@ int do_a_dot_command(UAContext *ua, char *cmd) if (len == 1) { return 1; /* no op */ } - for (i=0; iargk[0], _(commands[i].key), len) == 0) { stat = (*commands[i].func)(ua, cmd); /* go execute command */ - found = 1; + found = true; break; } } if (!found) { - strcat(ua->UA_sock->msg, _(": is an illegal command\n")); + pm_strcat(&ua->UA_sock->msg, _(": is an illegal command\n")); ua->UA_sock->msglen = strlen(ua->UA_sock->msg); bnet_send(ua->UA_sock); } @@ -108,7 +117,9 @@ static int diecmd(UAContext *ua, char *cmd) JCR *jcr = NULL; int a; + bsendmsg(ua, "The Director will segment fault.\n"); a = jcr->JobId; /* ref NULL pointer */ + jcr->JobId = 1000; /* another ref NULL pointer */ return 0; } @@ -155,3 +166,71 @@ static int msgscmd(UAContext *ua, char *cmd) UnlockRes(); return 1; } + +static int poolscmd(UAContext *ua, char *cmd) +{ + POOL *pool = NULL; + LockRes(); + while ( (pool = (POOL *)GetNextRes(R_POOL, (RES *)pool)) ) { + bsendmsg(ua, "%s\n", pool->hdr.name); + } + UnlockRes(); + return 1; +} + +static int storagecmd(UAContext *ua, char *cmd) +{ + STORE *store = NULL; + LockRes(); + while ( (store = (STORE *)GetNextRes(R_STORAGE, (RES *)store)) ) { + bsendmsg(ua, "%s\n", store->hdr.name); + } + UnlockRes(); + return 1; +} + + +static int typescmd(UAContext *ua, char *cmd) +{ + bsendmsg(ua, "Backup\n"); + bsendmsg(ua, "Restore\n"); + bsendmsg(ua, "Admin\n"); + bsendmsg(ua, "Verify\n"); + return 1; +} + +static int levelscmd(UAContext *ua, char *cmd) +{ + bsendmsg(ua, "Incremental\n"); + bsendmsg(ua, "Full\n"); + bsendmsg(ua, "Differential\n"); + bsendmsg(ua, "Catalog\n"); + bsendmsg(ua, "InitCatalog\n"); + bsendmsg(ua, "VolumeToCatalog\n"); + return 1; +} + + + +/* + * Return default values for a job + */ +static int defaultscmd(UAContext *ua, char *cmd) +{ + JOB *job; + if (ua->argc == 2 && strcmp(ua->argk[1], "job") == 0) { + job = (JOB *)GetResWithName(R_JOB, ua->argv[1]); + if (job) { + bsendmsg(ua, "job=%s", job->hdr.name); + bsendmsg(ua, "pool=%s", job->pool->hdr.name); + bsendmsg(ua, "messages=%s", job->messages->hdr.name); + bsendmsg(ua, "client=%s", job->client->hdr.name); + bsendmsg(ua, "storage=%s", job->storage->hdr.name); + bsendmsg(ua, "where=%s", job->RestoreWhere?job->RestoreWhere:""); + bsendmsg(ua, "level=%s", level_to_str(job->level)); + bsendmsg(ua, "type=%s", job_type_to_str(job->JobType)); + bsendmsg(ua, "fileset=%s", job->fileset->hdr.name); + } + } + return 1; +}