]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_update.c
Commit backports from 2.3.x
[bacula/bacula] / bacula / src / dird / ua_update.c
index 7a33e4b0de11dc98fb9a45dbc6d5ee0ec4c81895..da87a02fed6462565cb97f792d6fd88967729c30 100644 (file)
@@ -242,7 +242,7 @@ static void update_volrecycle(UAContext *ua, char *val, MEDIA_DBR *mr)
       ua->error_msg("%s", db_strerror(ua->db));
    } else {
       ua->info_msg(_("New Recycle flag is: %s\n"),
-         mr->Recycle==1?_("yes"):_("no"));
+         recycle==1?_("yes"):_("no"));
    }
 }
 
@@ -262,7 +262,7 @@ static void update_volinchanger(UAContext *ua, char *val, MEDIA_DBR *mr)
       ua->error_msg("%s", db_strerror(ua->db));
    } else {
       ua->info_msg(_("New InChanger flag is: %s\n"),
-         mr->InChanger==1?_("yes"):_("no"));
+         InChanger==1?_("yes"):_("no"));
    }
 }
 
@@ -298,7 +298,7 @@ static void update_volslot(UAContext *ua, char *val, MEDIA_DBR *mr)
 void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *opr)
 {
    POOL_DBR pr;
-   POOLMEM *query;
+   POOL_MEM query(PM_MESSAGE);
    char ed1[50], ed2[50];
 
    memset(&pr, 0, sizeof(pr));
@@ -309,12 +309,10 @@ void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *opr)
    mr->PoolId = pr.PoolId;            /* set new PoolId */
    /*
     */
-   query = get_pool_memory(PM_MESSAGE);
    db_lock(ua->db);
    Mmsg(query, "UPDATE Media SET PoolId=%s WHERE MediaId=%s",
-      edit_int64(mr->PoolId, ed1),
-      edit_int64(mr->MediaId, ed2));
-   if (!db_sql_query(ua->db, query, NULL, NULL)) {
+      edit_int64(mr->PoolId, ed1), edit_int64(mr->MediaId, ed2));
+   if (!db_sql_query(ua->db, query.c_str(), NULL, NULL)) {
       ua->error_msg("%s", db_strerror(ua->db));
    } else {
       ua->info_msg(_("New Pool is: %s\n"), pr.Name);
@@ -328,14 +326,13 @@ void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *opr)
       }
    }
    db_unlock(ua->db);
-   free_pool_memory(query);
 }
 
 /* Modify the RecyclePool of a Volume */
 void update_vol_recyclepool(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    POOL_DBR pr;
-   POOLMEM *query;
+   POOL_MEM query(PM_MESSAGE);
    char ed1[50], ed2[50];
 
    memset(&pr, 0, sizeof(pr));
@@ -346,18 +343,15 @@ void update_vol_recyclepool(UAContext *ua, char *val, MEDIA_DBR *mr)
    /* pool = select_pool_resource(ua);  */
    mr->RecyclePoolId = pr.PoolId;            /* get the PoolId */
 
-   query = get_pool_memory(PM_MESSAGE);
    db_lock(ua->db);
    Mmsg(query, "UPDATE Media SET RecyclePoolId=%s WHERE MediaId=%s",
-      edit_int64(mr->RecyclePoolId, ed1),
-      edit_int64(mr->MediaId, ed2));
-   if (!db_sql_query(ua->db, query, NULL, NULL)) {
+      edit_int64(mr->RecyclePoolId, ed1), edit_int64(mr->MediaId, ed2));
+   if (!db_sql_query(ua->db, query.c_str(), NULL, NULL)) {
       ua->error_msg("%s", db_strerror(ua->db));
    } else {
       ua->info_msg(_("New RecyclePool is: %s\n"), pr.Name);
    }
    db_unlock(ua->db);
-   free_pool_memory(query);
 }
 
 /*
@@ -386,13 +380,15 @@ static void update_vol_from_pool(UAContext *ua, MEDIA_DBR *mr)
  * Refresh the Volume information from the Pool record
  *   for all Volumes
  */
-static void update_all_vols_from_pool(UAContext *ua)
+static void update_all_vols_from_pool(UAContext *ua, const char *pool_name) 
 {
    POOL_DBR pr;
    MEDIA_DBR mr;
 
    memset(&pr, 0, sizeof(pr));
    memset(&mr, 0, sizeof(mr));
+
+   bstrncpy(pr.Name, pool_name, sizeof(pr.Name));
    if (!get_pool_dbr(ua, &pr)) {
       return;
    }
@@ -401,7 +397,8 @@ static void update_all_vols_from_pool(UAContext *ua)
    if (!db_update_media_defaults(ua->jcr, ua->db, &mr)) {
       ua->error_msg(_("Error updating Volume records: ERR=%s"), db_strerror(ua->db));
    } else {
-      ua->info_msg(_("All Volume defaults updated from Pool record.\n"));
+      ua->info_msg(_("All Volume defaults updated from \"%s\" Pool record.\n"),
+         pr.Name);
    }
 }
 
@@ -429,8 +426,10 @@ static void update_volenabled(UAContext *ua, char *val, MEDIA_DBR *mr)
 static int update_volume(UAContext *ua)
 {
    MEDIA_DBR mr;
+   POOL *pool;
    POOL_DBR pr;
    POOLMEM *query;
+   char buf[1000];
    char ed1[130];
    bool done = false;
    int i;
@@ -502,7 +501,7 @@ static int update_volume(UAContext *ua)
             update_vol_from_pool(ua, &mr);
             return 1;
          case 11:
-            update_all_vols_from_pool(ua);
+            update_all_vols_from_pool(ua, ua->argv[j]);
             return 1;
          case 12:
             update_volenabled(ua, ua->argv[j], &mr);
@@ -624,7 +623,9 @@ static int update_volume(UAContext *ua)
          
       case 8:                         /* InChanger */
          ua->info_msg(_("Current InChanger flag is: %d\n"), mr.InChanger);
-         if (!get_yesno(ua, _("Set InChanger flag? yes/no: "))) {
+         bsnprintf(buf, sizeof(buf), _("Set InChanger flag for Volume \"%s\": yes/no: "),
+            mr.VolumeName);
+         if (!get_yesno(ua, buf)) {
             return 0;
          }
          mr.InChanger = ua->pint32_val;
@@ -651,7 +652,7 @@ static int update_volume(UAContext *ua)
          VolFiles = ua->pint32_val;
          if (VolFiles != (int)(mr.VolFiles + 1)) {
             ua->warning_msg(_("Normally, you should only increase Volume Files by one!\n"));
-            if (!get_yesno(ua, _("Continue? (yes/no): ")) || ua->pint32_val == 0) {
+            if (!get_yesno(ua, _("Increase Volume Files? (yes/no): ")) || ua->pint32_val == 0) {
                break;
             }
          }
@@ -684,7 +685,10 @@ static int update_volume(UAContext *ua)
          update_vol_from_pool(ua, &mr);
          return 1;
       case 12:
-         update_all_vols_from_pool(ua);
+         pool = select_pool_resource(ua);
+         if (pool) {
+            update_all_vols_from_pool(ua, pool->name());
+         }
          return 1;
 
       case 13: