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.
      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.
 
 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.
      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.
 
       }
    }
 
-   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) {
       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;
 }
 
 
 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)
      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.