/* fd_cmds.c */
extern int connect_to_file_daemon(JCR *jcr, int retry_interval,
- int max_retry_time, int verbose);
+ int max_retry_time, int verbose);
extern int send_include_list(JCR *jcr);
extern int send_exclude_list(JCR *jcr);
extern int get_attributes_and_put_in_catalog(JCR *jcr);
extern int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId);
extern int put_file_into_catalog(JCR *jcr, long file_index, char *fname,
- char *link, char *attr, int stream);
+ char *link, char *attr, int stream);
/* job.c */
extern void set_jcr_defaults(JCR *jcr, JOB *job);
/* msgchan.c */
extern int connect_to_storage_daemon(JCR *jcr, int retry_interval,
- int max_retry_time, int verbose);
+ int max_retry_time, int verbose);
extern int start_storage_daemon_job(JCR *jcr);
extern int start_storage_daemon_message_thread(JCR *jcr);
extern int32_t bget_msg(BSOCK *bs, int type);
void bsendmsg(void *sock, char *fmt, ...);
/* ua_select.c */
-STORE *select_storage_resource(UAContext *ua);
-JOB *select_job_resource(UAContext *ua);
-JOB *select_restore_job_resource(UAContext *ua);
-CLIENT *select_client_resource(UAContext *ua);
+STORE *select_storage_resource(UAContext *ua);
+JOB *select_job_resource(UAContext *ua);
+JOB *select_restore_job_resource(UAContext *ua);
+CLIENT *select_client_resource(UAContext *ua);
FILESET *select_fileset_resource(UAContext *ua);
-int select_pool_and_media_dbr(UAContext *ua, POOL_DBR *pr, MEDIA_DBR *mr);
-int select_pool_dbr(UAContext *ua, POOL_DBR *pr);
-int select_client_dbr(UAContext *ua, CLIENT_DBR *cr);
-
-void start_prompt(UAContext *ua, char *msg);
-void add_prompt(UAContext *ua, char *prompt);
-int do_prompt(UAContext *ua, char *msg, char *prompt, int max_prompt);
-CAT *get_catalog_resource(UAContext *ua);
-STORE *get_storage_resource(UAContext *ua, char *cmd);
-int get_media_type(UAContext *ua, char *MediaType, int max_media);
-int get_pool_dbr(UAContext *ua, POOL_DBR *pr);
-int get_client_dbr(UAContext *ua, CLIENT_DBR *cr);
+int select_pool_and_media_dbr(UAContext *ua, POOL_DBR *pr, MEDIA_DBR *mr);
+int select_pool_dbr(UAContext *ua, POOL_DBR *pr);
+int select_client_dbr(UAContext *ua, CLIENT_DBR *cr);
+
+void start_prompt(UAContext *ua, char *msg);
+void add_prompt(UAContext *ua, char *prompt);
+int do_prompt(UAContext *ua, char *msg, char *prompt, int max_prompt);
+CAT *get_catalog_resource(UAContext *ua);
+STORE *get_storage_resource(UAContext *ua, char *cmd, int use_default);
+int get_media_type(UAContext *ua, char *MediaType, int max_media);
+int get_pool_dbr(UAContext *ua, POOL_DBR *pr);
+int get_client_dbr(UAContext *ua, CLIENT_DBR *cr);
POOL *get_pool_resource(UAContext *ua);
POOL *select_pool_resource(UAContext *ua);
CLIENT *get_client_resource(UAContext *ua);
-int get_job_dbr(UAContext *ua, JOB_DBR *jr);
+int get_job_dbr(UAContext *ua, JOB_DBR *jr);
int find_arg_keyword(UAContext *ua, char **list);
int do_keyword_prompt(UAContext *ua, char *msg, char **list);
}
/* Get media type */
- if ((store = get_storage_resource(ua, cmd)) != NULL) {
+ if ((store = get_storage_resource(ua, cmd, 0)) != NULL) {
strcpy(mr.MediaType, store->media_type);
} else if (!get_media_type(ua, mr.MediaType, sizeof(mr.MediaType))) {
return 1;
return 1;
}
}
- store = get_storage_resource(ua, cmd);
+ store = get_storage_resource(ua, cmd, 0);
if (store) {
do_storage_setdebug(ua, store, level);
return 1;
debug_level = level;
break;
case 1:
- store = get_storage_resource(ua, cmd);
+ store = get_storage_resource(ua, cmd, 0);
if (store) {
do_storage_setdebug(ua, store, level);
}
}
Dmsg1(120, "mount: %s\n", ua->UA_sock->msg);
- store = get_storage_resource(ua, cmd);
+ store = get_storage_resource(ua, cmd, 1);
if (!store) {
return;
}
/*
* We scan what the user has entered looking for
- * device=<device-name> ???? does this work ????
* storage=<storage-resource>
* job=<job_name>
* jobid=<jobid>
* ? (prompt him with storage list)
* <some-error> (prompt him with storage list)
+ *
+ * If use_default is set, we assume that any keyword without a value
+ * is the name of the Storage resource wanted.
*/
-STORE *get_storage_resource(UAContext *ua, char *cmd)
+STORE *get_storage_resource(UAContext *ua, char *cmd, int use_default)
{
- char *store_name, *device_name;
- STORE *store;
+ char *store_name = NULL;
+ STORE *store = NULL;
int jobid;
JCR *jcr;
int i;
- device_name = NULL;
- store_name = NULL;
for (i=1; i<ua->argc; i++) {
- if (!ua->argv[i]) {
+ if (use_default && !ua->argv[i]) {
/* Default argument is storage */
if (store_name) {
bsendmsg(ua, _("Storage name given twice.\n"));
return NULL;
}
+ /* Ignore barcode(s) keywords */
+ if (strncasecmp("barcode", ua->argk[i], 7) == 0) {
+ continue;
+ }
store_name = ua->argk[i];
if (*store_name == '?') {
- return select_storage_resource(ua);
+ *store_name = 0;
+ break;
}
} else {
- if (strcasecmp(ua->argk[i], _("device")) == 0) {
- device_name = ua->argv[i];
-
- } else if (strcasecmp(ua->argk[i], _("storage")) == 0) {
+ if (strcasecmp(ua->argk[i], _("storage")) == 0) {
store_name = ua->argv[i];
+ break;
} else if (strcasecmp(ua->argk[i], _("jobid")) == 0) {
jobid = atoi(ua->argv[i]);
}
store = jcr->store;
free_jcr(jcr);
- return store;
+ break;
} else if (strcasecmp(ua->argk[i], _("job")) == 0) {
if (!(jcr=get_jcr_by_partial_name(ua->argv[i]))) {
}
store = jcr->store;
free_jcr(jcr);
- return store;
+ break;
}
}
}
- if (!store_name) {
- bsendmsg(ua, _("A storage device name must be given.\n"));
- store = NULL;
- } else {
+ if (!store && store_name) {
store = (STORE *)GetResWithName(R_STORAGE, store_name);
if (!store) {
bsendmsg(ua, "Storage resource %s: not found\n", store_name);
}
}
+ /* No keywords found, so present a selection list */
if (!store) {
store = select_storage_resource(ua);
}