]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_cmds.c
Fix conio.h problem on Solaris
[bacula/bacula] / bacula / src / dird / ua_cmds.c
index 8aa7ecccc1d8d4cfe81738f10b80147702f6430e..e79094fb4d09f0b9340686cb8d2a66d547a0dc8d 100644 (file)
@@ -88,6 +88,7 @@ static int update_cmd(UAContext *ua, const char *cmd);
 static int wait_cmd(UAContext *ua, const char *cmd);
 static int setip_cmd(UAContext *ua, const char *cmd);
 
+int qhelp_cmd(UAContext *ua, const char *cmd);
 int quit_cmd(UAContext *ua, const char *cmd);
 
 
@@ -563,8 +564,7 @@ static int create_cmd(UAContext *ua, const char *cmd)
 static int setip_cmd(UAContext *ua, const char *cmd) 
 {
    CLIENT *client;
-   char mybuf[1024]; 
-   char *buf = mybuf;
+   char buf[1024]; 
    if (!ua->cons || !acl_access_ok(ua, Client_ACL, ua->cons->hdr.name)) {
       bsendmsg(ua, _("Illegal command from this console.\n"));
       return 1;
@@ -579,15 +579,8 @@ static int setip_cmd(UAContext *ua, const char *cmd)
    if (client->address) {
       free(client->address);
    }
-#ifdef HAVE_INET_NTOP
-   inet_ntop(ua->UA_sock->client_addr.sa_family, 
-               &(ua->UA_sock->client_addr), buf,
-               ua->UA_sock->client_addr.sa_family == AF_INET ?
-               sizeof(sockaddr_in) : sizeof(sockaddr_in6));
-#else
-   buf = inet_ntoa(((struct sockaddr_in *)&(ua->UA_sock->client_addr))->sin_addr);
-#endif
-
+   /* MA Bug 6 remove ifdef */
+   sockaddr_to_ascii(&(ua->UA_sock->client_addr), buf, sizeof(buf)); 
    client->address = bstrdup(buf);
    bsendmsg(ua, _("Client \"%s\" address set to %s\n"),
            client->hdr.name, client->address);
@@ -682,7 +675,7 @@ static void update_volstatus(UAContext *ua, const char *val, MEDIA_DBR *mr)
       bsendmsg(ua, _("Invalid VolStatus specified: %s\n"), val);
    } else {
       bstrncpy(mr->VolStatus, kw[i], sizeof(mr->VolStatus));
-      Mmsg(&query, "UPDATE Media SET VolStatus='%s' WHERE MediaId=%u",
+      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));
@@ -695,27 +688,27 @@ static void update_volstatus(UAContext *ua, const char *val, MEDIA_DBR *mr)
 
 static void update_volretention(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
-   char ed1[50];
+   char ed1[150];
    POOLMEM *query;
    if (!duration_to_utime(val, &mr->VolRetention)) {
       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",
+   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)) {  
       bsendmsg(ua, "%s", db_strerror(ua->db));
    } else {
-      bsendmsg(ua, _("New retention seconds is: %s\n"),
-        edit_utime(mr->VolRetention, ed1));
+      bsendmsg(ua, _("New retention period is: %s\n"),
+        edit_utime(mr->VolRetention, ed1, sizeof(ed1)));
    }
    free_pool_memory(query);
 }
 
 static void update_voluseduration(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
-   char ed1[50];
+   char ed1[150];
    POOLMEM *query;
 
    if (!duration_to_utime(val, &mr->VolUseDuration)) {
@@ -723,13 +716,13 @@ static void update_voluseduration(UAContext *ua, char *val, MEDIA_DBR *mr)
       return;
    }
    query = get_pool_memory(PM_MESSAGE);
-   Mmsg(&query, "UPDATE Media SET VolUseDuration=%s WHERE MediaId=%u",
+   Mmsg(query, "UPDATE Media SET VolUseDuration=%s WHERE MediaId=%u",
       edit_uint64(mr->VolUseDuration, ed1), mr->MediaId);
    if (!db_sql_query(ua->db, query, NULL, NULL)) {  
       bsendmsg(ua, "%s", db_strerror(ua->db));
    } else {
       bsendmsg(ua, _("New use duration is: %s\n"),
-        edit_utime(mr->VolUseDuration, ed1));
+        edit_utime(mr->VolUseDuration, ed1, sizeof(ed1)));
    }
    free_pool_memory(query);
 }
