Commit Graph

781 Commits

Author SHA1 Message Date
Sergey Poznyakoff
a5375b618c (purge_directory): Do not dereference symbolic links. Bug reported by Ralph Corderoy <ralph@inputplus.co.uk> and David Brown <davidb@davidb.org> 2005-09-03 10:27:13 +00:00
Sergey Poznyakoff
220ffceb44 (read_directory_file): Use strtoumax to read snapshot file contents. 2005-08-17 14:51:50 +00:00
Sergey Poznyakoff
c9c76e7d56 (file_dumpable_p,dump_file0): Fix handling of sparse files to /dev/null with --totals option. 2005-08-01 06:22:21 +00:00
Sergey Poznyakoff
1992b53b8c (tar_sparse_init): Fill structure with zeros. Call
sparse_select_optab(). All callers updated.
(sparse_member_p, sparse_fixup_header): Use tar_sparse_init().
2005-06-25 09:13:01 +00:00
Sergey Poznyakoff
2e9ea5f4a7 (pax_sparse_member_p): Checking member size vs. file size is not reliable enough. Use sparse_map_avail. 2005-06-23 12:57:07 +00:00
Sergey Poznyakoff
d9045bf409 (size_decoder): Do not set archive_file_size 2005-06-23 09:51:05 +00:00
Sergey Poznyakoff
225e690142 (sparse_scan_file): Fix another bug, introduced yesterday: Initialize
archive_file_size to 0. The variable keeps size of the file *as stored
in the archive*, not the size reported by stat.
2005-06-23 09:10:28 +00:00
Sergey Poznyakoff
37d2462d7c (tar_sparse_init): Fix recent bugfixes: Initialize dumped_size to 0. 2005-06-23 08:27:22 +00:00
Paul Eggert
040b5ab5f9 A sweep of the sparse code prompted by a bug report by Jim Meyering.
* src/sparse.c: Include <inttostr.h>.
(struct tar_sparse_file): offset and dumped_size are off_t, not
size_t.  optab is now const *.
(dump_zeros): Return bool success flag, not off_t.
All callers changed.
Use a constant-zero buffer rather than clearing a buffer each time.
Don't mess up if write fails.
(dump_zeros, check_sparse_region):
Don't assume off_t is no wider than size_t.
(tar_sparse_init): Don't bother clearing a field that is already clear.
(zero_block_p): First arg is const *, not *.
(clear_block, SPARSES_INIT_COUNT): Remove.
(sparse_add_map): First arg is now struct start_stat_info *, not
struct tar_sparse_file *.  All callers changed.
Use x2nrealloc to check for size_t overflow.
(parse_scan_file): Cache commonly-used parts of file.
Use an auto buffer, not a static one.
Don't bother clearing the buffer; not needed.
Don't bother clearing items that are already clear.
(oldgnu_optab, star_optab, pax_optab): Now const.
(sparse_dump_region): Don't bother clearing the buffer before
reading into it; just clear the parts that aren't read into.
(sparse_dump_file): Clear the whole local variable 'file'.
(diff_buffer): Remove; now a local var.
(check_sparse_region): Don't bother clearing buffer before
reading into it.  Don't assume off_t is promoted to long.
(oldgnu_get_sparse_info, star_get_sparse_info):
Use an auto status, not static.
* src/tar.h (struct tar_stat_info): had_trailing_slash is
now bool, not int.
* src/xheader.c (sparse_offset_coder, sparse_numbytes_coder):
Rewrite to avoid cast.
(sparse_offset_decoder, sparse_numbytes_decoder):
Diagnose excess entries rather than crashing.
2005-06-23 06:55:01 +00:00
Paul Eggert
4f4a858eb6 * src/common.h (timespec_lt): Add a return type: bool. 2005-06-23 03:19:03 +00:00
Paul Eggert
d659cbaccd Carefully crafted invalid headers can cause buffer overrun.
Invalid header fields go undiagnosed.
Some valid time strings are ignored.

