From: Kern Sibbald Date: Wed, 28 Feb 2007 20:20:05 +0000 (+0000) Subject: kes Apply Command ACL filter to JobId list in restore command. X-Git-Tag: Release-2.0.3~15 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=89368ea1e77b766473a17148f9d53e22794e5294;p=bacula%2Fbacula 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 --- 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.