- done = true;
- break;
- case 5: /* pool specified */
- i = find_arg_with_value(ua, "pool");
- if (i >= 0 && acl_access_ok(ua, Pool_ACL, ua->argv[i])) {
- rx->pool = (POOL *)GetResWithName(R_POOL, ua->argv[i]);
- } else {
- bsendmsg(ua, _("Error: Pool resource \"%s\" does not exist.\n"), ua->argv[i]);
+ /* Found keyword in kw[] list, process it */
+ switch (j) {
+ case 0: /* jobid */
+ if (!has_value(ua, i)) {
+ return 0;
+ }
+ if (*rx->JobIds != 0) {
+ pm_strcat(rx->JobIds, ",");
+ }
+ pm_strcat(rx->JobIds, ua->argv[i]);
+ done = true;
+ break;
+ case 1: /* current */
+ /*
+ * Note, we add one second here just to include any job
+ * that may have finished within the current second,
+ * which happens a lot in scripting small jobs.
+ */
+ bstrutime(date, sizeof(date), now);
+ have_date = true;
+ break;
+ case 2: /* before */
+ if (have_date || !has_value(ua, i)) {
+ return 0;
+ }
+ if (str_to_utime(ua->argv[i]) == 0) {
+ ua->error_msg(_("Improper date format: %s\n"), ua->argv[i]);
+ return 0;
+ }
+ bstrncpy(date, ua->argv[i], sizeof(date));
+ have_date = true;
+ break;
+ case 3: /* file */
+ case 4: /* dir */
+ if (!has_value(ua, i)) {
+ return 0;
+ }
+ if (!have_date) {
+ bstrutime(date, sizeof(date), now);
+ }
+ if (!get_client_name(ua, rx)) {
+ return 0;
+ }
+ pm_strcpy(ua->cmd, ua->argv[i]);
+ insert_one_file_or_dir(ua, rx, date, j==4);
+ return 2;
+ case 5: /* select */
+ if (!have_date) {
+ bstrutime(date, sizeof(date), now);
+ }
+ if (!select_backups_before_date(ua, rx, date)) {
+ return 0;
+ }
+ done = true;
+ break;
+ case 6: /* pool specified */
+ if (!has_value(ua, i)) {
+ return 0;
+ }
+ rx->pool = (POOL *)GetResWithName(R_POOL, ua->argv[i]);
+ if (!rx->pool) {
+ ua->error_msg(_("Error: Pool resource \"%s\" does not exist.\n"), ua->argv[i]);
+ return 0;
+ }
+ if (!acl_access_ok(ua, Pool_ACL, ua->argv[i])) {
+ rx->pool = NULL;
+ ua->error_msg(_("Error: Pool resource \"%s\" access not allowed.\n"), ua->argv[i]);
+ return 0;
+ }
+ break;
+ case 7: /* all specified */
+ rx->all = true;
+ break;
+ /*
+ * All keywords 7 or greater are ignored or handled by a select prompt
+ */
+ default:
+ break;