From 89368ea1e77b766473a17148f9d53e22794e5294 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Wed, 28 Feb 2007 20:20:05 +0000 Subject: [PATCH] kes Apply Command ACL filter to JobId list in restore command. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/branches/Branch-2.0@4287 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/ChangeLog | 3 ++- bacula/ReleaseNotes | 3 ++- bacula/src/dird/ua_restore.c | 41 +++++++++++++++++++++++------------- bacula/technotes-2.0 | 3 ++- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/bacula/ChangeLog b/bacula/ChangeLog index 38d3be5c8b..a6e7a10afa 100644 --- a/bacula/ChangeLog +++ b/bacula/ChangeLog @@ -4,6 +4,7 @@ General: Version 2.0.3 release: xx February 2007 28Feb07 +kes Apply Command ACL filter to JobId list in restore command. kes Correct typeo in var.c patch. 27Feb07 kes Don't let Bacula prune File or Job records for the current Job. @@ -78,7 +79,7 @@ kes Test on job_canceled() and sd_msg_thread_done inside Fixes bug #771. kes Remove rl_catch_signal from console.c as it conflicted with the header definition. Fixes bug #765. -ebl Fixes bug #766 about RunsOnClient = Yes +ebl Fixes bug #766 about RunsOnClient = Yes (case sensitive) 04Feb07 kes Clarify some stored/acquire messages to indicate if the problem is with read or append. diff --git a/bacula/ReleaseNotes b/bacula/ReleaseNotes index 4140ca3c6c..a19caf184d 100644 --- a/bacula/ReleaseNotes +++ b/bacula/ReleaseNotes @@ -8,6 +8,7 @@ a version older than 2.0.0, please be sure to read the important notes below. 28Feb07 +kes Apply Command ACL filter to JobId list in restore command. kes Correct typeo in var.c patch. 27Feb07 kes Don't let Bacula prune File or Job records for the current Job. @@ -82,7 +83,7 @@ kes Test on job_canceled() and sd_msg_thread_done inside Fixes bug #771. kes Remove rl_catch_signal from console.c as it conflicted with the header definition. Fixes bug #765. -ebl Fixes bug #766 about RunsOnClient = Yes +ebl Fixes bug #766 about RunsOnClient = Yes (case sensitive) 04Feb07 kes Clarify some stored/acquire messages to indicate if the problem is with read or append. diff --git a/bacula/src/dird/ua_restore.c b/bacula/src/dird/ua_restore.c index 420931d5f1..cce2821ff0 100644 --- a/bacula/src/dird/ua_restore.c +++ b/bacula/src/dird/ua_restore.c @@ -625,23 +625,19 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) } } - if (*rx->JobIds == 0) { - bsendmsg(ua, _("No Jobs selected.\n")); - return 0; - } - if (strchr(rx->JobIds,',')) { - bsendmsg(ua, _("You have selected the following JobIds: %s\n"), rx->JobIds); - } - else { - bsendmsg(ua, _("You have selected the following JobId: %s\n"), rx->JobIds); - } - - + POOLMEM *JobIds = get_pool_memory(PM_FNAME); + *JobIds = 0; rx->TotalFiles = 0; + /* + * Find total number of files to be restored, and filter the JobId + * list to contain only ones permitted by the ACL conditions. + */ for (p=rx->JobIds; ; ) { + char ed1[50]; int stat = get_next_jobid_from_list(&p, &JobId); if (stat < 0) { bsendmsg(ua, _("Invalid JobId in list.\n")); + free_pool_memory(JobIds); return 0; } if (stat == 0) { @@ -653,18 +649,33 @@ static int user_select_jobids_or_files(UAContext *ua, RESTORE_CTX *rx) memset(&jr, 0, sizeof(JOB_DBR)); jr.JobId = JobId; if (!db_get_job_record(ua->jcr, ua->db, &jr)) { - char ed1[50]; bsendmsg(ua, _("Unable to get Job record for JobId=%s: ERR=%s\n"), edit_int64(JobId, ed1), db_strerror(ua->db)); + free_pool_memory(JobIds); return 0; } if (!acl_access_ok(ua, Job_ACL, jr.Name)) { - bsendmsg(ua, _("No authorization. Job \"%s\" not selected.\n"), - jr.Name); + bsendmsg(ua, _("No authorization for JobId=%s (Job \"%s\"). Not selected.\n"), + edit_int64(JobId, ed1), jr.Name); continue; } + if (*JobIds != 0) { + pm_strcat(JobIds, ","); + } + pm_strcat(JobIds, edit_int64(JobId, ed1)); rx->TotalFiles += jr.JobFiles; } + free_pool_memory(rx->JobIds); + rx->JobIds = JobIds; /* Set ACL filtered list */ + if (*rx->JobIds == 0) { + bsendmsg(ua, _("No Jobs selected.\n")); + return 0; + } + if (strchr(rx->JobIds,',')) { + bsendmsg(ua, _("You have selected the following JobIds: %s\n"), rx->JobIds); + } else { + bsendmsg(ua, _("You have selected the following JobId: %s\n"), rx->JobIds); + } return 1; } diff --git a/bacula/technotes-2.0 b/bacula/technotes-2.0 index 56ac59f999..5fdf0f802a 100644 --- a/bacula/technotes-2.0 +++ b/bacula/technotes-2.0 @@ -3,6 +3,7 @@ General: 28Feb07 kes Correct typeo in var.c patch. +kes Apply Command ACL filter to JobId list in restore command. 27Feb07 kes Don't let Bacula prune File or Job records for the current Job. kes Fix variable substitution pad + inc bug reported (with patch) @@ -76,7 +77,7 @@ kes Test on job_canceled() and sd_msg_thread_done inside Fixes bug #771. kes Remove rl_catch_signal from console.c as it conflicted with the header definition. Fixes bug #765. -ebl Fixes bug #766 about RunsOnClient = Yes +ebl Fixes bug #766 about RunsOnClient = Yes (case sensitive) 04Feb07 kes Clarify some stored/acquire messages to indicate if the problem is with read or append. -- 2.39.5