]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_cmds.c
Fix typo
[bacula/bacula] / bacula / src / dird / ua_cmds.c
index 350631b88d52304f75a5c03a78e1bb15a2ba0d27..e9fb8868e72922ed2d02aaceb4f361c942ac962a 100644 (file)
@@ -39,6 +39,7 @@ extern struct s_res resources[];
 extern char my_name[];
 extern jobq_t job_queue;             /* job queue */
 
+
 extern char *list_pool;
 
 /* Imported functions */
@@ -47,7 +48,8 @@ extern int list_cmd(UAContext *ua, char *cmd);
 extern int llist_cmd(UAContext *ua, char *cmd);
 extern int show_cmd(UAContext *ua, char *cmd);
 extern int messagescmd(UAContext *ua, char *cmd);
-extern int autodisplaycmd(UAContext *ua, char *cmd);
+extern int autodisplay_cmd(UAContext *ua, char *cmd);
+extern int gui_cmd(UAContext *ua, char *cmd);
 extern int sqlquerycmd(UAContext *ua, char *cmd);
 extern int querycmd(UAContext *ua, char *cmd);
 extern int run_cmd(UAContext *ua, char *cmd);
@@ -64,6 +66,7 @@ static int add_cmd(UAContext *ua, char *cmd);
 static int create_cmd(UAContext *ua, char *cmd); 
 static int cancel_cmd(UAContext *ua, char *cmd); 
 static int setdebug_cmd(UAContext *ua, char *cmd);
+static int trace_cmd(UAContext *ua, char *cmd);
 static int var_cmd(UAContext *ua, char *cmd);
 static int estimate_cmd(UAContext *ua, char *cmd);
 static int help_cmd(UAContext *ua, char *cmd);
@@ -71,6 +74,7 @@ static int delete_cmd(UAContext *ua, char *cmd);
 static int use_cmd(UAContext *ua, char *cmd),  unmount_cmd(UAContext *ua, char *cmd);
 static int version_cmd(UAContext *ua, char *cmd), automount_cmd(UAContext *ua, char *cmd);
 static int time_cmd(UAContext *ua, char *cmd);
+static int reload_cmd(UAContext *ua, char *cmd);
 static int update_volume(UAContext *ua);
 static int update_pool(UAContext *ua);
 static int delete_volume(UAContext *ua);
