+- Add a .list all files in the restore tree (probably also a list all files)
+ Do both a long and short form.
+- Add a Media record flag that indicates that the Volume does disk
+ addressing.
+- Implement VolAddr, which is used when Volume is addressed like a disk,
+ and form it from VolFile and VolBlock.
+- Make multiple restore jobs for multiple media types specifying
+ the proper storage type.
+- Implement MediaType keyword in bsr?
+- Fix fast block rejection (stored/read_record.c:118). It passes a null
+ pointer (rec) to try_repositioning().
+- See if a restore job can add a file to the tape (prohibit this).
+- Look at extracting Win data from BackupRead.
+- Having dashes in filenames apparently creates problems for restore
+ by filename.
+- Add data compare on write/read in btape "test".
+- Implement RestoreJobRetention? Maybe better "JobRetention" in a Job,
+ which would take precidence over the Catalog "JobRetention".
+- Implement Label Format in Add and Label console commands.
+- Possibly up network buffers to 65K. Put on variable.
+- Put email tape request delays on one or more variables. User wants
+ to cancel the job after a certain time interval. Maximum Mount Wait?
+ Job, Client, Device, Pool, or Volume?
+ Is it possible to make this a directive which is *optional* in multiple
+ resources, like Level? If so, I think I'd make it an optional directive
+ in Job, Client, and Pool, with precedence such that Job overrides Client
+ which in turn overrides Pool.
+- Fix Ctl-C crashing the Console (readline?).
+- Finish work on conio.c
+
+
+After 1.33:
+- Look at adding SQL server and Exchange support for Windows.
+- Restore: Enter Filename: 'C:/Documents and Settings/Comercial/My
+ Documents/MOP/formulário de registro BELAS ARTES.doc' causes Bacula to
+ crash.
+- Each DVD-RAM disk would be a volume, just like each tape is
+ a volume. It's a 4.7GB media with random access, but there's nothing about
+ it that I can see that makes it so different than a tape from bacula's
+ perspective. Why couldn't I back up to a bare floppy as a volume (ignoring
+ the media capacity?)
+- Make dev->file and dev->block_num signed integers so that -1 can
+ be an invalid value which happens with BSR.
+- Create VolAddr for disk files in place of VolFile and VolBlock. This
+ is needed to properly specify ranges.
+- Print bsmtp output to job report so that problems will be seen.
+- Pass the number of files to be restored to the FD for reporting
+- Add progress of files/bytes to SD and FD.
+- Don't continue Restore if no files selected.
+- Print warning message if FileId > 4 billion
+- do a "messages" before the first prompt in Console
+- Add a date and time stamp at the beginning of every line in the
+ Job report (Volker Sauer).
+- Client does not show busy during Estimate command.
+- Implement Console mtx commands.
+- Look at 2Gb limit for SQLite.
+- Implement 3 Pools for a Job:
+ Job {
+ Name = ...
+ Full Backup Pool = xxx
+ Incremental Backup Pool = yyy
+ Differential Backup Pool = zzz
+ }
+- Add a default DB password to MySQL.
+ GRANT all privileges ON bacula.* TO bacula@localhost IDENTIFIED BY
+ 'bacula_password';
+ FLUSH PRIVILEGES;
+- Define week of year for scheduler. W01, W02, ...
+ Week 01 of a year is per definition the first week that has the
+ Thursday in this year, which is equivalent to the week that contains the
+ fourth day of January. In other words, the first week of a new year is
+ the week that has the majority of its days in the new year. Week 01
+ might also contain days from the previous year and the week before week
+ 01 of a year is the last week (52 or 53) of the previous year even if it
+ contains days from the new year. A week starts with Monday (day 1) and
+ ends with Sunday (day 7). For example, the first week of the year 1997
+ lasts from 1996-12-30 to 1997-01-05 and can be written in standard
+ notation as
+
+ 1997-W01 or 1997W01
+
+ The week notation can also be extended by a number indicating the day
+ of the week. For example, the day 1996-12-31, which is the Tuesday (day
+ 2) of the first week of 1997, can also be written as
+
+ 1997-W01-2 or 1997W012
+
+- Implement a Mount Command and an Unmount Command where
+ the users could specify a system command to be performed
+ to do the mount, after which Bacula could attempt to
+ read the device. This is for Removeable media such as a CDROM.
+ - Most likely, this mount command would be invoked explicitly
+ by the user using the current Console "mount" and "unmount"
+ commands -- the Storage Daemon would do the right thing
+ depending on the exact nature of the device.
+ - As with tape drives, when Bacula wanted a new removable
+ disk mounted, it would unmount the old one, and send a message
+ to the user, who would then use "mount" as described above
+ once he had actually inserted the disk.
+- Implement dump/print label to UA
+- Implement disk spooling. Two parts: 1. Spool to disk then
+ immediately to tape to speed up tape operations. 2. Spool to
+ disk only when the tape is full, then when a tape is hung move
+ it to tape.
+- Scratch Pool where the volumes can be re-assigned to any Pool.
+- bextract is sending everything to the log file ****FIXME****
+- Add Progress command that periodically reports the progress of
+ a job or all jobs.
+- Restrict characters permitted in a Resource name, and don't permit
+ duplicate names.
+- Allow multiple Storage specifications (or multiple names on
+ a single Storage specification) in the Job record. Thus a job
+ can be backed up to a number of storage devices.
+- Implement some way for the File daemon to contact the Director
+ to start a job or pass its DHCP obtained IP number.
+- Implement multiple Consoles.
+- Implement a query tape prompt/replace feature for a console
+- From Johan?
+ Two jobs ready to go, first one blocked waiting for media
+ Cancel 2nd job ("waiting execution" one)
+ Cancel blocked job
+ boom - segfault*
+- Copy console @ code to gnome2-console
+- Make AES the only encryption algorithm see
+ http://csrc.nist.gov/CryptoToolkit/aes/). It's
+ an officially adopted standard, has survived peer
+ review, and provides keys up to 256 bits.
+- Add ctl-c to console to stop current command and discard buffered
+ output.
+- Estimate to Tibs never returns.
+- Think about how space could be freed up on a tape -- perhaps this
+ is a Merge or Compact feature that is needed.
+- Modify FileSet, did not upgrade the current Increment job, but
+ waited for the next job to be upgraded.
+- Take a careful look at SetACL http://setacl.sourceforge.net
+- Implement a where command for the tree telling where a file
+ is located.
+- Take a careful look at Level for the estimate command, maybe make
+ it a command line option.
+- Add Volume name to "I cannot write on this volume because"
+- Make restore job check if all the files are actually restored.
+- Make tree walk routines like cd, ls, ... more user friendly
+ by handling spaces better.
+- Write your PID file and chown root:wheel before drop.
+- Make sure there is no symlink in a file before creating a
+ file (attack).
+- Look at mktemp or mkstemp(3).
+ mktemp and mkstemp create files with predictable names too. That's
+ not the vulnerability. The vulnerability is in creating files without
+ using the O_EXCL flag, which means "only create this file if it doesn't
+ exist, including if the file is a dangling symlink."
+
+ It is *NOT* enough to do the equivalent of
+
+ if doesn't exist $filename
+ then create $filename
+
+ because between the test and the create another process could have
+ gotten the CPU and created the file. You must use atomic functions
+ (those that don't get interrupted by other processes) and O_EXCL is
+ the only way for this particular example.
+- Automatically create pools, but instead of looking for what
+ in in Job records, walk through the pool resources.
+- Check and double check tree code, why does it take so long?
+- Add device name to "Current Volume not acceptable because ..."
+- Make sure that Bacula rechecks the tape after the 20 min wait.
+- Set IO_NOWAIT on Bacula TCP/IP packets.
+- Try doing a raw partition backup and restore by mounting a
+ Windows partition.
+- Report CVS problems to SourceForge.
+- Implement .consolerc for Console
+- From Lars Köllers:
+ Yes, it would allow to highly automatic the request for new tapes. If a
+ tape is empty, bacula reads the barcodes (native or simulated), and if
+ an unused tape is found, it runs the label command with all the
+ necessary parameters.
+
+ By the way can bacula automatically "move" an empty/purged volume say
+ in the "short" pool to the "long" pool if this pool runs out of volume
+ space?
+- Either restrict the characters in a name, or fix the problem
+ emailing with names containing / (smtp command line breaks).
+- Eliminate orphaned jobs: dbcheck, normal pruning, delete job command.
+ Hm. Well, there are the remaining orphaned job records:
+
+ | 105 | Llioness Save | 0000-00-00 00:00:00 | B | D | 0 | 0 | f |
+ | 110 | Llioness Save | 0000-00-00 00:00:00 | B | I | 0 | 0 | f |
+ | 115 | Llioness Save | 2003-09-10 02:22:03 | B | I | 0 | 0 | A |
+ | 128 | Catalog Save | 2003-09-11 03:53:32 | B | I | 0 | 0 | C |
+ | 131 | Catalog Save | 0000-00-00 00:00:00 | B | I | 0 | 0 | f |
+
+ As you can see, three of the five are failures. I already deleted the
+ one restore and one other failure using the by-client option. Deciding
+ what is an orphaned job is a tricky problem though, I agree. All these
+ records have or had 0 files/ 0 bytes, except for the restore. With no
+ files, of course, I don't know of the job ever actually becomes
+ associated with a Volume.
+
+ (I'm not sure if this is documented anywhere -- what are the meanings of
+ all the possible JobStatus codes?)
+
+ Looking at my database, it appears to me as though all the "orphaned"
+ jobs fit into one of two categories:
+
+ 1) The Job record has a StartTime but no EndTime, and the job is not
+ currently running;
+ or
+ 2) The Job record has an EndTime, indicating that it completed, but
+ it has no associated JobMedia record.
+
+
+ This does suggest an approach. If failed jobs (or jobs that, for some
+ other reason, write no files) are associated with a volume via a
+ JobMedia record, then they should be purged when the associated volume
+ is purged. I see two ways to handle jobs that are NOT associated with a
+ specific volume:
+
+ 1) purge them automatically whenever any volume is manually purged;
+ or
+ 2) add an option to the purge command to manually purge all jobs with
+ no associated volume.
+
+ I think Restore jobs also fall into category 2 above .... so one might
+ want to make that "The Job record has an EndTime,, but no associated
+ JobMedia record, and is not a Restore job."
+- make "btape /tmp" work.
+- Make sure a rescheduled job is properly reported by status.
+- Walk through the Pool records rather than the Job records
+ in dird.c to create/update pools.
+- What to do about "list files job=xxx".
+- Implement scan: for every slot it finds, zero the slot of
+ Volume other volume having that slot.