X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_cmds.c;h=2baa3438e3d8a62facca795c3cee1639ab0c0315;hb=9f01506e19567ce5c8fae5699016a1d512647f55;hp=b17df2582d85c0680cfc1a72c8f6d83051e97092;hpb=2c1d12019fab3157a989f12f415aa69aaa767c7e;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_cmds.c b/bacula/src/dird/ua_cmds.c index b17df2582d..2baa3438e3 100644 --- a/bacula/src/dird/ua_cmds.c +++ b/bacula/src/dird/ua_cmds.c @@ -565,19 +565,20 @@ static int setip_cmd(UAContext *ua, char *cmd) 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; } @@ -591,6 +592,8 @@ static int setip_cmd(UAContext *ua, char *cmd) * updates pool from Pool resource * update media pool= volume= * changes pool info for volume + * update slots [scan=...] + * updates autochanger slots */ static int update_cmd(UAContext *ua, char *cmd) { @@ -793,6 +796,7 @@ static void update_volrecycle(UAContext *ua, char *val, MEDIA_DBR *mr) 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)); @@ -801,13 +805,38 @@ static void update_volpool(UAContext *ua, char *val, MEDIA_DBR *mr) } 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")); } } @@ -833,6 +862,7 @@ static int update_volume(UAContext *ua) N_("MaxVolBytes"), /* 5 */ N_("Recycle"), /* 6 */ N_("Pool"), /* 7 */ + N_("FromPool"), /* 8 */ NULL }; for (int i=0; kw[i]; i++) { @@ -865,6 +895,10 @@ static int update_volume(UAContext *ua) break; case 7: update_volpool(ua, ua->argv[j], &mr); + break; + case 8: + update_volfrompool(ua, &mr); + break; } done = true; } @@ -1495,6 +1529,7 @@ extern void reload_config(int sig); static int reload_cmd(UAContext *ua, char *cmd) { reload_config(1); + return 1; } @@ -1512,6 +1547,7 @@ static int delete_cmd(UAContext *ua, char *cmd) N_("volume"), N_("pool"), N_("job"), + N_("jobid"), NULL}; if (!open_db(ua)) { @@ -1526,6 +1562,7 @@ static int delete_cmd(UAContext *ua, char *cmd) delete_pool(ua); return 1; case 2: + case 3: int i; while ((i=find_arg(ua, _("jobid"))) > 0) { delete_job(ua);