]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_cmds.c
Update manual for Win32 + ensure VolStatus values are permitted
[bacula/bacula] / bacula / src / dird / ua_cmds.c
index ec2cfc13ed2e5c639c697c6a4caca833590f9d58..fd27b201e6761f7e9e40eda7b1c9972ed189416d 100644 (file)
@@ -57,8 +57,8 @@ extern int retentioncmd(UAContext *ua, char *cmd);
 extern int prunecmd(UAContext *ua, char *cmd);
 extern int purgecmd(UAContext *ua, char *cmd);
 extern int restorecmd(UAContext *ua, char *cmd);
-extern int labelcmd(UAContext *ua, char *cmd);
-extern int relabelcmd(UAContext *ua, char *cmd);
+extern int label_cmd(UAContext *ua, char *cmd);
+extern int relabel_cmd(UAContext *ua, char *cmd);
 extern int update_slots(UAContext *ua);  /* ua_label.c */
 
 /* Forward referenced functions */
@@ -94,7 +94,7 @@ static struct cmdstruct commands[] = {
  { N_("estimate"),   estimate_cmd,  _("performs FileSet estimate debug=1 give full listing")},
  { N_("exit"),       quit_cmd,      _("exit = quit")},
  { N_("help"),       help_cmd,      _("print this command")},
- { N_("label"),      labelcmd,      _("label a tape")},
+ { N_("label"),      label_cmd,     _("label a tape")},
  { N_("list"),       listcmd,       _("list [pools | jobs | jobtotals | media <pool> | files job=<nn>]; from catalog")},
  { N_("llist"),      llistcmd,      _("full or long list like list command")},
  { N_("messages"),   messagescmd,   _("messages")},
@@ -103,7 +103,7 @@ static struct cmdstruct commands[] = {
  { N_("purge"),      purgecmd,      _("purge records from catalog")},
  { N_("query"),      querycmd,      _("query catalog")},
  { N_("quit"),       quit_cmd,      _("quit")},
- { N_("relabel"),    relabelcmd,    _("relabel a tape")},
+ { N_("relabel"),    relabel_cmd,   _("relabel a tape")},
  { N_("release"),    release_cmd,   _("release <storage-name>")},
  { N_("restore"),    restorecmd,    _("restore files")},
  { N_("run"),        runcmd,        _("run <job-name>")},
@@ -654,13 +654,35 @@ static int update_cmd(UAContext *ua, char *cmd)
 static void update_volstatus(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    POOLMEM *query = get_pool_memory(PM_MESSAGE);
-   bstrncpy(mr->VolStatus, val, sizeof(mr->VolStatus));
-   Mmsg(&query, "UPDATE Media SET VolStatus='%s' WHERE MediaId=%u",
-      mr->VolStatus, mr->MediaId);
-   if (!db_sql_query(ua->db, query, NULL, NULL)) {  
-      bsendmsg(ua, "%s", db_strerror(ua->db));
+   char *kw[] = {
+      "Append",
+      "Archive",
+      "Disabled",
+      "Full",
+      "Used", 
+      "Cleaning", 
+      "Read-Only",
+      NULL};
+   bool found = false;
+   int i;
+
+   for (i=0; kw[i]; i++) {
+      if (strcasecmp(val, kw[i]) == 0) {
+        found = true;
+        break;
+      }
+   }
+   if (!found) {
+      bsendmsg(ua, _("Invalid VolStatus specified: %s\n"), val);
    } else {
-      bsendmsg(ua, _("New Volume status is: %s\n"), mr->VolStatus);
+      bstrncpy(mr->VolStatus, kw[i], sizeof(mr->VolStatus));
+      Mmsg(&query, "UPDATE Media SET VolStatus='%s' WHERE MediaId=%u",
+        mr->VolStatus, mr->MediaId);
+      if (!db_sql_query(ua->db, query, NULL, NULL)) {  
+         bsendmsg(ua, "%s", db_strerror(ua->db));
+      } else {
+         bsendmsg(ua, _("New Volume status is: %s\n"), mr->VolStatus);
+      }
    }
    free_pool_memory(query);
 }
@@ -668,11 +690,12 @@ static void update_volstatus(UAContext *ua, char *val, MEDIA_DBR *mr)
 static void update_volretention(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    char ed1[50];
-   POOLMEM *query = get_pool_memory(PM_MESSAGE);
+   POOLMEM *query;
    if (!duration_to_utime(val, &mr->VolRetention)) {
-      bsendmsg(ua, _("Invalid retention period specified.\n"));
+      bsendmsg(ua, _("Invalid retention period specified: %s\n"), val);
       return;
    }
+   query = get_pool_memory(PM_MESSAGE);
    Mmsg(&query, "UPDATE Media SET VolRetention=%s WHERE MediaId=%u",
       edit_uint64(mr->VolRetention, ed1), mr->MediaId);
    if (!db_sql_query(ua->db, query, NULL, NULL)) {  
@@ -687,9 +710,10 @@ static void update_volretention(UAContext *ua, char *val, MEDIA_DBR *mr)
 static void update_voluseduration(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    char ed1[50];
-   POOLMEM *query = get_pool_memory(PM_MESSAGE);
+   POOLMEM *query;
+
    if (!duration_to_utime(val, &mr->VolUseDuration)) {
-      bsendmsg(ua, _("Invalid use duration specified.\n"));
+      bsendmsg(ua, _("Invalid use duration specified: %s\n"), val);
       return;
    }
    query = get_pool_memory(PM_MESSAGE);
@@ -734,11 +758,13 @@ static void update_volmaxbytes(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    uint64_t maxbytes;
    char ed1[50];
-   POOLMEM *query = get_pool_memory(PM_MESSAGE);
+   POOLMEM *query;
+
    if (!size_to_uint64(val, strlen(val), &maxbytes)) {
-      bsendmsg(ua, _("Invalid byte size specification.\n"));
+      bsendmsg(ua, _("Invalid max. bytes specification: %s\n"), val);
       return;
    } 
+   query = get_pool_memory(PM_MESSAGE);
    Mmsg(&query, "UPDATE Media SET MaxVolBytes=%s WHERE MediaId=%u",
       edit_uint64(maxbytes, ed1), mr->MediaId);
    if (!db_sql_query(ua->db, query, NULL, NULL)) {  
@@ -752,7 +778,7 @@ static void update_volmaxbytes(UAContext *ua, char *val, MEDIA_DBR *mr)
 static void update_volrecycle(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    int recycle;
-   POOLMEM *query = get_pool_memory(PM_MESSAGE);
+   POOLMEM *query;
    if (strcasecmp(val, _("yes")) == 0) {
       recycle = 1;
    } else if (strcasecmp(val, _("no")) == 0) {
@@ -761,6 +787,7 @@ static void update_volrecycle(UAContext *ua, char *val, MEDIA_DBR *mr)
       bsendmsg(ua, _("Invalid value. It must by yes or no.\n"));
       return;
    }
+   query = get_pool_memory(PM_MESSAGE);
    Mmsg(&query, "UPDATE Media SET Recycle=%d WHERE MediaId=%u",
       recycle, mr->MediaId);
    if (!db_sql_query(ua->db, query, NULL, NULL)) {  
@@ -785,22 +812,42 @@ static int update_volume(UAContext *ua)
    char ed1[30];
    bool done = false;
    char *kw[] = {
-      N_("VolStatus"),
-      N_("VolRetention"),
-      N_("VolUse"),
-      N_("MaxVolJobs"),
-      N_("MaxVolFiles"),
-      N_("Recycle"),
+      N_("VolStatus"),                /* 0 */
+      N_("VolRetention"),             /* 1 */
+      N_("VolUse"),                   /* 2 */
+      N_("MaxVolJobs"),               /* 3 */
+      N_("MaxVolFiles"),              /* 4 */
+      N_("MaxVolBytes"),              /* 5 */
+      N_("Recycle"),                  /* 6 */
       NULL };
 
    if (!select_media_dbr(ua, &mr)) {
       return 0;
    }
    for (int i=0; kw[i]; i++) {
-      if (find_arg_with_value(ua, kw[i]) > 0) {
+      int j;
+      if ((j=find_arg_with_value(ua, kw[i])) > 0) {
         switch (i) {
         case 0:
-           update_volstatus(ua, ua->argv[i], &mr);
+           update_volstatus(ua, ua->argv[j], &mr);
+           break;
+        case 1:
+           update_volretention(ua, ua->argv[j], &mr);
+           break;
+        case 2:
+           update_voluseduration(ua, ua->argv[j], &mr);
+           break;
+        case 3:
+           update_volmaxjobs(ua, ua->argv[j], &mr);
+           break;
+        case 4:
+           update_volmaxfiles(ua, ua->argv[j], &mr);
+           break;
+        case 5:
+           update_volmaxbytes(ua, ua->argv[j], &mr);
+           break;
+        case 6:
+           update_volrecycle(ua, ua->argv[j], &mr);
            break;
         }
         done = true;