@@ -737,7 +730,7 @@ static void update_voluseduration(UAContext *ua, char *val, MEDIA_DBR *mr)
 static void update_volmaxjobs(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    POOLMEM *query = get_pool_memory(PM_MESSAGE);
-   Mmsg(&query, "UPDATE Media SET MaxVolJobs=%s WHERE MediaId=%u",
+   Mmsg(query, "UPDATE Media SET MaxVolJobs=%s WHERE MediaId=%u",
       val, mr->MediaId);
    if (!db_sql_query(ua->db, query, NULL, NULL)) {  
       bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -750,7 +743,7 @@ static void update_volmaxjobs(UAContext *ua, char *val, MEDIA_DBR *mr)
 static void update_volmaxfiles(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    POOLMEM *query = get_pool_memory(PM_MESSAGE);
-   Mmsg(&query, "UPDATE Media SET MaxVolFiles=%s WHERE MediaId=%u",
+   Mmsg(query, "UPDATE Media SET MaxVolFiles=%s WHERE MediaId=%u",
       val, mr->MediaId);
    if (!db_sql_query(ua->db, query, NULL, NULL)) {  
       bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -771,7 +764,7 @@ static void update_volmaxbytes(UAContext *ua, char *val, MEDIA_DBR *mr)
       return;
    } 
    query = get_pool_memory(PM_MESSAGE);
-   Mmsg(&query, "UPDATE Media SET MaxVolBytes=%s WHERE MediaId=%u",
+   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)) {  
       bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -794,7 +787,7 @@ static void update_volrecycle(UAContext *ua, char *val, MEDIA_DBR *mr)
       return;
    }
    query = get_pool_memory(PM_MESSAGE);
-   Mmsg(&query, "UPDATE Media SET Recycle=%d WHERE MediaId=%u",
+   Mmsg(query, "UPDATE Media SET Recycle=%d WHERE MediaId=%u",
       recycle, mr->MediaId);
    if (!db_sql_query(ua->db, query, NULL, NULL)) {  
       bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -821,7 +814,7 @@ static void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *o
     */
    query = get_pool_memory(PM_MESSAGE);
    db_lock(ua->db);
-   Mmsg(&query, "UPDATE Media SET PoolId=%d WHERE MediaId=%u",
+   Mmsg(query, "UPDATE Media SET PoolId=%d WHERE MediaId=%u",
       mr->PoolId, mr->MediaId);
    if (!db_sql_query(ua->db, query, NULL, NULL)) {  
       bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -847,23 +840,44 @@ static void update_vol_pool(UAContext *ua, char *val, MEDIA_DBR *mr, POOL_DBR *o
 static void update_volfrompool(UAContext *ua, MEDIA_DBR *mr)
 {
    POOL_DBR pr;
-   char VolStatus[50];
 
    memset(&pr, 0, sizeof(pr));
    pr.PoolId = mr->PoolId;
    if (!get_pool_dbr(ua, &pr)) {
       return;
    }
-   bstrncpy(VolStatus, mr->VolStatus, sizeof(VolStatus));
    set_pool_dbr_defaults_in_media_dbr(mr, &pr);
-   bstrncpy(mr->VolStatus, VolStatus, sizeof(mr->VolStatus));
-   if (!db_update_media_record(ua->jcr, ua->db, mr)) {
+   if (!db_update_media_defaults(ua->jcr, ua->db, mr)) {
       bsendmsg(ua, _("Error updating Volume record: ERR=%s"), db_strerror(ua->db));
    } else {
       bsendmsg(ua, _("Volume defaults updated from Pool record.\n"));
    }
 }
 
+/*
+ * Refresh the Volume information from the Pool record
+ *   for all Volumes
+ */
+static void update_all_vols_from_pool(UAContext *ua)
+{
+   POOL_DBR pr;
+   MEDIA_DBR mr;
+
+   memset(&pr, 0, sizeof(pr));
+   if (!get_pool_dbr(ua, &pr)) {
+      return;
+   }
+   memset(&mr, 0, sizeof(mr));
+   set_pool_dbr_defaults_in_media_dbr(&mr, &pr);
+   mr.PoolId = pr.PoolId;
+   if (!db_update_media_defaults(ua->jcr, ua->db, &mr)) {
+      bsendmsg(ua, _("Error updating Volume records: ERR=%s"), db_strerror(ua->db));
+   } else {
+      bsendmsg(ua, _("All Volume defaults updated from Pool record.\n"));
+   }
+}
+
+
 /*
  * Update a media record -- allows you to change the
  *  Volume status. E.g. if you want Bacula to stop
@@ -875,7 +889,7 @@ static int update_volume(UAContext *ua)
    MEDIA_DBR mr;
    POOL_DBR pr;
    POOLMEM *query;
-   char ed1[30];
+   char ed1[130];
    bool done = false;
    const char *kw[] = {
       N_("VolStatus"),                /* 0 */
@@ -887,13 +901,14 @@ static int update_volume(UAContext *ua)
       N_("Recycle"),                  /* 6 */
       N_("Pool"),                     /* 7 */
       N_("FromPool"),                 /* 8 */
+      N_("AllFromPool"),              /* 9 */
       NULL };
 
    for (int i=0; kw[i]; i++) {
       int j;
       POOL_DBR pr;
       if ((j=find_arg_with_value(ua, kw[i])) > 0) {
-        if (!select_media_dbr(ua, &mr)) {
+        if (i != 9 && !select_media_dbr(ua, &mr)) {
            return 0;
         }
         switch (i) {
@@ -930,6 +945,8 @@ static int update_volume(UAContext *ua)
         case 8:
            update_volfrompool(ua, &mr);
            break;
+        case 9:
+           update_all_vols_from_pool(ua);
         }
         done = true;
       }
@@ -952,6 +969,8 @@ static int update_volume(UAContext *ua)
       add_prompt(ua, _("InChanger Flag"));
       add_prompt(ua, _("Volume Files"));
       add_prompt(ua, _("Pool"));
+      add_prompt(ua, _("Volume from Pool"));
+      add_prompt(ua, _("All Volumes from Pool"));
       add_prompt(ua, _("Done"));
       switch (do_prompt(ua, "", _("Select parameter to modify"), NULL, 0)) {
       case 0:                        /* Volume Status */
@@ -974,8 +993,8 @@ static int update_volume(UAContext *ua)
         update_volstatus(ua, ua->cmd, &mr);
         break;
       case 1:                        /* Retention */
-         bsendmsg(ua, _("Current retention seconds is: %s\n"),
-           edit_utime(mr.VolRetention, ed1));
+         bsendmsg(ua, _("Current retention period is: %s\n"),
+           edit_utime(mr.VolRetention, ed1, sizeof(ed1)));
          if (!get_cmd(ua, _("Enter Volume Retention period: "))) {
            return 0;
         }
@@ -984,7 +1003,7 @@ static int update_volume(UAContext *ua)
 
       case 2:                        /* Use Duration */
          bsendmsg(ua, _("Current use duration is: %s\n"),
-           edit_utime(mr.VolUseDuration, ed1));
+           edit_utime(mr.VolUseDuration, ed1, sizeof(ed1)));
          if (!get_cmd(ua, _("Enter Volume Use Duration: "))) {
            return 0;
         }
@@ -1090,7 +1109,7 @@ static int update_volume(UAContext *ua)
            }
         }
         query = get_pool_memory(PM_MESSAGE);
-         Mmsg(&query, "UPDATE Media SET VolFiles=%u WHERE MediaId=%u",
+         Mmsg(query, "UPDATE Media SET VolFiles=%u WHERE MediaId=%u",
            VolFiles, mr.MediaId);
         if (!db_sql_query(ua->db, query, NULL, NULL)) {  
             bsendmsg(ua, "%s", db_strerror(ua->db));
@@ -1114,6 +1133,12 @@ static int update_volume(UAContext *ua)
         update_vol_pool(ua, ua->cmd, &mr, &pr);
         return 1;
 
+      case 11:
+        update_volfrompool(ua, &mr);
+        break;
+      case 12:
+        update_all_vols_from_pool(ua);
+        break;
       default:                       /* Done or error */
          bsendmsg(ua, "Selection done.\n");
         return 1;
@@ -1151,7 +1176,7 @@ static int update_pool(UAContext *ua)
         id, db_strerror(ua->db));
    }
    query = get_pool_memory(PM_MESSAGE);
-   Mmsg(&query, list_pool, pr.PoolId);
+   Mmsg(query, list_pool, pr.PoolId);
    db_list_sql_query(ua->jcr, ua->db, query, prtit, ua, 1, HORZ_LIST);
    free_pool_memory(query);
    bsendmsg(ua, _("Pool DB record updated from resource.\n"));
@@ -1663,11 +1688,11 @@ static int delete_job(UAContext *ua)
    } else {
       JobId = ua->pint32_val; 
    }
-   Mmsg(&query, "DELETE FROM Job WHERE JobId=%u", JobId);
+   Mmsg(query, "DELETE FROM Job WHERE JobId=%u", JobId);
    db_sql_query(ua->db, query, NULL, (void *)NULL);
-   Mmsg(&query, "DELETE FROM File WHERE JobId=%u", JobId);
+   Mmsg(query, "DELETE FROM File WHERE JobId=%u", JobId);
    db_sql_query(ua->db, query, NULL, (void *)NULL);
-   Mmsg(&query, "DELETE FROM JobMedia WHERE JobId=%u", JobId);
+   Mmsg(query, "DELETE FROM JobMedia WHERE JobId=%u", JobId);
    db_sql_query(ua->db, query, NULL, (void *)NULL);
    free_pool_memory(query);
    bsendmsg(ua, _("Job %u and associated records deleted from the catalog.\n"), JobId);
@@ -1855,6 +1880,16 @@ static int help_cmd(UAContext *ua, const char *cmd)
    return 1;
 }
 
+int qhelp_cmd(UAContext *ua, const char *cmd)
+{
+   unsigned int i;
+
+   for (i=0; i<comsize; i++) {
+      bsendmsg(ua, _("%s %s\n"), _(commands[i].key), _(commands[i].help));
+   }
+   return 1;
+}
+
 static int version_cmd(UAContext *ua, const char *cmd)
 {
    bsendmsg(ua, "%s Version: " VERSION " (" BDATE ")\n", my_name);