KNOWN BUGS:

#1: description: files pointed to by a symbolic links get their times
        (mtime & atime) not properly restored

    problem: when restoring time of a symbolic link the utime() system call
        does not change the inode of the symbolic link itself but the one of
        the file pointed to by the symbolic link

    solution: as the utime() call behaves the same on many Unix platforms,
        (HP-UX, Solaris, Linux, etc.), the times for the symbolic links are
        no more restored, thus files pointed to by symbolic links are not
        affected by the utime() strange behavior. Dar, behaves not the
        same as touch, tar, etc.

    affects version: 1.0.0
    fixed in version: 1.0.1


#2: description: dar immediately exits with message "file mode is neither
        read nor write" while creating an archive on 64 bits platforms.

    problem: missing mask with O_ACCMODE for flags returned by fcntl()
        system call

    solution: O_ACCMODE mask added

    affects versions: 1.0.0, 1.0.1
    fixed in version: 1.0.2


#3: description: making differential backup with some directory implicitly or
        explicitly (-P) excluded, sometime lead to full backup.

    problem: when entering a directory that was ignored, the comparison in the
        catalogue of reference was not going back to the parent directory,
        leading the comparison to be no more synchronized with the file being
        read.

    solution: added a line to go back to parent directory when treating an
        ignored directory

    affects versions: 1.0.0, 1.0.1
    fixed in version: 1.0.2


#4: description: on Linux 64 bits, when an interaction from the user is
        required, (escape or return key), the keys have to be pressed four
        time before dar can read a character.

    problem:
        unknown, same code works fine on other platforms, and if bad character
        remains in the pipe, the message would be displayed several time,
        which is not the case, here. It seems that the user has to press four
        key for the first one to be accessible to dar.

    solution: none actually

    affects versions: 1.0.0, 1.0.1 , 1.0.2 and probably also 1.1.0
    fixed in version: none

#5: description: Dar stops one of the two following error:
   --- exception nature = [alive]  exception type = [BUG] ----------
   [source]
           file compressor.cpp line 244 : it seems to be a bug here
   [most outside call]
   -----------------------------------

       or

   --- exception nature = [alive]  exception type = [BUG] ----------
   [source]
           file compressor.cpp line 254 : it seems to be a bug here
   [most outside call]
   -----------------------------------

    problem:
        the zlib deflate() calls returned an unexpected value (Z_STREAM_END).
        and inflate() in some rare cases was called without data to process,
        when reaching end of file, which made inflate() to return Z_BUF_ERROR
        code.

    solution:
        adding code for taking care of the returned code Z_STREAM_END by
        deflate(), and code for taking care of Z_BUF_ERROR returned at end
        of file.

    affects version: 1.0.0, 1.0.1, 1.0.2
    fixed in version: 1.0.3


#6: description: Dar does not properly display dates on Linux 64 bits
        systems.

    problem:
        non portable cast from 'time_t' to 'unsigned long int'

    solution:
        changed code not to have to use 'unsigned long int'

    affects version: 1.0.x, 1.1.x
    fixed in version: 1.2.0


#7: description: while saving, Dar stops when a given inode could not be read,
        even if the inode had not to be saved

    problem:
        Dar reads all file in the directory to save, and then applies filters
        to their filename. Error appears before the filter, leading to a
        global saving error.

    solution:
        read error are now caught sooner a message is displayed that the file
        or directory will be ignored, and saving process continues. As
        this error occurs before testing filename against filters, an error
        message is still displayed (which may seems strange when the file was
        about to be excluded by filter mechanism)
                Just reminds that dar reads a directory contents first, and
        then check filenames against filter. At the time of the message, Dar
        does not know the file would not to be saved. Thus, don't worry if
        you see this kind of message, they don't mean that dar was about to
        save the given file but rather exactly what the message says, that
        the file or directory could not be read. ;-)

    affects version: 1.0.x, 1.1.x
    fixed in version: 1.2.0


