| Copyright | (c) 2008-2012 Duncan Coutts 2011 Max Bolingbroke  | 
|---|---|
| License | BSD3 | 
| Maintainer | duncan@community.haskell.org | 
| Portability | portable | 
| Safe Haskell | None | 
| Language | Haskell98 | 
Codec.Archive.Tar.Check
Contents
Description
Perform various checks on tar file entries.
- checkSecurity :: Entries e -> Entries (Either e FileNameError)
 - data FileNameError
 - checkTarbomb :: FilePath -> Entries e -> Entries (Either e TarBombError)
 - data TarBombError = TarBombError FilePath
 - checkPortability :: Entries e -> Entries (Either e PortabilityError)
 - data PortabilityError
 - type PortabilityPlatform = String
 
Security
checkSecurity :: Entries e -> Entries (Either e FileNameError) Source #
This function checks a sequence of tar entries for file name security problems. It checks that:
- file paths are not absolute
 - file paths do not contain any path components that are "
.." - file names are valid
 
These checks are from the perspective of the current OS. That means we check
 for "C:blah" files on Windows and "/blah" files on Unix. For archive
 entry types HardLink and SymbolicLink the same checks are done for the
 link target. A failure in any entry terminates the sequence of entries with
 an error.
data FileNameError Source #
Errors arising from tar file names being in some way invalid or dangerous
Constructors
| InvalidFileName FilePath | |
| AbsoluteFileName FilePath | 
Instances
Tarbombs
checkTarbomb :: FilePath -> Entries e -> Entries (Either e TarBombError) Source #
This function checks a sequence of tar entries for being a "tar bomb". This means that the tar file does not follow the standard convention that all entries are within a single subdirectory, e.g. a file "foo.tar" would usually have all entries within the "foo/" subdirectory.
Given the expected subdirectory, this function checks all entries are within that subdirectroy.
Note: This check must be used in conjunction with checkSecurity
 (or checkPortability).
data TarBombError Source #
An error that occurs if a tar file is a "tar bomb" that would extract files outside of the intended directory.
Constructors
| TarBombError FilePath | 
Instances
Portability
checkPortability :: Entries e -> Entries (Either e PortabilityError) Source #
This function checks a sequence of tar entries for a number of portability issues. It will complain if:
- The old "Unix V7" or "gnu" formats are used. For maximum portability only the POSIX standard "ustar" format should be used.
 - A non-portable entry type is used. Only ordinary files, hard links, symlinks and directories are portable. Device files, pipes and others are not portable between all common operating systems.
 - Non-ASCII characters are used in file names. There is no agreed portable convention for Unicode or other extended character sets in file names in tar archives.
 - File names that would not be portable to both Unix and Windows. This check includes characters that are valid in both systems and the '/' vs '\' directory separator conventions.
 
data PortabilityError Source #
Portability problems in a tar archive
Constructors
| NonPortableFormat Format | |
| NonPortableFileType | |
| NonPortableEntryNameChar FilePath | |
| NonPortableFileName PortabilityPlatform FileNameError | 
Instances
type PortabilityPlatform = String Source #
The name of a platform that portability issues arise from