* NEWS: Better support for full-resolution time stamps.
The -v option now prints time stamps only to 1-minute resolution.
* gnulib.modules: Add utimens.
* lib/.cvsignore: Add imaxtostr.c, inttostr.c, inttostr.h,
offtostr.c, umaxtostr.c, utimens.c, utimens.h.  Remove paxconvert.c.
* lib/Makefile.tmpl (libtar_a_SOURCES): Remove paxconvert.c.
* lib/paxconvert.c: Remove; superseded by umaxtostr.c.
* po/POTFILES.in: Remove lib/paxconvert.c.  Add lib/xalloc-die.c,
lib/obstack.c.
* src/buffer.c (set_start_time, compute_duration, start_time):
Use gettime rather than rolling our own code.
* src/common.h (OLDGNU_NAME_FIELD_SIZE, MAXOCTAL11, MAXOCTAL7): Remove.
(newer_ctime_option): Remove.
(timespec_lt): New function.
(OLDER_STAT_TIME): Use it.
(string_to_chars): First arg is char const *, not char *.
(tartime): Time arg is now struct timespec.  New bool arg.
All callers changed.
(code_ns_fraction): New decl.
(sys_stat_nanoseconds): Remove decl.
(get_stat_atime, get_stat_ctime, get_stat_mtime): New functions.
(set_stat_atime, set_stat_ctime, set_stat_mtime): New functions.
* src/compare.c: Include utimens.h rather than rolling our own.
(diff_dir, diff_file, diff_link, diff_symlink, diff_special):
Prototype.
(diff_dumpdir, diff_multivol): Prototype.
(diff_file): Support higher-resolution time stamps.
* src/create.c: Include utimens.h rather than rolling our own.
(MAX_OCTAL_VAL): New macro.
(tar_copy_str, string_to_chars): Don't bother to zero-fill;
the destination is already zeroed.
(string_to_chars): First arg is char const *.
(start_private_header): Use MINOR_TO_CHARS, not MAJOR_TO_CHARS,
for minor device number.
(write_header_name, dump_hard_link, dump_file0):
Simplify test for old GNU format.
(start_header): Put in placeholders for uid, etc., even when
using extended headers, for benefit of older "tar" implementations.
Don't assume uintmax_t is wider than 32 bits.
Output extended header for mtime if needed.
(dump_regular_finish, dump_file0):
Support extended time stamp resolution.
* src/extract.c: Include utimens.h rather than rolling our own.
(check_time): Support extended time stamp resolution.
* src/list.c: Include <inttostr.h>.
(tartime): Use umaxtostr rather than stringify_uintmax_t_backwards.
* src/xheader.c: Include <inttostr.h>.
Do not include <xstrtol.h>.
(strtoimax) [!HAVE_DECL_STRTOIMAX && !defined strtoimax]: New decl.
(strtoumax) [!HAVE_DECL_STRTOUMAX && !defined strtoumax]: New decl.
(BILLION, LOG10_BILLION): New constants.
(to_decimal): Remove; superseded by inttostr.  All callers changed
to use umaxtostr.
(xheader_format_name): Don't assume pids and uintmax_t values
fit in 63 bytes (!) when printed.
(decode_record): Don't bother to check for ERANGE; an out of range
value must be treater than len_max anyway.
If the length is out of range, output it in the diagnostic.
(format_uintmax): Remove; all callers changed to use umaxtostr.
(xheader_print): Don't assume sizes can be printed in 99 bytes (!).
(out_of_range_header): New function.
(decode_time): Use it.
(code_time): Accept struct timespec, not time_t and unsigned long.
All callers changed.  Size sbuf properly, and remove unnecessary check.
Don't assume time stamps can fit in 199 bytes.
Handle negative time stamps.  Handle fractional time stamps
more consistently.  Don't output unnecessary trailing zeros.
(decode_time): Yield struct timespec, not time_t and unsigned long.
All callers changed.
Handle negative time stamps.  Truncate towards minus infinity
consistently.  Improve overflow checks, and output a better
diagnostic on overflow.
(code_num): Don't assume uintmax_t can be printed in 99 bytes (!).
(decode_num): New function, for better diagnostics.
(atime_coder, atime_decoder, gid_decoder, ctime_coder):
(ctime_decoder, mtime_coder, mtime_decoder, size_decoder):
(uid_decoder, sparse_size_decoder, sparse_numblocks_decoder):
(sparse_offset_decoder, sparse_numbytes_decoder):
Use decode_num, etc., instead of xstrtoumax, etc.