#8: description: when saving hard linked file using filter that does not save
        the first hard link, dar stops with SEGFAULT.

    problem:
        The first hard link is used as reference for the following occurrences.
        As it is not covered by the filter it is destroyed in filter module,
        but filesystem module keeps using it as reference for following
        hard links on that inode.

    solution:
        added a call in filesystem module to "forget" a given reference. This
        way, if a file_etiquette is not covered, filter module can inform
        filesystem module to delete the corresponding entry on the hard link
        map. Subsequent hard link on that inode will generate first a new
        file_etiquette, which will be used as reference (unless it is not
        covered by filter too).

    affects version: 1.1.x
    fixed in version: 1.2.0


#9  description
        failed to read an archive under windows NT and 2000

    problem
        error concerning the integer macro definition (module integer.hpp)

    solution
        replaced the macro by a proper definition.


    affects version: 1.2.0
    fixed in version: 1.2.1

#10 description
        when using dar on windows95 if giving c:/ or other driver to -R
        option, dar stops with the following error :

        file filesystem.cpp line 186 : it seems to be a bug here

    problem
        dar checks first that c:/ is a directory. Cygwin says yes this
        dar continues : from c:/ dar completes the path with a dot thus
        dar tries to open the path c:/. which is Cygwin does not report
        as an existing directory.

    solution
        dar does not try to open c:/. but tries to open c:/ . Moreover
        additional code as been added to detect the incoherence if in
        some other conditions such problem occurs. Dar will report the
        exact problem (path does not exist / or path is not a directory)


    affects version: 1.2.1, 1.2.0
    fixed in version: 1.3.0

#11 description
        when giving to dar_manager an absolute path to -r option
        dar_manager stops with INTERNAL ERROR message.

    problem
        a check is missing to display error message in such condition

    solution
        added a error message, if an absolute path is given to -r

    affects dar_manager version   : 1.0.0
    fixed in dar_manager version  : 1.0.1

#12 description
        memory leakage when using -Z or -Y option. This bug has been
        found and explained by David Rose, who proposed a good patch,
        which I have just a little adapted.

    problem
        the dar code that call the zlib when changing the compression
        algorithm did properly released memory allocated by dar but
        forget to execute a call of the zlib library that releases memory
        allocate by the library itself.

    solution
        solution, add call to release memory used by zlib library when
        changing of compression algorithm

    affects dar version   : 1.2.0, 1.2.1
    fixed in dar version  : 1.3.0

#13 description
        archive created by dar under Windows NP SP6, XP, 2000, cannot be
        read, tested. All action on generated archive finishes by CRC error
        message, incoherent catalogue structure, or badly formated infinint.

    problem
        under windows, Dar uses Cygwin. As Unix and Window do not define
        end of line the same way (\n for Unix and \r\n for Windows),
        Cygwin translates end of line on the fly when reading a file
        (Windows to Unix), and when writing (Unix to Windows). At
        writing time especially, each \n anywhere in the archive
        is written \r\n, thus two bytes get written in place of one.
        In another hand, to get the global position in the whole archive
        dar counts bytes it writes to file. Thus a shift occurs between
        the position it thinks it writes the catalogue and the position
        it actually does. Thus reading the archive, the given position
        is wrong, and archive cannot be opened.

    solution
        deactivate the translation when generating the archive. Cygwin adds
         A two special flags to pass to open(2) which are O_TEXT and
        O_BINARY, that change the way Cygwin handles file read(2) and
        write(2).

    affects all dar suite program version 1.0.x, 1.1.x, 1.2.x
    fixed in dar version 1.3.0

