]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_select.c
Minor tweaks to Migration
[bacula/bacula] / bacula / src / dird / ua_select.c
index 7a3b2e8254407f3ef3b4dd026ff99ee64ab6973e..b12517f4f9baa9acccd09bdf559b4289d6e233cc 100644 (file)
@@ -7,7 +7,7 @@
  *   Version  $Id$
  */
 /*
-   Copyright (C) 2001-2005 Kern Sibbald
+   Copyright (C) 2001-2006 Kern Sibbald
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
@@ -34,6 +34,7 @@ extern struct s_jl joblevels[];
 int confirm_retention(UAContext *ua, utime_t *ret, const char *msg)
 {
    char ed1[100];
+   int val;
 
    for ( ;; ) {
        bsendmsg(ua, _("The current %s retention period is: %s\n"),
@@ -51,11 +52,8 @@ int confirm_retention(UAContext *ua, utime_t *ret, const char *msg)
           }
           continue;
        }
-       if (strcasecmp(ua->cmd, _("yes")) == 0) {
-          return 1;
-       }
-       if (strcasecmp(ua->cmd, _("no")) == 0) {
-          return 0;
+       if (is_yesno(ua->cmd, &val)) {
+          return val;           /* is 1 for yes, 0 for no */
        }
     }
     return 1;