@@ -88,13 +92,14 @@ int quit_cmd(UAContext *ua, char *cmd);
 struct cmdstruct { char *key; int (*func)(UAContext *ua, char *cmd); char *help; }; 
 static struct cmdstruct commands[] = {
  { N_("add"),        add_cmd,         _("add media to a pool")},
- { N_("autodisplay"), autodisplaycmd, _("autodisplay [on/off] -- console messages")},
+ { N_("autodisplay"), autodisplay_cmd, _("autodisplay [on/off] -- console messages")},
  { N_("automount"),   automount_cmd,  _("automount [on/off] -- after label")},
  { N_("cancel"),     cancel_cmd,    _("cancel job=nnn -- cancel a job")},
  { N_("create"),     create_cmd,    _("create DB Pool from resource")},  
  { N_("delete"),     delete_cmd,    _("delete [pool=<pool-name> | media volume=<volume-name>]")},    
  { N_("estimate"),   estimate_cmd,  _("performs FileSet estimate, listing gives full listing")},
  { N_("exit"),       quit_cmd,      _("exit = quit")},
+ { N_("gui"),        gui_cmd,       _("gui [on/off] -- non-interactive gui mode")},
  { N_("help"),       help_cmd,      _("print this command")},
  { N_("list"),       list_cmd,      _("list [pools | jobs | jobtotals | media <pool> | files jobid=<nn>]; from catalog")},
  { N_("label"),      label_cmd,     _("label a tape")},
@@ -108,6 +113,7 @@ static struct cmdstruct commands[] = {
  { N_("restore"),    restore_cmd,   _("restore files")},
  { N_("relabel"),    relabel_cmd,   _("relabel a tape")},
  { N_("release"),    release_cmd,   _("release <storage-name>")},
+ { N_("reload"),     reload_cmd,    _("reload conf file")},
  { N_("run"),        run_cmd,       _("run <job-name>")},
  { N_("status"),     status_cmd,    _("status [storage | client]=<name>")},
  { N_("setdebug"),   setdebug_cmd,  _("sets debug level")},
@@ -115,6 +121,7 @@ static struct cmdstruct commands[] = {
  { N_("show"),       show_cmd,      _("show (resource records) [jobs | pools | ... | all]")},
  { N_("sqlquery"),   sqlquerycmd,   _("use SQL to query catalog")}, 
  { N_("time"),       time_cmd,      _("print current time")},
+ { N_("trace"),      trace_cmd,     _("turn on/off trace to file")},
  { N_("unmount"),    unmount_cmd,   _("unmount <storage-name>")},
  { N_("update"),     update_cmd,    _("update Volume or Pool")},
  { N_("use"),        use_cmd,       _("use catalog xxx")},
@@ -388,13 +395,13 @@ static int cancel_cmd(UAContext *ua, char *cmd)
    if (!jcr) {
       /* Count Jobs running */
       lock_jcr_chain();
-      for (jcr=NULL; (jcr=get_next_jcr(jcr)); njobs++) {
+      foreach_jcr(jcr) {
         if (jcr->JobId == 0) {      /* this is us */
            free_locked_jcr(jcr);
-           njobs--;
            continue;
         }
         free_locked_jcr(jcr);
+        njobs++;
       }
       unlock_jcr_chain();
 
@@ -404,7 +411,7 @@ static int cancel_cmd(UAContext *ua, char *cmd)
       }
       start_prompt(ua, _("Select Job:\n"));
       lock_jcr_chain();
-      for (jcr=NULL; (jcr=get_next_jcr(jcr)); ) {
+      foreach_jcr(jcr) {
         if (jcr->JobId == 0) {      /* this is us */
            free_locked_jcr(jcr);
            continue;
@@ -554,7 +561,7 @@ static int create_cmd(UAContext *ua, char *cmd)
 static int setip_cmd(UAContext *ua, char *cmd) 
 {
    CLIENT *client;
-   if (!ua->cons && acl_access_ok(ua, Client_ACL, ua->cons->hdr.name)) {
+   if (!ua->cons || !acl_access_ok(ua, Client_ACL, ua->cons->hdr.name)) {
       bsendmsg(ua, _("Illegal command from this console.\n"));
       return 1;
    }
@@ -997,7 +1004,7 @@ static int update_volume(UAContext *ua)
         if (!db_update_media_record(ua->jcr, ua->db, &mr)) {
             bsendmsg(ua, _("Error updating media record Slot: ERR=%s"), db_strerror(ua->db));
         } else {
-            bsendmsg(ua, _("New InChanger flag is: %s\n"), mr.InChanger);
+            bsendmsg(ua, _("New InChanger flag is: %d\n"), mr.InChanger);
         }
         break;
 
@@ -1087,7 +1094,7 @@ static int update_pool(UAContext *ua)
 }
 
 
-static void do_storage_setdebug(UAContext *ua, STORE *store, int level)
+static void do_storage_setdebug(UAContext *ua, STORE *store, int level, int trace_flag)
 {
    BSOCK *sd;
 
@@ -1101,7 +1108,7 @@ static void do_storage_setdebug(UAContext *ua, STORE *store, int level)
    }
    Dmsg0(120, _("Connected to storage daemon\n"));
    sd = ua->jcr->store_bsock;
-   bnet_fsend(sd, "setdebug=%d\n", level);
+   bnet_fsend(sd, "setdebug=%d trace=%d\n", level, trace_flag);
    if (bnet_recv(sd) >= 0) {
       bsendmsg(ua, "%s", sd->msg);
    }
@@ -1111,7 +1118,7 @@ static void do_storage_setdebug(UAContext *ua, STORE *store, int level)
    return;  
 }
    
-static void do_client_setdebug(UAContext *ua, CLIENT *client, int level)
+static void do_client_setdebug(UAContext *ua, CLIENT *client, int level, int trace_flag)
 {
    BSOCK *fd;
 
@@ -1127,7 +1134,7 @@ static void do_client_setdebug(UAContext *ua, CLIENT *client, int level)
    }
    Dmsg0(120, "Connected to file daemon\n");
    fd = ua->jcr->file_bsock;
-   bnet_fsend(fd, "setdebug=%d\n", level);
+   bnet_fsend(fd, "setdebug=%d trace=%d\n", level, trace_flag);
    if (bnet_recv(fd) >= 0) {
       bsendmsg(ua, "%s", fd->msg);
    }
@@ -1138,7 +1145,7 @@ static void do_client_setdebug(UAContext *ua, CLIENT *client, int level)
 }
 
 
-static void do_all_setdebug(UAContext *ua, int level)
+static void do_all_setdebug(UAContext *ua, int level, int trace_flag)
 {
    STORE *store, **unique_store;
    CLIENT *client, **unique_client;
@@ -1175,7 +1182,7 @@ static void do_all_setdebug(UAContext *ua, int level)
 
    /* Call each unique Storage daemon */
    for (j=0; j<i; j++) {
-      do_storage_setdebug(ua, unique_store[j], level);
+      do_storage_setdebug(ua, unique_store[j], level, trace_flag);
    }
    free(unique_store);
 
@@ -1207,19 +1214,20 @@ static void do_all_setdebug(UAContext *ua, int level)
 
    /* Call each unique File daemon */
    for (j=0; j<i; j++) {
-      do_client_setdebug(ua, unique_client[j], level);
+      do_client_setdebug(ua, unique_client[j], level, trace_flag);
    }
    free(unique_client);
 }
 
 /*
- * setdebug level=nn all
+ * setdebug level=nn all trace=1/0
  */
 static int setdebug_cmd(UAContext *ua, char *cmd)
 {
    STORE *store;
    CLIENT *client;
    int level;
+   int trace_flag = -1;
    int i;
 
    if (!open_db(ua)) {
@@ -1239,15 +1247,25 @@ static int setdebug_cmd(UAContext *ua, char *cmd)
       level = ua->pint32_val;
    }
 
+   /* Look for trace flag. -1 => not change */
+   i = find_arg_with_value(ua, _("trace"));
+   if (i >= 0) {
+      trace_flag = atoi(ua->argv[i]);
+      if (trace_flag > 0) {
+        trace_flag = 1;
+      }
+   }
+
    /* General debug? */
    for (i=1; i<ua->argc; i++) {
       if (strcasecmp(ua->argk[i], _("all")) == 0) {
-        do_all_setdebug(ua, level);
+        do_all_setdebug(ua, level, trace_flag);
         return 1;
       }
       if (strcasecmp(ua->argk[i], _("dir")) == 0 ||
           strcasecmp(ua->argk[i], _("director")) == 0) {
         debug_level = level;
+        set_trace(trace_flag);
         return 1;
       }
       if (strcasecmp(ua->argk[i], _("client")) == 0 ||
@@ -1256,13 +1274,13 @@ static int setdebug_cmd(UAContext *ua, char *cmd)
         if (ua->argv[i]) {
            client = (CLIENT *)GetResWithName(R_CLIENT, ua->argv[i]);
            if (client) {
-              do_client_setdebug(ua, client, level);
+              do_client_setdebug(ua, client, level, trace_flag);
               return 1;
            }
         }
         client = select_client_resource(ua);   
         if (client) {
-           do_client_setdebug(ua, client, level);
+           do_client_setdebug(ua, client, level, trace_flag);
            return 1;
         }
       }
@@ -1274,13 +1292,13 @@ static int setdebug_cmd(UAContext *ua, char *cmd)
         if (ua->argv[i]) {
            store = (STORE *)GetResWithName(R_STORAGE, ua->argv[i]);
            if (store) {
-              do_storage_setdebug(ua, store, level);
+              do_storage_setdebug(ua, store, level, trace_flag);
               return 1;
            }
         }
         store = get_storage_resource(ua, 0);
         if (store) {
-           do_storage_setdebug(ua, store, level);
+           do_storage_setdebug(ua, store, level, trace_flag);
            return 1;
         }
       }
@@ -1297,21 +1315,22 @@ static int setdebug_cmd(UAContext *ua, char *cmd)
    switch(do_prompt(ua, "", _("Select daemon type to set debug level"), NULL, 0)) {
    case 0:                        /* Director */
       debug_level = level;
+      set_trace(trace_flag);
       break;
    case 1:
       store = get_storage_resource(ua, 0);
       if (store) {
-        do_storage_setdebug(ua, store, level);
+        do_storage_setdebug(ua, store, level, trace_flag);
       }
       break;
    case 2:
       client = select_client_resource(ua);
       if (client) {
-        do_client_setdebug(ua, client, level);
+        do_client_setdebug(ua, client, level, trace_flag);
       }
       break;
    case 3:
-      do_all_setdebug(ua, level);
+      do_all_setdebug(ua, level, trace_flag);
       break;
    default:
       break;
@@ -1319,6 +1338,27 @@ static int setdebug_cmd(UAContext *ua, char *cmd)
    return 1;
 }
 
+/*
+ * Turn debug tracing to file on/off
+ */
+static int trace_cmd(UAContext *ua, char *cmd)
+{
+   char *onoff;
+
+   if (ua->argc != 2) {
+      if (!get_cmd(ua, _("Turn on or off? "))) {
+           return 1;
+      }
+      onoff = ua->cmd;
+   } else {
+      onoff = ua->argk[1];
+   }
+
+   set_trace((strcasecmp(onoff, _("off")) == 0) ? false : true);
+   return 1; 
+
+}
+
 static int var_cmd(UAContext *ua, char *cmd)
 {
    POOLMEM *val = get_pool_memory(PM_FNAME);
@@ -1447,6 +1487,16 @@ static int time_cmd(UAContext *ua, char *cmd)
    return 1;
 }
 
+/*
+ * reload the conf file
+ */
+extern void reload_config(int sig);
+
+static int reload_cmd(UAContext *ua, char *cmd)
+{
+   reload_config(1);   
+}
+
 
 
 /*
@@ -1674,13 +1724,14 @@ int quit_cmd(UAContext *ua, char *cmd)
  */
 int wait_cmd(UAContext *ua, char *cmd) 
 {
+   JCR *jcr;
    bmicrosleep(0, 200000);           /* let job actually start */
-   for (int running=1; running; ) {
-      running = 0;
+   for (bool running=true; running; ) {
+      running = false;
       lock_jcr_chain();
-      for (JCR *jcr=NULL; (jcr=get_next_jcr(jcr)); ) {
+      foreach_jcr(jcr) {
         if (jcr->JobId != 0) {
-           running = 1;
+           running = true;
            free_locked_jcr(jcr);
            break;
         }