#14 description
        Dar aborts with the following message

         ---- exception nature = [alive] exception type = [BUG] ----------
         [source]
         file compressor.cpp line 320 : it seems to be a bug here
         [most outside call]
         -----------------------------------

        appeared while doing a backup using compression and scrambling (could
        not (yet) be reproduced twice).

    problem
        this message is issued because zlib library reported an inconsistency
        in call order or in call arguments given to zlib calls. Actually I
        cannot figure out what is wrong, nor how this bug may happens.

    solution
        none actually at the time of 2.0.0 release.

        But, if you are face to face with this bug, thanks to try reproducing
        it, re-issuing the same command in the same condition, and if
        possible to reproduce then as much as possible reduce the necessary
        environment condition that make this bug happen. Then please, contact
        me (either via Sourceforge or via email).

    affects version 1.2.1 (at least)
    not yet fixed (check Sourceforge for fresh news), nor reproduced.

#15 description
       Dar aborts with the following message when giving -y0 as argument

       ---- exception nature = [alive]  exception type = [BUG] ----------
       [source]
              file compressor.cpp line 96 : it seems to be a bug here
       [most outside call]
       -----------------------------------

    problem
       correct compression level for zlib are from 0 to 9, 0 meaning no
       compression, while for libbz2 correct compression levels are from
       1 to 9, thus zero is not a valid value. libbz2 returns an error code
       which triggers a libdar internal sanity check code, which throws this
       BUG exception.


    solution
       forbid the use of -z0 or -y0. If you don't want compression, you will
       need to not give neither -z nor -y.

    affects version 1.3.0
    fixed in version 2.0.0

