bsendmsg(ua, _("Illegal command from this console.\n"));
return 1;
}
+ LockRes();
client = (CLIENT *)GetResWithName(R_CLIENT, ua->cons->hdr.name);
if (!client) {
bsendmsg(ua, _("Client \"%s\" not found.\n"), ua->cons->hdr.name);
- return 1;
+ goto get_out;
}
- LockRes();
if (client->address) {
free(client->address);
}
client->address = bstrdup(inet_ntoa(ua->UA_sock->client_addr.sin_addr));
bsendmsg(ua, _("Client \"%s\" address set to %s\n"),
client->hdr.name, client->address);
+get_out:
UnlockRes();
return 1;
}
* updates pool from Pool resource
* update media pool=<pool-name> volume=<volume-name>
* changes pool info for volume
+ * update slots [scan=...]
+ * updates autochanger slots
*/
static int update_cmd(UAContext *ua, char *cmd)
{
static void update_volpool(UAContext *ua, char *val, MEDIA_DBR *mr)
{
POOL_DBR pr;
+ POOLMEM *query;
memset(&pr, 0, sizeof(pr));
bstrncpy(pr.Name, val, sizeof(pr.Name));
}
mr->PoolId = pr.PoolId; /* set new PoolId */
/*
- * Make sure to use db_update... rather than doing this directly,
- * so that any Slot is handled correctly.
*/
+ query = get_pool_memory(PM_MESSAGE);
+ db_lock(ua->db);
+ 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));
+ } else {
+ bsendmsg(ua, _("New Pool is: %s\n"), pr.Name);
+ }
+ db_make_inchanger_unique(ua->jcr, ua->db, mr);
+ db_unlock(ua->db);
+ free_pool_memory(query);
+}
+
+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)) {
- bsendmsg(ua, _("Error updating media record Pool: ERR=%s"), db_strerror(ua->db));
+ bsendmsg(ua, _("Error updating Volume record: ERR=%s"), db_strerror(ua->db));
} else {
- bsendmsg(ua, _("New Pool is: %s\n"), pr.Name);
+ bsendmsg(ua, _("Volume defaults updated from Pool record.\n"));
}
}
N_("MaxVolBytes"), /* 5 */
N_("Recycle"), /* 6 */
N_("Pool"), /* 7 */
+ N_("FromPool"), /* 8 */
NULL };
for (int i=0; kw[i]; i++) {
break;
case 7:
update_volpool(ua, ua->argv[j], &mr);
+ break;
+ case 8:
+ update_volfrompool(ua, &mr);
+ break;
}
done = true;
}
static int reload_cmd(UAContext *ua, char *cmd)
{
reload_config(1);
+ return 1;
}
N_("volume"),
N_("pool"),
N_("job"),
+ N_("jobid"),
NULL};
if (!open_db(ua)) {
delete_pool(ua);
return 1;
case 2:
+ case 3:
int i;
while ((i=find_arg(ua, _("jobid"))) > 0) {
delete_job(ua);