@@ -71,7 +69,7 @@ int find_arg_keyword(UAContext *ua, const char **list)
 {
    for (int i=1; i<ua->argc; i++) {
       for(int j=0; list[j]; j++) {
-         if (strcasecmp(_(list[j]), ua->argk[i]) == 0) {
+         if (strcasecmp(list[j], ua->argk[i]) == 0) {
             return j;
          }
       }
@@ -190,7 +188,7 @@ CAT *get_catalog_resource(UAContext *ua)
    int i;
 
    for (i=1; i<ua->argc; i++) {
-      if (strcasecmp(ua->argk[i], _("catalog")) == 0 && ua->argv[i]) {
+      if (strcasecmp(ua->argk[i], NT_("catalog")) == 0 && ua->argv[i]) {
          if (acl_access_ok(ua, Catalog_ACL, ua->argv[i])) {
             catalog = (CAT *)GetResWithName(R_CATALOG, ua->argv[i]);
             break;
@@ -297,8 +295,8 @@ CLIENT *get_client_resource(UAContext *ua)
    int i;
 
    for (i=1; i<ua->argc; i++) {
-      if ((strcasecmp(ua->argk[i], N_("client")) == 0 ||
-           strcasecmp(ua->argk[i], N_("fd")) == 0) && ua->argv[i]) {
+      if ((strcasecmp(ua->argk[i], NT_("client")) == 0 ||
+           strcasecmp(ua->argk[i], NT_("fd")) == 0) && ua->argv[i]) {
          if (!acl_access_ok(ua, Client_ACL, ua->argv[i])) {
             break;
          }
@@ -334,8 +332,8 @@ int get_client_dbr(UAContext *ua, CLIENT_DBR *cr)
       bsendmsg(ua, _("Could not find Client %s: ERR=%s"), cr->Name, db_strerror(ua->db));
    }
    for (i=1; i<ua->argc; i++) {
-      if ((strcasecmp(ua->argk[i], _("client")) == 0 ||
-           strcasecmp(ua->argk[i], _("fd")) == 0) && ua->argv[i]) {
+      if ((strcasecmp(ua->argk[i], NT_("client")) == 0 ||
+           strcasecmp(ua->argk[i], NT_("fd")) == 0) && ua->argv[i]) {
          if (!acl_access_ok(ua, Client_ACL, ua->argv[i])) {
             break;
          }
@@ -440,7 +438,7 @@ bool select_pool_dbr(UAContext *ua, POOL_DBR *pr)
    uint32_t *ids;
 
    for (i=1; i<ua->argc; i++) {
-      if (strcasecmp(ua->argk[i], N_("pool")) == 0 && ua->argv[i] &&
+      if (strcasecmp(ua->argk[i], NT_("pool")) == 0 && ua->argv[i] &&
           acl_access_ok(ua, Pool_ACL, ua->argv[i])) {
          bstrncpy(pr->Name, ua->argv[i], sizeof(pr->Name));
          if (!db_get_pool_record(ua->jcr, ua->db, pr)) {
@@ -626,11 +624,12 @@ int get_job_dbr(UAContext *ua, JOB_DBR *jr)
    int i;
 
    for (i=1; i<ua->argc; i++) {
-      if (strcasecmp(ua->argk[i], N_("job")) == 0 && ua->argv[i]) {
+      if (strcasecmp(ua->argk[i], NT_("ujobid")) == 0 && ua->argv[i]) {
          jr->JobId = 0;
          bstrncpy(jr->Job, ua->argv[i], sizeof(jr->Job));
-      } else if (strcasecmp(ua->argk[i], N_("jobid")) == 0 && ua->argv[i]) {
+      } else if (strcasecmp(ua->argk[i], NT_("jobid")) == 0 && ua->argv[i]) {
          jr->JobId = str_to_int64(ua->argv[i]);
+         jr->Job[0] = 0;
       } else {
          continue;
       }
@@ -643,6 +642,17 @@ int get_job_dbr(UAContext *ua, JOB_DBR *jr)
       return jr->JobId;
    }
 
+   jr->JobId = 0;
+   jr->Job[0] = 0;
+
+   for (i=1; i<ua->argc; i++) {
+      if ((strcasecmp(ua->argk[i], NT_("jobname")) == 0 ||
+           strcasecmp(ua->argk[i], NT_("job")) == 0) && ua->argv[i]) {
+         jr->JobId = 0;
+         bstrncpy(jr->Name, ua->argv[i], sizeof(jr->Name));
+         break;
+      }
+   }
    if (!select_job_dbr(ua, jr)) {  /* try once more */
       return 0;
    }
@@ -801,12 +811,12 @@ STORE *get_storage_resource(UAContext *ua, bool use_default)
             break;
          }
       } else {
-         if (strcasecmp(ua->argk[i], N_("storage")) == 0 ||
-             strcasecmp(ua->argk[i], N_("sd")) == 0) {
+         if (strcasecmp(ua->argk[i], NT_("storage")) == 0 ||
+             strcasecmp(ua->argk[i], NT_("sd")) == 0) {
             store_name = ua->argv[i];
             break;
 
-         } else if (strcasecmp(ua->argk[i], N_("jobid")) == 0) {
+         } else if (strcasecmp(ua->argk[i], NT_("jobid")) == 0) {
             jobid = str_to_int64(ua->argv[i]);
             if (jobid <= 0) {
                bsendmsg(ua, _("Expecting jobid=nn command, got: %s\n"), ua->argk[i]);
@@ -816,11 +826,12 @@ STORE *get_storage_resource(UAContext *ua, bool use_default)
                bsendmsg(ua, _("JobId %s is not running.\n"), edit_int64(jobid, ed1));
                return NULL;
             }
-            store = jcr->store;
+            store = jcr->wstore;
             free_jcr(jcr);
             break;
 
-         } else if (strcasecmp(ua->argk[i], N_("job")) == 0) {
+         } else if (strcasecmp(ua->argk[i], NT_("job")) == 0 ||
+                    strcasecmp(ua->argk[i], NT_("jobname")) == 0) {
             if (!ua->argv[i]) {
                bsendmsg(ua, _("Expecting job=xxx, got: %s.\n"), ua->argk[i]);
                return NULL;
@@ -829,7 +840,19 @@ STORE *get_storage_resource(UAContext *ua, bool use_default)
                bsendmsg(ua, _("Job \"%s\" is not running.\n"), ua->argv[i]);
                return NULL;
             }
-            store = jcr->store;
+            store = jcr->wstore;
+            free_jcr(jcr);
+            break;
+         } else if (strcasecmp(ua->argk[i], NT_("ujobid")) == 0) {
+            if (!ua->argv[i]) {
+               bsendmsg(ua, _("Expecting ujobid=xxx, got: %s.\n"), ua->argk[i]);
+               return NULL;
+            }
+            if (!(jcr=get_jcr_by_full_name(ua->argv[i]))) {
+               bsendmsg(ua, _("Job \"%s\" is not running.\n"), ua->argv[i]);
+               return NULL;
+            }
+            store = jcr->wstore;
             free_jcr(jcr);
             break;
         }
@@ -884,6 +907,27 @@ int get_storage_drive(UAContext *ua, STORE *store)
    return drive;
 }
 
+/* Get slot that we are working with for this storage */
+int get_storage_slot(UAContext *ua, STORE *store)
+{
+   int i, slot = -1;
+   /* Get slot for autochanger if possible */
+   i = find_arg_with_value(ua, "slot");
+   if (i >=0) {
+      slot = atoi(ua->argv[i]);
+   } else if (store && store->autochanger) {
+      /* Ask user to enter slot number */
+      ua->cmd[0] = 0;
+      if (!get_cmd(ua, _("Enter autochanger slot: "))) {
+         slot = -1;  /* None */
+      } else {
+         slot = atoi(ua->cmd);
+      }
+   }
+   return slot;
+}
+
+
 
 /*
  * Scan looking for mediatype=