* src/xheader.c (sparse_numblocks_decoder): Remove unchecked use
of `calloc'.  Use xcalloc instead.
(decode_time, gid_decoder, size_decoder, uid_decoder):
(sparse_size_decoder, sparse_offset_decoder, sparse_numblocks_decoder):
Ensure that the result of calling xstrtoumax is no larger than
the maximum value for the target type.  Upon any failure, exit with
a diagnostic.
(sparse_numblocks_decoder): Avoid buffer overrun/heap corruption:
use x2nrealloc, rather than `n *= 2' and xrealloc(p, n,....
(decode_time): Rewrite to accept time strings like
1119018481.000000000.  Before, such strings were always ignored.
2005-06-22 06:24:39 +00:00
Sergey Poznyakoff
c6cde895e3 (dump_file0): Check for is_avoided_name() first. Fixes bug reported by Martin Lohmeier 2005-06-13 19:09:45 +00:00
Paul Eggert
5c4ea58bd7 * src/names.c (excluded_name): excluded_filename ->
excluded_file_name, because the name was changed in gnulib.
2005-06-02 21:02:58 +00:00
Sergey Poznyakoff
fb7b2f3645 (read_name_from_file,update_argv): Automatically detect nul-terminated list files. 2005-05-30 15:15:10 +00:00
Sergey Poznyakoff
ca5e64504b (hash_string_hasher,hash_string_compare)
(hash_string_insert,hash_string_lookup,removed_prefixes_p)
(safer_name_suffix): Moved to paxutils
2005-05-21 23:11:26 +00:00
Sergey Poznyakoff
cc07b9e170 Include paxlib.h instead of paxerror.h
(safer_name_suffix,removed_prefixes_p): Removed. The functions are
imported from paxutils
2005-05-21 23:10:57 +00:00
Sergey Poznyakoff
f2c8b1dff3 Update invocations of safer_name_suffix() 2005-05-21 23:10:42 +00:00
Sergey Poznyakoff
5c35fdb275 Remove defines and declarations imported from paxutils 2005-05-19 15:34:19 +00:00
Paul Eggert
c172481f41 (remove_any_file): Fix typo in previous change. 2005-05-17 08:34:03 +00:00
Paul Eggert
46f09016e8 Port to Solaris 10's treatment of unlinking directories.
* gnulib-modules: Add unlinkdir.
* lib/.cvsignore: Add unlinkdir.h, unlinkdir.c.
* src/common.h (we_are_root): Remove extern decl; it's now static.
* src/extract.c (we_are_root): Now static.
* src/misc.c: Include <unlinkdir.h>.
(remove_any_file): Use cannot_unlink_dir () rather than	we_are_root.
2005-05-15 06:23:49 +00:00
Paul Eggert
120e96c480 Update FSF postal mail address. 2005-05-15 03:59:08 +00:00
Sergey Poznyakoff
8d064bb816 (file_newer_p): Return false if file does not exist 2005-05-12 15:39:34 +00:00
Sergey Poznyakoff
29c902bc49 (dump_regular_file): Correctly pad archive members that shrunk during archiving. Repored by Frank Heckenbach. 2005-05-12 15:39:21 +00:00
Sergey Poznyakoff
d78f85d61d (diff_file): diff_handle was not initialized 2005-05-12 15:39:02 +00:00
Paul Eggert
bb8dcc1e8c Update copyright. 2005-05-02 08:05:59 +00:00
Paul Eggert
87bd7f5d1c Update copyright. 2005-05-02 08:05:23 +00:00
Paul Eggert
9b7c6df82b Adjust to new hash API. 2005-05-02 08:02:09 +00:00
Paul Eggert
82c746410d (parse_opt): Adjust to new modechange API. 2005-05-02 07:36:09 +00:00
Paul Eggert
2e025f2dea (start_ueader): Adjust to new modechange API. 2005-05-02 07:35:47 +00:00
Paul Eggert
f2e17c0d8c (initial_umask): New var. 2005-05-02 07:34:53 +00:00
Paul Eggert
27b98aa8ae * src/buffer.c (reading_from_pipe): Remove. All uses removed.
(short_read): Don't warn about short reads; they're normal.
* tests/shortrec.at: New file.
* tests/testsuite.at: Include it.
2005-04-18 18:21:50 +00:00
Paul Eggert
005d0d455c Use UTF-8 uniformly, rather than UTF-8 sometimes and Latin-1 sometimes. 2005-04-16 07:22:13 +00:00
Sergey Poznyakoff
d7af510d49 (SOLARIS_XHDTYPE): New define 2005-04-14 13:14:38 +00:00
Sergey Poznyakoff
ef0e611663 Handle Solaris 'X' type flag 2005-04-14 13:14:23 +00:00
Sergey Poznyakoff
2d34da98d5 Assign orig_file_name
to save_name uniformly over the program. This fixes matching
directory names at the start of an archive volume.
2005-04-07 17:27:07 +00:00
Sergey Poznyakoff
781d3818e5 (diff_init): Read directory file if in listed
incremental. This prevents spurious 'Contents differ' diagnostics.
(diff_archive): Minor fixes to text messages
(diff_file,diff_dumpdir,diff_multivol): Assign orig_file_name
to save_name uniformly over the program. This fixes matching
directory names at the start of an archive volume.
2005-04-07 17:26:42 +00:00
Sergey Poznyakoff
c861b96651 (flush_write): Warn when the name of the archive
straddling volume boundary is longer than 100 characters. Earlier
behavior was to issue a fatal error.
(struct zip_magic): Reverted part of changes from 2005-04-04.
They make the maintenance too costly. Removing `unsigned'
qualifier from `magic' member should be enough.
2005-04-07 17:26:11 +00:00
Sergey Poznyakoff
2872a5ae81 Minor fixes to text messages. Proposed by Benno Schulenberg.
(extract_file): Assign orig_file_name
        to save_name uniformly over the program. This fixes matching
        directory names at the start of an archive volume.