#16 description
       Dar include does not ignore comments in included file as given by -B
       option

    problem
       when a line with only one carriage-return is put in a file, the
       following line is considered as a normal line (not a comment), whatever
       it is, in particular if it starts with a hash (#).

    solution
       make the algorithm consider normal line once another character than
       space, tab hash or carriage-return is met. (added the carriage-return
       in the list).

    affects version 1.2.0, 1.2.1, 1.3.0
    fixed in version 2.0.0


#17 description
      Dar warns that the archive is about to save itself while a -P option is
      used to prevent this eventuality.

    problem
      testing against this situation did not check that a parent directory of
      the path where is saved the archive is excluded by a -P option.

    solution
      updating the test for the warning only appear in real auto-saving
      conditions.

    affects version 2.0.0
    fixed in version 2.0.1

#17bis description
      save as #17, but in the case where the archive is in the under the
      current directory, and some -P options exclude it.

    problem
       the current directory "." is not subsititued by its full path, and
       the testing algorithm does tread "." as directly under the root "/"
       directory, no -P could thus exclude it from the files to save.

    solution
       for testing and preventing self-backup, "." is replaced by its full
       path counterpart.

    affects version 2.0.0, 2.0.1,
    fixed in version 2.0.2

#18 description
      Dar does not save files or just stores empty directories when using
      -B option or having a ~/.darrc or /etc/darrc file

    problem
      the parsing code that strip the comments from files
      is not counting empty lines ('\n') between two lines of commands
      (i.e.: uncommented lines). This strips the last uncommented line before the
      next line of comment, usually leading to the removal of an ending '\n'
      in the uncommented line, implying the fusion of the last command on this
      line and the next command on any uncommented after the last line of comment
      two commands that were initially separated by a '\n' and one or several lines
      of comments. This wrongly interpreted command most of the time
      appear as a member of [list of path] and thus restricts the backup
      to only a subdirectory that most of the time does not exist. If -D option
      is used, all first level directory are excluded from backup and thus
      stored as empty directories.

   solution
      bug fix in no_comment.cpp. A workaround is to remove comments or empty
      lines from configuration files.

   affects versions 2.0.0, 2.0.1
   fixed in versions 2.0.2

#19 description
      Dar hangs when using --nodump with named pipe to save

    problem
      to get the nodump flag value, dar needs to call the open() system call
      in read-only mode. For named pipes this system call does return only when
      another process opens the same pipe in write mode.

    solution
      as proposed by Joshua Neal, the open will be set to non blocking mode
      to return immediately.

    affects version 1.3.0, 2.0.0, 2.0.1
    fixed in version 2.0.2

#20 description
      dar_manager did not completely removed reference to an archive when it
      was removed from a database

    problem
      data_dir is a C++ class that inherit from data_tree. This one has a
      virtual method remove_all_from(), that had was redefined in the data_dir
      class with a very little difference, making it not be a redefinition
      of the inherited class. (argument was "archive_num" in place of "const
      & archive_num"). This redefined method was never called, and the removal
      never recursed in subdirectories.

    solution
      make the two signature identical in the mother and inherited classes.

    affects version 1.3.0, 2.0.0, 2.0.1, 2.0.2
    fixed in version 2.0.3

#21 description
      under FreeBSD using -B option leads to parse error

    problem
      under FreeBSD, getopt() call is not reset just by setting optind to
      zero like under Linux, but the variable optreset must be set to 1.

    solution
      configure script now check for the presence of optreset variable
      which allows to properly reset the getopt call according to the
      system nature.

    affects version 2.1.0 and older
    fixed in version 2.1.1

#22 description
      dar stops when fed with an empty file for -B option

    problem
      the comments stripping class lack a variable initialization

    solution
      initialize variable before use

    affects version 2.1.0 and older
    fixed in version 2.1.1


#23 description
      -z -y -H and -w do not work under FreeBSD

    problem
      the getopt() version does not support optional arguments

    solution
      document this problem, and make possible to reach any feature

      in the meanwhile, replace
          -z    by   -z 9
          -y    by   -y 9
          -H    by   -H 1
          -w    by   -w d (added for the circumstances)

    affects all versions
    documented starting version 2.1.2 (see dar's man page)

#24 description
      under windows 2000 SP4 failed to properly save a text file with DOS
      carriage return. Testing the archive reports CRC error.

    problem
      The cygwin adaptation layer for dar to be able to run under windows,
      needs non standard flag mode to not automatically translate between
      windows and unix carriage return. This bug is related to bug #13
      which fix was not properly applied in one single place.

    solution
      properly apply the fix of bug #13 in this single place too.

    affects version 2.1.1 and older
    fixed in version 2.1.2

#25 description
      under some hypothetical conditions (when the archive is larger than
      10^16 Terabytes, 1 followed by 16 zeros), dar is not able to read
      the archive.

    problem
      In this situation, the terminateur is not properly formed and cannot
      fulfill its role: point to the start of the catalogue. A byte 0x00 is
      missing near the end of the archive, that indicate the end of the
      terminateur.

    solution
      properly write down terminateur string of archive. Note that archive
      produced by earlier version are not possible to read dar version
      that have the fix, but don't worry, if you have a such big archive
      (more than 10^16 Terabytes), tell me I will create a little program
      that fixes the archive ;-) . Note, "terminateur" the french word for
      terminator, the word has been kept here because it is used in the
      source code.

    affects version 2.1.2 and older
    fixed in version 2.1.3

#26 description
      in configuration file using conditional syntax (see man page), when
      two targets follow each other on two directly following lines (the
      first condition is thus empty), the second condition is skipped. This
      condition also occurs if there is only comments between the two targets.

    problem
      when looking for the first target, an extra character is read (the first
      of the second target), as there is no contents in this target no
      reposition (seek) in the file is done, and the search for the next target
      start at that point (second character of the second target), which makes
      the second target not recognized because of the missing initial
      character.

    solution
      avoid reading this extra character so the next character to read is the
      first character (not the second) of the following target.

    affects version 1.2.0 and older versions
    fixed in version 2.1.3


#27 description
      when restoring only more recent files (-r), with hourshift activated (-H)
      the -H feature was randomly not activated.

    problem
      a test comparing the dates is made on address's objects rather on objects
      themselves. This leads to the -H test being activated randomly depending
      on address of two objects to compare.

    solution
      make the test on objects rather than on their addresses in memory.

    affects version from 2.0.0 to 2.1.3
    fixed in version 2.1.4

#28 description
      dar does not restore root Extended Attributes

    problem
      a collision occurred in the naming of the enumeration listing the
      extended attributes available domains, and the variables carrying
      user choice to consider or not user or root extended attributes for
      the operation (backup, restoration, comparison, etc.)

    solution
      rename both the domain enumeration and the variables carrying
      user choice about extended attribute comportment.

    affects version from 2.1.0 to 2.1.3
    fixed in version 2.1.4

#29 description
      dar does Segmentation fault during backup when hard links are involved

    problem
      when an plain file inode linked several time to the directory tree
      (a hard linked file), is not readable due to a lack a permission,
      the filesystem module generates a C++ object and stores its address
      for further reference and hard link handling. When the file opening
      comes an exception is throw, leading to this object destruction, but the
      reference stays in the the filesystem module, leading the next link to
      this inode being referenced by a destroyed object.

    solution
      remove the reference when exception is caught. This removal was properly
      done when such an inode was not to be saved (and the corresponding C++
      object was destroyed), the case of the exception had been forgotten.

    affects version up to 2.1.4
    fixed in version 2.1.5

#30 description
      compilation failed with syntax error reported in libstdc++ header
      files (reported on Solaris and openBSD).

    problem
      the configure scripts does detect the presence of mbstate_t type, and
      redefines it. This conflicts the system header files and lead to a syntax
      error.

    workaround 1
      will update the configure script to check if that fixes the problem. Else
      there is a workaround. Once configure has finished, edit the config.h
      file adding the line
            #define HAVE_MBSTATE_T 1
      and commenting out the line
            #define mbstate_t int
      Thanks to Steve Evans for this workaround.

    solution
      undefine the mbstate_t in dar's source code. This is implemented and
      seems to work. No action is required for your part.

    may affects version up to 2.2.0
    fixed in version 2.2.1


#31 description
      dar segfault when restoring Extended Attributes

    problem
      to speed up the reading of the catalogue from an archive an intermediate
      layer has been added thanks to an "cache" object. This object is temporary
      instead of the object it does caching on. When the catalogue reading has
      finished, the reference given to inode becomes invalid because it is
      the caching object in place of the real underlying archive object.

   solution
      keep doing archive reading through the caching object but give the real
      archive object to the inode contained in the catalogue for they have a
      valid reference when it is time to restore EA.

    affects version 2.2.0
    fixed in version 2.2.1

#32 description
      dar is unable to read blowfish encrypted archives under certain conditions

    problem
      this bug appears when using infinint (no --enable-mode in command-line).
      The implicit cast from a unsigned integer to an infinint in a operation
      was not properly made by the compiler. Instead of converting the system
      integer to an infinint which is possible thanks to the infinint constructor
      class, the compiler down cast the the unsigned integer to unsigned char.

    solution
      use explicit cast conversion when doing operations which concern both
      infinint and unsigned integers.

    affects version 2.2.0
    fixed in version 2.2.1

#33 decription
     dar hangs when the last line of a DCF file is starting with a few spaces or
     tabs just following a comment.

    problem
      The layer that removes comments was counting the bytes from the beginning
      while the first byte retained as significative was the first non space of
      the line. leading to provide to upper layer a wrong information about the
      number of byte in the file.

    solution
      start counting bytes from the first significative byte of the line instead
      of the first byte of the line.

    affects versions 2.1.x up to 2.2.0
    fixed in version 2.2.1

#34 description
     when restoring files in a directory, this one has all permission set for
     every body. This makes a security hole on multi-user system.

    problem
     when restoring in a directory as non privileged user it is necessary to
     have write access to that directory, thus temporary change the permission.
     The permission is thus changed, but the temporary change is too permissive,
     thus opens a security hole, allowing local user delete/create/replace under
     the directory restored.

    solution
     only add the user write access (if necessary) to the directory when dar
     is run as non privileged user.

    affects versions 1.x.x up to 2.2.0
    fixed in version 2.2.1
