#include "findlib/find.h"
/* Imported variables */
+extern struct s_jl joblevels[];
+extern struct s_jt jobtypes[];
/* Imported functions */
extern void do_messages(UAContext *ua, const char *cmd);
static bool locationscmd(UAContext *ua, const char *cmd);
static bool mediacmd(UAContext *ua, const char *cmd);
static bool aopcmd(UAContext *ua, const char *cmd);
+static bool catalogscmd(UAContext *ua, const char *cmd);
static bool dot_bvfs_lsdirs(UAContext *ua, const char *cmd);
static bool dot_bvfs_lsfiles(UAContext *ua, const char *cmd);
{ NT_(".api"), api_cmd, NULL, false},
{ NT_(".backups"), backupscmd, NULL, false},
{ NT_(".clients"), clientscmd, NULL, true},
+ { NT_(".catalogs"), catalogscmd, NULL, false},
{ NT_(".defaults"), defaultscmd, NULL, false},
{ NT_(".die"), admin_cmds, NULL, false},
{ NT_(".dump"), admin_cmds, NULL, false},
}
}
if (!found) {
- pm_strcat(user->msg, _(": is an invalid command.\n"));
- ua->error_msg("%s", user->msg);
+ ua->error_msg("%s%s", ua->argk[0], _(": is an invalid command.\n"));
ok = false;
}
return ok;
return true;
}
+static bool catalogscmd(UAContext *ua, const char *cmd)
+{
+ CAT *cat;
+ LockRes();
+ foreach_res(cat, R_CATALOG) {
+ if (acl_access_ok(ua, Catalog_ACL, cat->name())) {
+ ua->send_msg("%s\n", cat->name());
+ }
+ }
+ UnlockRes();
+ return true;
+}
+
static bool clientscmd(UAContext *ua, const char *cmd)
{
CLIENT *client;
static bool levelscmd(UAContext *ua, const char *cmd)
{
- ua->send_msg("Incremental\n");
- ua->send_msg("Full\n");
- ua->send_msg("Differential\n");
- ua->send_msg("VirtualFull\n");
- ua->send_msg("Catalog\n");
- ua->send_msg("InitCatalog\n");
- ua->send_msg("VolumeToCatalog\n");
- ua->send_msg("Base\n");
+ int i;
+ /* Note some levels are blank, which means none is needed */
+ if (ua->argc == 1) {
+ for (i=0; joblevels[i].level_name; i++) {
+ if (joblevels[i].level_name[0] != ' ') {
+ ua->send_msg("%s\n", joblevels[i].level_name);
+ }
+ }
+ } else if (ua->argc == 2) {
+ int jobtype = 0;
+ /* Assume that first argument is the Job Type */
+ for (i=0; jobtypes[i].type_name; i++) {
+ if (strcasecmp(ua->argk[1], jobtypes[i].type_name) == 0) {
+ jobtype = jobtypes[i].job_type;
+ break;
+ }
+ }
+ for (i=0; joblevels[i].level_name; i++) {
+ if ((joblevels[i].job_type == jobtype) && (joblevels[i].level_name[0] != ' ')) {
+ ua->send_msg("%s\n", joblevels[i].level_name);
+ }
+ }
+ }
+
return true;
}