2005-04-07 17:25:29 +00:00
Sergey Poznyakoff
62599b5285 Minor fixes to text messages. Proposed by Benno Schulenberg. 2005-04-07 17:24:56 +00:00
Paul Eggert
7d4bd5b38d (struct zip_magic): Use char arrays, not pointers.
The unsigned char * pointer ran afoul of pedantic C compilers, and
we didn't need pointers anyway.  Put the size field before the
data to avoid unnecessary padding.  All uses changed.
(magic) Make it const, since it doesn't change.  All uses changed.
2005-04-04 18:21:55 +00:00
Paul Eggert
95fa3422d7 (decode_record): Don't dump core when given
a corrupted extended header.  Problem reported by Jim Meyering.
Also, check for other ways that the header might be invalid,
e.g., missing newline at end.  Do not allow keys with nulls.
Allow blanks before and after length, as POSIX requires.
Do not allow leading "-" in length.  Check for length overflow.
(xheader_decode, xheader_decode_global): Let decode_record
check for exhaustion of record.
(xheader_read): Null-terminate the extended record;
decode_record relies on this.
2005-04-02 06:39:19 +00:00
Sergey Poznyakoff
b320151a23 (sparse_scan_file): Bugfix. offset had incorrect type. 2005-03-03 23:13:30 +00:00
Sergey Poznyakoff
9fc348aae9 Correctly parse empty uname/gname 2005-03-03 23:13:14 +00:00
Sergey Poznyakoff
0fd49f51a0 (print_header): Print UID/GID in case of
empty user/group name. This could occur when dumping
files belonging to non-existing users and when listing
broken archives.
Reported by Igor Lautar.
2005-03-03 23:13:04 +00:00
Sergey Poznyakoff
549a691ada Replace strdup with xstrdup 2005-02-15 15:24:35 +00:00
Sergey Poznyakoff
6e63133691 (read_header): Removed assignment to oldgnu_header.isextended. It was breaking append mode. 2005-02-10 22:51:21 +00:00
Sergey Poznyakoff
5c2e32780e Various fixes in help and diagnostic messages 2005-02-06 20:01:22 +00:00
Sergey Poznyakoff
cd02b0855c (options): Improved sorting. Document --backup=off.
(decode_options): Clear backup_option if necessary.
2005-02-05 22:03:10 +00:00
Sergey Poznyakoff
35bb355734 (sys_exec_command): Use xclose, xpipe, xfork, xdup2 and exec_fatal. 2005-02-05 22:02:08 +00:00
Sergey Poznyakoff
fa63755f6b (exec_error,fork_error,dup2_error,pipe_error): Removed unneeded functions. 2005-02-05 22:01:49 +00:00