- }
- pm_strcat(rx->JobIds, ua->argv[i]);
- done = true;
- break;
- case 1: /* current */
- bstrutime(date, sizeof(date), time(NULL));
- have_date = true;
- break;
- case 2: /* before */
- if (str_to_utime(ua->argv[i]) == 0) {
- bsendmsg(ua, _("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 (!have_date) {
- bstrutime(date, sizeof(date), time(NULL));
- }
- 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);
- if (rx->name_list.num_ids) {
- /* Check MediaType and select storage that corresponds */
- get_storage_from_mediatype(ua, &rx->name_list, rx);
- done = true;
- }
- break;
- case 5: /* select */
- if (!have_date) {
- bstrutime(date, sizeof(date), time(NULL));
- }
- if (!select_backups_before_date(ua, rx, date)) {
- return 0;
- }
- done = true;
- break;
- case 6: /* pool specified */
- rx->pool = (POOL *)GetResWithName(R_POOL, ua->argv[i]);
- if (!rx->pool) {
- bsendmsg(ua, _("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;
- bsendmsg(ua, _("Error: Pool resource \"%s\" access not allowed.\n"), ua->argv[i]);
- return 0;
- }
- break;
- case 7: /* all specified */
- rx->all = true;
- break;
+ }
+ 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;