ChangeLog 466 KB
Newer Older
Bdale Garbee's avatar
Bdale Garbee committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
2014-07-27  Sergey Poznyakoff  <gray@gnu.org>

	Version 1.28

2014-07-27  Nathan Stratton Treadway  <nathanst@ontko.com>

	Minor change in docstrings. nor ch#

	Restructure the remfiles testsuite.

2014-07-22  Sergey Poznyakoff  <gray@gnu.org>

	Don't build ttyemu and run tty I/O test if grantpt is not
	available.

	* configure.ac (TAR_COND_GRANTPT): Define conditional depending
	on whether grantpt is available.
	* gnulib.modules: Remove grantpt. It relies upon a helper binary
	pt_chown which it installs and which is useless in the testsuite.
	* tests/Makefile.am [TAR_COND_GRANTPT]: Build ttyemu
	* tests/iotty.at: Skip test if ttyemu is not build.
	* tests/ttyemu.c (noecho): Fix error message
	(main): Use TIOCSCTTY if it is defined.

2014-07-22  Benno Schulenberg  <bensberg@justemail.net>

	Fix a typo and some wordings in the documentation.

	* doc/tar.texi: Fix some missing articles, and make it clearer
	that "any" does not mean "anything" but "either of the two".

2014-07-22  Nathan Stratton Treadway  <nathanst@ontko.com>

	Fix the testsuite

	* tests/incr07.at: Don't assume case-sensitive filesystem.

2014-07-11  Paul Eggert  <eggert@cs.ucla.edu>

	tar: minor fixups related to recent checkpoint.c change

	* src/checkpoint.c (getwidth, format_checkpoint_string):
	Use long and strtol, not int, to avoid overflow issues.
	(getwidth): Don't assume termios.h defines TIOCGWINSZ,
	as it doesn't on some older hosts.

2014-07-11  Sergey Poznyakoff  <gray@gnu.org>

	Bugfixes

	* gnulib.modules: Add faccessat
	* src/checkpoint.c: Include termios.h

2014-06-29  Nathan Stratton Treadway  <nathanst@ontko.com>

	tar: document xgetcwd test case better

	* src/misc.c (normalize_filename): Add commentary for clarity.
	* tests/extrac09.at: Retitle test case and add comments for
	clarity.

2014-06-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix typos in ChangeLog

	* ChangeLog.CVS: Fix typos.
	* ChangeLog.amend: New file.
	* Makefile.am: Define changelog_amend_file.

2014-04-30  Paul Eggert  <eggert@cs.ucla.edu>

	tar: do not dereference NULL pointer with '--remove-files .'

	Problem reported by Thorsten Hirsch in:
	http://lists.gnu.org/archive/html/bug-tar/2014-04/msg00011.html
	* src/unlink.c (flush_deferred_unlinks):
	Do not attempt to find the parent of "." when "." is
	at the top level.
	* tests/remfiles10.at: New file.
	* tests/Makefile.am (TESTSUITE_AT):
	* tests/testsuite.at: Add it.

2014-03-27  Sergey Poznyakoff  <gray@gnu.org>

	Refuse to write archive contents to a tty.

	* NEWS: Update.
	* src/buffer.c (_open_archive): Refuse to write to a tty.
	* tests/iotty.at: Test output to a tty.

2014-03-26  Vitezslav Cizek  <vcizek@suse.cz>

	fix an eternal loop in handle_option

	* src/names.c (handle_option): increment loop counter

2014-03-20  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fail if archive comes from a terminal.

	Based on patch from Pavel Raiskup <praiskup@redhat.com>.

	* gnulib.modules: Add new modules.
	* src/buffer.c (_open_archive): Refuse to read archive from a tty.
	* tests/Makefile.am (TESTSUITE_AT): Add iotty.at
	(check_PROGRAMS): New program ttyemu
	* tests/testsuite.at: Include iotty.at
	* tests/iotty.at: New file.
	* tests/ttyemu.c: New file.

2014-03-13  Paul Eggert  <eggert@cs.ucla.edu>

	tar: port to Solaris 9

	Problem reported by Jesse C in:
	http://lists.gnu.org/archive/html/bug-tar/2014-03/msg00034.html
	* gnulib.modules: Add strtoimax and strtoumax, since tar invokes
	these functions directly and they don't exist on Solaris 9.

2014-02-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Test the --[no-]recursive options (see commit 2bd9c153_.

	* tests/recurs02.at: New test case.
	* tests/Makefile.am: Add new file.
	* tests/testsuite.at: Add new file.

2014-02-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	Support exclusion patterns from various VCS ignore lists.

	* src/Makefile.am (tar_SOURCES): Add exclist.c
	* src/common.h (EXCL_DEFAULT, EXCL_RECURSIVE)
	(EXCL_NON_RECURSIVE): New flags.
	(excfile_add, info_attach_exclist)
	(info_cleanup_exclist,info_free_exclist)
	(exclude_vcs_ignores): New prototypes.
	* src/create.c (dump_dir0): Call info_attach_exclist.
	* src/exclist.c: New file.
	* src/incremen.c (scan_directory): Call info_attach_exclist.
	* src/names.c (excluded_name): Moved to exclist.c. Change
	signature.
	All uses updated.
	* src/tar.c: New options: --exclude-ignore,
	--exclude-ignore-recursive
	and --exclude-vcs-ignores.
	(tar_stat_destroy): Free exclist.
	* src/tar.h (tar_stat_info): New member exclude_list.

	* NEWS: Document new exclusion options.
	* doc/tar.texi: Likewise.
	* doc/tar.1: Likewise.

2014-02-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix in testsuite

	* acls03.at: Fix improper invocation of setfacl.

2014-02-14  Pavel Raiskup  <praiskup@redhat.com>

	testsuite: add test for buggy default ACLs

	* tests/Makefile.am: Mention acls03.at.
	* tests/testsuite.at: Likewise.
	* tests/acls03.at: New testcase.

2014-02-14  Pavel Raiskup  <praiskup@redhat.com>

	acls: bugfix for default ACLs extraction

	When --acls option is on (regardless of tarball contents or
	tarball format), we should explicitly set OR delete default ACLs
	for extracted directories.  Prior to this update, we always
	created arbitrary default ACLs based standard file permissions.

	* configure.ac (with_posix_acls): Check also for acl_free and
	acl_delete_def_file to mark IEEE 1003.1e ACLs as supported.
	* src/xattrs.c (acl_delete_def_file_at): New function.
	(xattrs__acls_set): Do not treat acls_option at all;  Delete
	default ACLs if appropriate.

	References:
	http://www.mail-archive.com/bug-tar@gnu.org/msg04355.html
	Thanks: Juan J. Martínez and Mark Steinborn

2014-02-14  Pavel Raiskup  <praiskup@redhat.com>

	tar: imply --xattrs when --xattrs-{inc,exc}lude used

	Options --xattrs-include=MASK and --xattrs-exclude=MASK now turn
	on the --xattrs option.

	Fix also bug in printing in xattrs.c - don't print when option is
	negative.

	* src/tar.c (set_xattr_option): New static function.
	(parse_opt): Call new function when --xatrrs, --xattrs-include or
	--xattrs-exclude option is used.
	* src/xattrs.c (xattrs_print, xattrs_print_char): Expect positive
	values in options.

2014-02-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	THANKS: Add Anthony G. Basile.

2014-02-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use correct headers/libraries when providing xattr support

	See https://savannah.gnu.org/patch/index.php?8252. Patch provided
	by Anthony G. Basile.

	* acinclude.m4 (TAR_HEADERS_ATTR_XATTR_H): Look for <sys/xattr.h>
	first and then for <attr/xattr.h>.  Link against libattr.so if
	needed.
	* lib/xattr-at.h: Include sys/xattr.h or attr/xattr.h, depending
	on which one is detected.
	* src/Makefile.am [TAR_LIB_ATTR] (tar_LDADD): Link against -lattr.

2014-02-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change

	* src/tar.c (decode_options): Silently ignore --one-top-level
	if used with a non-reading command.

2014-02-14  Sergey Poznyakoff  <gray@gnu.org>

	New option --sort=ORDER

	This option makes tar sort the entries of directories that will be
	added to an archive according to ORDER (none, name, or order).

	Based on proposition by Dick Streefland
	(https://savannah.gnu.org/patch/?7892).

	* src/common.h (savedir_sort_order): New global.
	* src/create.c: Pass savedir_sort_order to streamsavedir.
	* src/misc.c: Likewise.
	* src/tar.c: New option --sort.

	* NEWS: Update.
	* doc/tar.texi: Document the --sort option.
	* doc/tar.1: Likewise.

2014-02-13  Sergey Poznyakoff  <gray@gnu.org>

	Fix the testsuite

	* tests/opcomp01.at: Update expected error messages.
	* tests/opcomp03.at: Likewise.

2014-02-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix --one-top-level used together with --list.

	* src/extract.c: Move one_top_level stuff to tar.c
	(decode_options).
	* src/tar.c (option_conflict_error): New function.
	(decode_options): Use option_conflict_error to complain about
	conflicting options in a uniform manner.
	Process one_top_level options here.
	(request_stdin): Fix error message.
	* tests/onetop04.at: New testcase: check --one-top-level with
	--list.
	* tests/Makefile.am: Add new testcase.
	* tests/testsuite.at: Add new testcase.

2014-02-13  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix NEWS

	* NEWS: Remove duplicate description of the --one-top-level
	option.

2014-02-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	configure.ac: look for host-prefixed ar

	See https://savannah.gnu.org/patch/?8183

2014-02-10  Sergey Poznyakoff  <gray@gnu.org>

	Bugfix

	* src/suffix.c (find_compression_suffix): Fix eventual coredump.

2014-02-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix docs.

2014-02-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update docs.

	* NEWS: Document --one-top-level
	* THANKS: Mention Connor Behan

2014-01-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update copyright years.

2014-01-28  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve one-top-level functionality

	Make sure the changes become visible with
	--show-transformed-names.

	* src/common.h (strip_compression_suffix): New function.
	(one_top_level): Rename to one_top_level_dir. All uses changed.
	* src/extract.c (extr_init): Use strip_compression_suffix.
	Bail out if unable to determine top-level directory.
	(maybe_prepend_name): Remove. All uses removed.
	* src/tar.c (options): --one-top-level takes optional argument.
	(parse_opt): Handle it.
	* src/list.c (enforce_one_top_level): New function.
	(transform_stat_info): Call enforce_one_top_level if required.
	* src/suffix.c (compression_suffixes): List "tar" (no
	compression);
	terminate with NULL entry.
	(find_compression_suffix): New static.
	(strip_compression_suffix): New function.

	* doc/tar.1: Update.
	* doc/tar.texi: Update.

	* tests/onetop01.at: New testcase.
	* tests/onetop02.at: New testcase.
	* tests/onetop03.at: New testcase.
	* tests/Makefile.am: Add new testcases.
	* tests/testsuite.at: Likewise.

2014-01-27  Connor Behan  <connor.behan@gmail.com>

	Detect tarbombs while extracting

	* src/common.h (one_top_level_option): New global.
	(one_top_level): New global.
	* src/extract.c (extr_init): If one_top_level_option is set,
	determine
	the name one_top_level that might have to be prepended.
	(extract_archive): If one_top_level_option is set, prepend
	one_top_level
	to all names that don't already start with it.
	* src/tar.c (ONE_TOP_LEVEL_OPTION): New contant.
	(options): New option --one-top-level.
	(parse_opt): Handle this option.
	(decode_options): Make it conflict with --absolute-names.

2014-01-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Don't install rmt.8 if rmt is not built.

	* doc/Makefile.am [PU_RMT_COND]: Define RMT_8
	(dist_man_MANS): use RMT_8 instead of the hardcoded rmt.8

2014-01-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Provide tar(1) and rmt(8) manpages.

	* NEWS: Update.
	* doc/Makefile.am: Add manpages.
	* doc/tar.1: New file.

	* src/tar.c (tar_help_filter): Handle LZOP_OPTION.

2014-01-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Make sure transformed file names retain trailing slash in listing.

	* src/list.c (simple_print_header): Print trailing slash
	if using the transformed name.
	Use had_trailing_slash instead of analyzing last byte if temp_name

2014-01-22  Sergey Poznyakoff  <gray@gnu.org.ua>

	checkpoint actions: further improvements.

	* NEWS: Update.
	* doc/tar.texi: Update.
	* src/buffer.c (print_stats): Avoid use of additional string
	buffer.
	Allow for text to be NULL.
	Call gettext if it is not.
	(format_total_stats): Don't use gettext when calling print_stats.
	* src/checkpoint.c (def_format): Change default format.
	(format_checkpoint_string): Implement optional arguments for
	T conversion.
	(finish_checkpoint_actions): Rename to checkpoint_flush_actions,
	make extern.  All uses changed.
	* src/common.h (checkpoint_flush_actions): New proto.
	* src/tar.c (main): Set error_hook

2014-01-22  Sergey Poznyakoff  <gray@gnu.org>

	Improve checkpoint interface.

	* src/buffer.c (format_total_stats): The format arg is const
	All uses updated.
	(default_total_format): const
	* src/checkpoint.c (tty, tty_cleanup): New static.
	(format_checkpoint_string): New "canned" format %c
	(checkpoint_finish): New function.
	* src/common.h (checkpoint_finish): New proto.
	* src/tar.c (main): Call checkpoint_finish.`

2014-01-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Implement statistics display in checkpoint actions.

	* NEWS: Update.
	* configure.ac: Version 1.27.90
	* gnulib.modules: Add fprintftime.
	* doc/tar.texi: Document the "totals" action and new format
	specifiers
	for echo and ttyout checkpoint actions.
	* src/buffer.c (compute_duration): Return computed value.
	(print_stats): Don't print trailing newline.  Return number of
	characters output.
	(format_total_stats): New function.
	(print_total_stats): Rewrite via format_total_stats.
	* src/checkpoint.c (checkpoint_opcode) <cop_totals>: New opcode.
	(checkpoint_compile_action): Handle cop_totals.
	(expand_checkpoint_string): Remove.
	(format_checkpoint_string): New function to be used instead of
	expand_checkpoint_string.  All callers updated.
	* src/common.h (TF_READ,TF_WRITE)
	(TF_DELETED): New constants.
	(format_total_stats,print_total_stats): New protos.

2014-01-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Remove shar archives from distribution.

	These are going to phase out in automake 2.0

2014-01-10  Sergey Poznyakoff  <gray@gnu.org>

	Fix the use of --no-recursion and --recursion options.

	Each option remains in effect until cancelled by the next
	ocurrence
	of its counterpart, as stated in the documentation.

	* src/names.c (name_next_elt): Restore recursion_option from the
	value of matching_flags.

2014-01-09  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor bugfixes

	* src/compare.c (diff_dumpdir): Close descriptor if fstat failed.
	(diff_multivol): Make sure the descriptor is closed and eventual
	errors reported if lseek fails.
	Both reported by Jiri Kukacka.

2014-01-07  Paul Eggert  <eggert@cs.ucla.edu>

	tar: work aruond IBM XL C bug

	* src/incremen.c (show_snapshot_field_ranges)
	(write_directory_file_entry): Use simpler array size expression,
	one that evaluates to the same value.  This works around
	a compiler
	bug with IBM XL C.  Problem reported by Yannick Bergeron in
	<http://lists.gnu.org/archive/html/bug-tar/2014-01/msg00009.html>.

2014-01-03  Paul Eggert  <eggert@cs.ucla.edu>

	tar: update ancient configure cruft

	* configure.ac: Use AC_PROG_CC_STDC, not just AC_PROG_CC.
	Remove obsolete macros AC_ISC_POSIX, AC_HEADER_SYS_WAIT,
	AC_HEADER_DIRENT, AC_HEADER_STAT, AC_HEADER_STDC, AC_TYPE_SIGNAL,
	AC_TYPE_SIZE_T.
	* lib/prepargs.c (IN_CTYPE_DOMAIN): Remove.  All uses removed.
	* src/list.c (from_header): Use isspace, not ISSPACE.
	* src/system.c (pipe_handler, sys_exec_info_script):
	* src/tar.c (sigstat):
	Use void, not RETSIGTYPE.

Bdale Garbee's avatar
Bdale Garbee committed
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
2013-11-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 1.27.1

2013-11-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix star compatibility (sparse headers)

	* src/sparse.c (star_get_sparse_info): Update file->dumped_size

2013-11-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix GNU long link header.

	* src/create.c (write_gnu_long_link): Set timestamp to
	0 for backward compatibility.  Bug reported by David Barri.
	* THANKS: Update.

2013-11-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix unquoting of input file names.

	* src/names.c (read_next_name): Unquote file names coming from the
	-T argument.  Bug reported by Nicolas Dudebout.
	* THANKS: Update.

2013-10-24  Paul Eggert  <eggert@cs.ucla.edu>

	build: fix bug where 'configure --with-posix-acls' disables ACLs

	Reported by Lars Wendler in
	<http://lists.gnu.org/archive/html/bug-tar/2013-10/msg00022.html>.
	* configure.ac (with_posix_acls): Fix typo.

2013-10-23  Paul Eggert  <eggert@cs.ucla.edu>

	Fix core dump on Solaris 10 when "." isn't readable.

	Reported by Peter Kruse in
	<http://lists.gnu.org/archive/html/bug-tar/2013-10/msg00017.html>.
	This doesn't fix all the Solaris 10 test failures, just the
	core dump.
	* src/common.h, src/misc.c (tar_getcdpath): Now static.
	* src/misc.c (normalize_filename): Report a fatal error
	if cdpath is null, since we don't know the absolute name
	of the working directory in that case.	FIXME: there should
	be no need to know absolute file names.
	(chdir_arg): Simplify wd allocation.
	Don't assume that xgetcwd returns non-null.

Bdale Garbee's avatar
Bdale Garbee committed
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
2013-10-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 1.27

	* NEWS: Update.
	* configure.ac: Update.

2013-10-06  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fixes.

	* src/names.c: Include argp.h
	* tests/testsuite.at (AT_XATTRS_UTILS_PREREQ)
	(AT_SELINUX_UTILS_PREREQ,AT_ACLS_UTILS_PREREQ)
	(AT_CAPABILITIES_UTILS_PREREQ)
	(AT_XATTRS_PREREQ,AT_SELINUX_PREREQ)
	(AT_ACLS_PREREQ): Use POSIX-compatible syntax for
	mktemp.
	* tests/incr08.at: Fix find usage.

2013-10-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Xfail the remfiles09b test.

	* tests/remfiles09b.at: Turn into expected failure.

2013-10-05  Nathan Stratton Treadway  <nathanst@ontko.com>

	Tiny change

	* scripts/tar-snapshot-edit: Mention --show-snapshot-field-ranges
	option

2013-10-05  Pavel Raiskup  <praiskup@redhat.com>

	Tiny change

	* configure.ac (RSH): Define as AC_ARG_VAR.

2013-10-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix namespace contamination in testsuite.

	* tests/append01.at: Use m4_pushdef/m4_popdef to define local
	macros.
	* tests/delete03.at: Likewise.
	* tests/exclude06.at: Likewise.
	* tests/incr04.at: Likewise.
	* tests/link03.at: Likewise.
	* tests/long01.at: Likewise.
	* tests/longv7.at: Likewise.
	* tests/lustar01.at: Likewise.
	* tests/lustar02.at: Likewise.
	* tests/lustar03.at: Likewise.
	* tests/multiv05.at: Likewise.
	* tests/sparse04.at: Likewise.

2013-10-05  Nathan Stratton Treadway  <nathanst@ontko.com>

	Provide comprehensive testcases for various file removal modes.

	* tests/Makefile.am: Add new testcases.
	* tests/testsuite.at: Likewise.
	* tests/incr09.at: Add description.
	* tests/remfiles04a.at: New file.
	* tests/remfiles05.at: Rename to ...
	* tests/remfiles04b.at: ... this.
	* tests/remfiles04.at: Rename to ...
	* tests/remfiles04c.at: ... this.
	* tests/remfiles05a.at: New file.
	* tests/remfiles05b.at: New file.
	* tests/remfiles06.at: Rename to ...
	* tests/remfiles05c.at: ... this.
	* tests/remfiles06a.at: New file.
	* tests/remfiles06b.at: New file.
	* tests/remfiles06c.at: New file.
	* tests/remfiles07a.at: New file.
	* tests/remfiles07b.at: New file.
	* tests/remfiles07c.at: New file.
	* tests/remfiles08a.at: New file.
	* tests/remfiles08b.at: New file.
	* tests/remfiles08c.at: New file.
	* tests/remfiles08.at: Rename to ...
	* tests/remfiles09a.at: ... this.
	* tests/remfiles09b.at: New file.
	* tests/remfiles07.at: Rename to ...
	* tests/remfiles09c.at: ... this.

2013-10-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Tiny changes.

	* src/misc.c: Fix comments, rename wd.cwd to wd.abspath (Nathan
	Stratton
	Treadway);
	* src/tar.c (options): Reword description of the --starting-file
	and
	--preserve-order options.
	(decode_options): Both --starting-file and --preserve-order
	have meaning
	only when used together with an archive reading command. (Pavel
	Raiskup).

2013-10-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Revamp tar_getcwd/normalize_filename stuff.

	The changes are based on the discussion with Nathan.

	* src/common.h (normalize_filename): Take two arguments. All
	callers updated.
	(tar_getcwd): Replaced with ..
	(tar_getcdpath): New proto.
	* src/misc.c (normalize_filename): Take two arguments.
	(chdir_arg): Populate cwd along with creating the
	structure.
	(tar_getcwd): Removed.
	(tar_getcdpath): New function.

	* tests/incr09.at: New test case.
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Likewise.

2013-09-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix

	* tests/remfiles08.at: Restore missing find

2013-09-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use relative addressing in deferred unlinks.

	* src/common.h (tar_dirname): New function.
	* src/misc.c (normalize_filename_x): Make extern.
	(tar_dirname): New function.
	(tar_getcwd): Take into account absoulte pathnames.
	* src/unlink.c (deferred_unlink) <dir_idx>: New member; keeps the
	value of chdir_current at the moment of structure allocation.
	(flush_deferred_unlinks): Use chdir_do and relative addressing.
	(queue_deferred_unlink): Initialize dir_idx.
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Add new tests.
	* tests/remfiles06.at: Fix description.
	* tests/remfiles07.at: Fix description.
	* tests/remfiles08.at: New test case.

2013-09-25  Nathan Stratton Treadway  <nathanst@ontko.com>

	Improve tar-snapshot-edit

	Support architecture-specific field ranges for the "-c" function.
	Better handle negative or larger-than-32-bit field values even
	when running in 32-bit Perl (for the default "print a summary"
	function)

2013-09-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve tar_getcwd

	* src/common.h (tar_getcwd): Return pointer is const.
	* src/misc.c (wd) <cwd>: New member.
	(chdir_arg): Initialize cwd.
	(tar_getcwd): Use cwd member to cache the result.  Take into
	account absolute pathnames,
	(normalize_filename): Don't free the value
	returned from tar_getcwd.
	* src/names.c (name_next_elt): Remove leftover call chdir().
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Likewise.

	* tests/incr08.at: New testcase.
	* tests/remfiles04.at: New testcase.
	* tests/remfiles05.at: New testcase.
	* tests/remfiles06.at: New testcase.
	* tests/remfiles07.at: New testcase.

2013-09-24  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix normalize_filename.

	The function did not take into account eventual -C options, which
	in particular led to various problems when using -C and
	--remove-files
	together.

	* src/common.h (namebuf_add_dir,namebuf_finish)
	(tar_getcwd): New prototypes.
	* src/misc.c (namebuf_add_dir,namebuf_finish)
	(tar_getcwd): New functions.
	(normalize_filename): Use tar_getcwd.

2013-09-23  Sergey Poznyakoff  <gray@gnu.org.ua>

	Changes for compatibility with Slackware installation scripts.

	* src/buffer.c (short_read): the "Record size" message
	is controlled by the WARN_RECORD_SIZE warning_option bit.
	* src/common.h (keep_directory_symlink_option): New global.
	(WARN_RECORD_SIZE): New constant.
	(WARN_VERBOSE_WARNINGS): Add WARN_RECORD_SIZE.
	* src/extract.c (extract_dir): If keep_directory_symlink_option is
	set, follow symlinks to directories.
	* src/suffix.c (compression_suffixes): Add support for txz
	suffix.
	* src/tar.c (KEEP_DIRECTORY_SYMLINK_OPTION): New constant.
	(options): New option --keep-directory-symlink.
	(parse_opt): Handle this option.
	* src/warning.c: Implement "record-size" warning control.

	* NEWS: Update.
	* doc/tar.texi: Document new features.

2013-09-21  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix error message (complements 0ea6e686)

	* src/tar.c (set_subcommand_option): Mention --delete in the
	error message.

2013-09-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve the incr07 test

2013-09-15  Nathan Stratton Treadway  <nathanst@ontko.com>

	Implement the --show-snapshot-field-ranges option

	* src/common.h (show_snapshot_field_ranges): New prototype.
	* src/incremen.c (show_snapshot_field_ranges): New function.
	* src/tar.c: New option --show-snapshot-field-ranges.
	* doc/snapshot.texi: Document the --show-snapshot-field-ranges
	option.
	* doc/tar.texi: Likewise.

2013-09-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Take into account chdir_fd when extracting from incremental dumps.

	* src/common.h (tar_savedir): New prototype.
	* src/misc.c (tar_savedir): New function.
	(remove_any_file): Use tar_savedir.
	* src/incremen.c (try_purge_directory): Use tar_savedir.
	* src/update.c (update_archive): Use tar_savedir.
	* tests/incr07.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add new test.
	* tests/testsuite.at: Likewise.
	* THANKS: Updated.

2013-09-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor fix

	* src/tar.c (main): Mention --delete in the error message.
	* THANKS: Update

2013-09-13  Paul Eggert  <eggert@cs.ucla.edu>

	* src/names.c (file_list_name): Properly prototype.

2013-09-13  Paul Eggert  <eggert@cs.ucla.edu>

	tar: don't warn about zero timestamps

	* src/extract.c (check_time): Suppress warniing when t.tv_sec
	== 0.
	Problem reported by Denis Excoffier.

2013-08-19  Pavel Raiskup  <praiskup@redhat.com>

	Minor fix in the testsuite.

	* tests/T-cd.at: sort the 'tar cf' output.

2013-08-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve error diagnostics

	* src/names.c (file_list_name): New static function.
	(add_file_id): If a filelist is being read twice, print the names
	of the files that caused it.
	* tests/T-rec.at: New test case.
	* tests/Makefile.am: Add new file.
	* tests/testsuite.at: Include new file.

2013-08-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Revamp initial name collection functions to ensure proper
	argument ordering.

	* src/names.c (NELT_NOOP): New constant
	(name_elt) <next,prev>: New members.
	(name_array,allocated_entries,entries,scanned): Remove.
	(check_name_alloc): Remove function.
	(name_elt_alloc): New static.
	(name_list_adjust,name_list_advance): New functions.
	(name_add_name,name_add_dir)
	(name_add_file): Use new allocation functions.
	(read_next_name): Advance list head pointer as necessary
	before returning.
	(name_next_elt): Read elements from list.
	* tests/T-cd.at: New file.
	* tests/T-mult.at: New file.
	* tests/T-nest.at: New file.
	* tests/Makefile.am: Add new testcases.
	* tests/testsuite.at: Likewise.

2013-08-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Don't treat attempts to read an already read file list as
	fatal errors.

	* src/names.c (add_file_id): Report error and return 1 if the file
	has already been read.
	(read_next_name): Don't try to open file if add_file_id returns 1.
	(name_next_elt): Simplify conditional.

2013-08-16  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change.

	* src/names.c (name_next_elt): Simplify conditional.

2013-08-15  Pavel Raiskup  <praiskup@redhat.com>

	Fix use of uninitialized memory

	* src/names.c (name_add_file): Initialize the ep->v.file.fp
	pointer
	after structure allocation.

2013-08-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes

	* src/names.c (handle_option): Use program_invocation_short_name
	instead of the constant string.
	(read_next_name): Remove unused variable.

2013-08-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Update the docs.

	* doc/tar.texi: Parsing of the options found in the file list
	follows the same rules as for command line.  Remove the obsolete
	description.  This complements 26538c9b.

2013-08-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix interacton of --verbose and --append.

	* src/buffer.c (_open_archive): don't overwrite existing archive
	if given the --verify option.
	* tests/append04.at: New file.
	* tests/Makefile.am: Add new testcase.
	* tests/testsuite.at: Add new testcase.
	* THANKS: Update.

2013-08-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* src/names.c (read_name_from_file): Fix a typo. Remove
	unused variable.

2013-08-04  Sergey Poznyakoff  <gray@gnu.org.ua>

	Reduce memory consuption when handling the -T option.

	The commit cdb27293 made the -T option more flexible, but
	incurred a very considerable memory overhead by storing
	all file names in the argument array.  In case of very
	big file lists this caused tar to run out of memory.  This
	was reported by Christian Wetzel <wetzel@phoenix-pacs.de>
	on March 14, 2013
	(http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00018.html).

	On the other hand, Michal Žeidl discovered that tar misfunctioned
	when given empty file lists or lists with the trailing newline
	misssing in the last entry.  This was reported by Pavel Raiskup
	on July 23
	(http://lists.gnu.org/archive/html/bug-tar/2013-07/msg00009.html
	and
	msg00010.html).

	This change fixes both issues.

	* src/common.h (name_add_file,request_stdin): New prototype.
	(more_options): New prototype.
	* src/names.c (NELT_FILE): New entry type.
	(name_elt) <file>: New union member.
	(name_add_file): New function.
	(read_name_from_file): New function, a rewrite of
	the same function from tar.c
	(read_next_name,copy_name): New static functions.
	(name_next_elt): Handle NELT_FILE entries.
	* src/tar.c (request_stdin): Make extern.
	(read_name_from_file,add_file_id)
	(update_argv): Removed.
	(parse_opt): Change handling of the -T option.
	(more_options): New function.

	* tests/T-null.at: Rewrite test.
	* tests/T-zfile.at: New file.
	* tests/T-nonl.at: New file.
	* tests/Makefile.am: Add new testcases.
	* tests/testsuite.at: Likewise.

	* THANKS: Update.

2013-06-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix the compatibility check for the --occurrence option.

	* src/tar.c (SUBCL_OCCUR): New class.
	(subcommand_class): Update.
	(decode_options): Accept the --occurrence option
	with any subcommand from the SUBCL_OCCUR class.

2013-06-29  Pavel Raiskup  <praiskup@redhat.com>

	testsuite: do not resist on file order in archive

	On my Fedora 19 box, the exclude08 & exclude11 tests failed before
	this fix.  The reason was that the directory traversing chosen the
	file order differently than the testsuite expected.

	* tests/exclude08.at: Sort the tarball content output.
	* tests/exclude09.at: Likewise.
	* tests/exclude10.at: Likewise.
	* tests/exclude11.at: Likewise.
	* tests/exclude12.at: Likewise.
	* tests/exclude13.at: Likewise.
	* tests/exclude14.at: Likewise.
	* tests/exclude15.at: Likewise.
	* tests/exclude16.at: Likewise.

2013-06-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Improve checks for incompatible options.

	* src/common.h (READ_LIKE_SUBCOMMAND): Remove define.
	* src/tar.c (IS_SUBCOMMAND_CLASS): New macro.
	(decode_options): Use IS_SUBCOMMAND_CLASS in checking
	option compatibility.
	Accept the --verify option only with subcommands that
	write to the archive.

	* tests/opcomp01.at: New test case.
	* tests/opcomp02.at: New test case.
	* tests/opcomp03.at: New test case.
	* tests/opcomp04.at: New test case.
	* tests/opcomp05.at: New test case.
	* tests/opcomp06.at: New test case.
	* tests/Makefile.am: Add new testcases.
	* tests/testsuite.at: Likewise.

2013-06-28  Paul Eggert  <eggert@cs.ucla.edu>

	tar: port to Mingw Shell

	* src/extract.c (extract_symlink) [!HAVE_SYMLINK]:
	Fix typo by replacing WARN_SYMBOLIC_CAST with WARN_SYMLINK_CAST.
	Problem reported by kaka in
	<http://lists.gnu.org/archive/html/bug-tar/2013-06/msg00008.html>.

2013-05-06  Paul Eggert  <eggert@cs.ucla.edu>

	maint: revert previous change

	It wasn't actually needed.  Reported by Stefano Lattarini in
	<http://lists.gnu.org/archive/html/bug-tar/2013-04/msg00041.html>.
	* configure.ac (AM_GNU_GETTEXT_VERSION): Decrease from 0.18.2
	back to 0.16.

2013-04-25  Paul Eggert  <eggert@cs.ucla.edu>

	maint: port to bleeding-edge Automake by assuming Gettext 0.18.2

	Reported by Stefano Lattarini in
	<http://lists.gnu.org/archive/html/bug-tar/2013-04/msg00009.html>.
	* configure.ac (AM_GNU_GETTEXT_VERSION): Increase from 0.16
	to 0.18.2.
	README-alpha says that we do not make any efforts to accommodate
	older versions of Gettext.

2013-04-25  Paul Eggert  <eggert@cs.ucla.edu>

	tar: port to --without-xattrs --enable-gcc-warnings

	Reported by Pavel Raiskup in
	<http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00029.html>.
	* src/xattrs.c (xattrs__fd_set) [!HAVE_XATTRS]: Omit.

2013-04-25  Paul Eggert  <eggert@cs.ucla.edu>

	doc: port to texinfo 5

	* doc/tar.texi (Reports, assumptions, Mixing):
	Put FIXMEs at line start.

2013-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Continue extracting from a separate volume after skipping a
	partial member.

	Reported by Göran Udeborg on 2013-03-09.

	* src/extract.c (extract_skip): New function.
	(prepare_to_extract): Set extractor to extract_skip if starting
	at a partial member.

2013-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix interaction of various --exclude-tag options with
	--listed-incremental.

	* src/incremen.c (procdir): Set directory->tagfile in
	the exclusion_tag_contents case.
	(makedumpdir): Mark all entries as ignored if directory->tagfile
	is set.
	Free new_dump before returning.
	(maketagdumpdir): New function.
	(scan_directory): If directory->children is set to
	NO_CHILDREN and directory->tagfile is set, create a
	dumpdir consisting of the tagfile only.

	* tests/exclude08.at: New testcase.
	* tests/exclude09.at: New testcase.
	* tests/exclude10.at: New testcase.
	* tests/exclude11.at: New testcase.
	* tests/exclude12.at: New testcase.
	* tests/exclude13.at: New testcase.
	* tests/exclude14.at: New testcase.
	* tests/exclude15.at: New testcase.
	* tests/exclude16.at: New testcase.
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Include new tests.
	* tests/atlocal.in (mkexcltest): New function.
	* tests/chtype.at: Update keywords.
	* tests/filerem01.at: Likewise.
	* tests/filerem02.at: Likewise.
	* tests/incremental.at: Likewise.
	* tests/multiv04.at: Likewise.

2013-02-20  Paul Eggert  <eggert@cs.ucla.edu>

	tar: remove lint

	* lib/wordsplit.c (_wsplit_error): Mark with printf attribute.
	(expvar): "Use" defstr to pacify GCC.
	* src/system.c (xexec): Now _Noreturn, to pacify GCC.
	(run_decompress_program): Add cast to pacify GCC.
	(sys_exec_command, sys_exec_info_script,
	sys_exec_checkpoint_script):
	Remove unused variables.

2013-02-10  Sergey Poznyakoff  <gray@gnu.org.ua>

	Pass command line arguments to external commands.

	Any option taking a command name as its argument accepts
	additional arguments as well.

	* lib/wordsplit.c: New file.
	* lib/wordsplit.h: New file.
	* lib/Makefile.am: Add new files.
	* src/system.c (xexec): New function.
	(run_decompress_program): Use wordsplit.
	(sys_child_open_for_compress,sys_exec_command)
	(sys_exec_info_script)
	(sys_exec_checkpoint_script): Use xexec to invoke external
	command.

	* NEWS: Update.
	* doc/tar.texi: Update.

2013-01-29  Nathan Stratton Treadway  <nathanst@ontko.com>

	tar: improve compile-time diagnostics

	* src/misc.c (sysinttostr, strtosysint): Improve #error wording.

2013-01-27  Paul Eggert  <eggert@cs.ucla.edu>

	tar: improve quality of diagnostics with incrementals

	Inspired by a prototype by Nathan Stratton Treadway in
	<http://lists.gnu.org/archive/html/bug-tar/2013-01/msg00000.html>.
	* src/incremen.c (read_num): Rewrite by merging read_negative_num
	and read_unsigned_num.	Use strtosysint rather than rolling this
	stuff ourselves.  Change return type to bool.  All uses changed.
	(read_negative_num, read_unsigned_num): Remove.
	(read_num, read_timespec, read_incr_db_2): Improve quality of
	diagnostics, e.g., by supplying byte offset of error.

2013-01-26  Paul Eggert  <eggert@cs.ucla.edu>

	tar: fix bug with sparse files with effective size of 8 GiB
	or more

	Reported by Pavel Raiskup in
	<http://lists.gnu.org/archive/html/bug-tar/2013-01/msg00001.html>.
	* NEWS: Document the fix.
	* src/sparse.c (pax_start_header): New function.
	(pax_dump_header_0, pax_dump_header_1): Use it.

2012-12-31  Paul Eggert  <eggert@cs.ucla.edu>

	maint: update copyrights for 2013 and as per current GNU standards

2012-12-31  Paul Eggert  <eggert@cs.ucla.edu>

	maint: remove unnecessary file

	* src/configure.in: Remove.  This file has been obsolete for
	a while.

2012-12-24  Paul Eggert  <eggert@cs.ucla.edu>

	maint: don't enable warnings by default unless GCC 4.6 or later

	* configure.ac (gl_GCC_VERSION_IFELSE): New macro, from coreutils.
	(gl_gcc_warnings): By default, disable warnings for GCC versions
	before 4.6.  This works around a failure when building from git on
	Ubuntu 10, reported privately by Nathan Stratton Treadway.

2012-12-23  Paul Eggert  <eggert@cs.ucla.edu>

	Handle incremental format 2 with negative numbers, too.

	* src/incremen.c (read_unsigned_num): Last arg is intmax_t *, not
	uintmax_t, for consistency with other readers.	All callers
	changed.
	Avoid signed integer overflow.
	(read_num):

2012-12-23  Paul Eggert  <eggert@cs.ucla.edu>

	Fix some problems with negative and out-of-range integers.

	Original problem reported for HP-UX LVM v2.2 by Michael White in
	<http://lists.gnu.org/archive/html/bug-tar/2012-10/msg00000.html>.
	This patch fixes some other gotchas that I noticed.
	* gnulib.modules: Add extern-inline.
	* src/common.h: Use _GL_INLINE_HEADER_BEGIN,
	_GL_INLINE_HEADER_END.
	(COMMON_INLINE, max, min): New macros.
	(represent_uintmax, valid_timespec): New inline functions.
	(SYSINT_BUFSIZE): New constant.
	(sysinttostr, strtosysint, decode_timespec): New decls.
	* src/create.c (start_private_header): Silently bring the time_t
	value into range; it is now the caller's responsibility to deal
	with any overflow error.  Use uid 0 and gid 0 rather than the
	user's uid/gid, since the faked header isn't "owned" by the user
	and the uid/gid could in theory be out of range.  Leave major and
	minor zeroed.
	(FILL): Remove.
	(write_gnu_long_link): Let start_private_header zero things out.
	* src/create.c (write_gnu_long_link, write_extended):
	* src/xheader.c (xheader_write_global):
	Use start_time, not current time; no point hammering on the clock.
	* src/compare.c (diff_multivol): Check that offset, size are
	in range.
	* src/incremen.c (read_incr_db_01, write_directory_file_entry):
	Allow negative time_t, dev_t, and ino_t.
	* src/list.c (max): Remove (moved to common.h).
	(read_header): Check that size is in range.
	(from_header): Return intmax_t, not uintmax_t, to allow negative.
	All callers changed.  At compile time, check assumptions about
	intmax_t and uintmax_t.  Use bool for booleans.  Avoid overflow
	hassles on picky hosts.
	(mode_from_header): Last arg is now bool *, not unsigned *.
	All callers changed.
	(simple_print_header): Do not assume UID, GID fit in 'long'.
	* src/list.c (from_header):
	* src/xheader.c (out_of_range_header):
	Arg is now a plain minimum value, not minus minval converted to
	uintmax_t.  All callers changed.
	* src/misc.c (COMMON_INLINE): New macro.
	(sysinttostr, strtosysint, decode_timespec): New functions.
	* src/sparse.c (oldgnu_add_sparse, oldgnu_fixup_header)
	(star_fixup_header):
	Check for offset overflow.
	(decode_num): Clear errno before calling strtoumax.
	* src/tar.c (expand_pax_option): Don't discard nanoseconds.
	* src/xheader.c (assign_time_option): Allow negative time_t.
	(decode_record): Simplify, since out-of-range string is guaranteed
	to produce a value exceeding len_max.
	(xheader_read): Last arg is off_t, not size_t.
	Caller should diagnose negative arg, as needed.
	Check that it's in range.
	(enum decode_time_status): Remove.
	(_decode_time): Remove, folding into decode_time.
	(decode_time): Return bool, not enum decode_time_status.
	Rely on decode_timespec to do most of the work.
	(code_signed_num): New function.
	(code_num): Use it.
	(decode_signed_num): New function.
	(decode_num): Use it.
	(gid_coder, gid_decoder, uid_coder, uid_decoder,
	sparse_map_decoder)
	(sparse_map_decoder): Code and decode negative values.
	(sparse_map_decoder): Improve check for out-of-range values.
	* tests/time01.at: New file.
	* tests/Makefile.am (TESTSUITE_AT): Add it.
	* tests/testsuite.at: Include it.

2012-12-22  Paul Eggert  <eggert@cs.ucla.edu>

	Port use of mkdirat etc. to Solaris 10.

	* gnulib.modules (fchmodat, fchownat, fstatat, mkdirat, unlinkat):
	Add.  These were split out in gnulib, so we now need to request
	them separately.  mkdirat, for example, is not in Solaris 10.

2012-12-22  Paul Eggert  <eggert@cs.ucla.edu>

	Port ACL configuration to Solaris 10.

	* configure.ac (with_posix_acls): Fix misspellings.
	Stop checking at the first failure, to speed up 'configure'.

2012-12-19  Paul Eggert  <eggert@cs.ucla.edu>

	tar: remove unused externs, or make them static

	* src/buffer.c (record_buffer_aligned, flush_write_ptr,
	flush_read_ptr)
	(duration):
	* src/list.c (recent_global_header):
	* src/unlink.c (deferred_unlink_delay):
	* src/transform.c (transform_flags):
	* src/xattrs.c (acl_get_file_at, acl_set_file_at,
	file_has_acl_at):
	Now static.
	* src/common.h (rmt_command_option): Remove; unused.
	* src/tar.c (check_links_option, allocated_archive_names):
	Move decls here from common.h; these are now static.

2012-12-19  Paul Eggert  <eggert@cs.ucla.edu>

	* .gitignore: Regenerate.

2012-12-19  Paul Eggert  <eggert@cs.ucla.edu>

	build: new configure option --enable-gcc-warnings

	This has a similar meaning as in other GNU applications
	such as coreutils and Emacs.
	* NEWS: Document it.
	* .gitignore: Remove redundant build-aux.
	Remove gnu, since gnu/Makefile.am is now in git.
	Add gnu/.gitignore, gnu/charset.alias, gnu/*.h, gnu/*/ to cover
	autogenerated files.
	* bootstrap.conf (gnulib_mk): Remove.
	* configure.ac: Add support for --enable-gcc-warnings,
	taken from coreutils and simplified.
	* gnu/Makefile.am: New file.  Formerly this was autogenerated,
	but the autogenerated file has been renamed to gnulib.mk,
	its usual name when bootstrapping from gnulib.
	This way, AM_CFLAGS can incorporate warning options.
	* gnulib.modules: Add manywarnings.
	* lib/Makefile.am, src/Makefile.am (AM_CFLAGS): New macro,
	incorporating warning options.
	* lib/attr-xattr.in.h (ENOATTR): New macro, if not already
	defined.
	* src/buffer.c (magic): Don't rely on incomplete initializers.
	* src/common.h (report_difference): Add printf format attribute.
	* src/system.c (sys_exec_command, sys_exec_info_script)
	(sys_exec_checkpoint_script):
	* src/tar.c (update_argv):
	Add casts to char * to pacify GCC warnings about using string
	literals in a char * context.
	* src/xattrs.c, src/xattrs.h (xattrs_clear_setup):
	Declare parameters as (void), not ().
	* src/xheader.c (xheader_format_name): Initialize pptr to null,
	to pacify GCC.	Remove unnecessary test of nptr versus null.

2012-12-19  Paul Eggert  <eggert@cs.ucla.edu>

	tar: don't truncate diagnostic

	* src/list.c (from_header): Fix buffer size calculation when
	generating a diagnostic.

2012-12-03  Sergey Poznyakoff  <gray@gnu.org.ua>

	Bugfix.

	* tests/Makefile.am: Fix double AM_CPPFLAGS

2012-12-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Use AM_CPPFLAGS instead of INCLUDES.

2012-11-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Housekeeping.

	* NEWS: Mention the support for POSIX ACLs, extended
	attributes and SELinux context.
	* THANKS: List James Antill and Pavel Raiskup.

2012-11-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix indentation.

2012-11-19  Pavel Raiskup  <praiskup@redhat.com>

	Allow to store/extract '=' character in xattr keyword

	* src/xheader.c (xattr_decode_keyword)
	(xattr_encode_keyword): New functions.
	(xheader_print_n,xattr_decoder): Use them.
	* tests/xattr05.at: New test case.
	* tests/Makefile.am: Add new test case.
	* tests/testsuite.at: Likewise.

2012-11-19  Pavel Raiskup  <praiskup@redhat.com>

	Bugfixes.

	* configure.ac: Avoid linking against -lacl when
	--without-posix-acls is given.
	* tests/selacl01.at: Call restorecon
	* tests/selnx01.at: Likewise.
	* tests/testsuite.at (AT_SELINUX_UTILS_PREREQ): Likewise.
	(AT_SELINUX_PREREQ,AT_ACLS_PREREQ): Use the right _PREREQ macros.

2012-11-19  Pavel Raiskup  <praiskup@redhat.com>

	Fix bootstrapping.

	* bootstrap (gnulib_extra_files): Remove $build_aux/missing

2012-11-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Various fixes.

	* src/xattrs.c: Don't mix variable declarations and statements.
	Use proper data types.	Remove improper use of const qualifiers.
	Use x2nrealloc to reallocate memory buffers.

2012-11-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor change.

	* src/xattrs.c: Fix indentation. Fix copyleft statement, promote
	to GPLv3+.
	* src/xattrs.h: Likewise

2012-11-18  Pavel Raiskup  <praiskup@redhat.com>

	Add SELinux context store/restore/list support.

	* gnulib.modules: Add selinux-at.
	* src/Makefile.am (tar_LDADD): Add LIB_SELINUX.

	* src/create.c (start_header, dump_file0): Handle selinux
	contexts.
	* src/extract.c (delayed_set_stat) <cntx_name>: New member.
	(delayed_link) <cntx_name>: New member.
	(set_stat, delay_set_stat)
	(apply_nonancestor_delayed_set_stat): Handle selinux contexts.
	* src/tar.c: New options: "--selinux", "--no-selinux".
	(tar_stat_destroy): Free cntx_name.
	* src/tar.h (tar_stat_info) <cntx_name>: New member.
	* src/xattrs.c (xattrs_selinux_get)
	(xattrs_selinux_set): New functions.
	(xattrs_print_char): Honor selinux_context_option.
	(xattrs_print): Print selinux context.
	* src/xheader.c: Handle new keyword "RHT.security.selinux".
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Likewise.
	* tests/selacl01.at: New test.
	* tests/selnx01.at: New test.

2012-11-18  Pavel Raiskup  <praiskup@redhat.com>

	Support for POSIX ACLs

	* configure.ac: Check whether ACLs are available on the
	host system.
	* gnulib.modules: Add acl
	* src/create.c (start_header): Store ACLs when creating
	a POSIX archive.
	(dump_file0): Handle ACLs.
	* src/extract.c (delayed_set_stat) <acls_a_ptr, acls_a_len>
	<acls_d_ptr, acls_d_len>: New members.
	(delayed_link): Likewise.
	(set_stat,delay_set_stat)
	(apply_nonancestor_delayed_set_stat): Set ACLs.
	* src/tar.c: New options: "--acls", "--no-acls"
	(tar_stat_destroy): Free acls_a_ptr and acls_d_ptr fields.
	* src/tar.h (tar_stat_info) <acls_a_ptr, acls_a_len>
	<acls_d_ptr, acls_d_len>: New members.
	* src/xattrs.c (xattrs_acls_get, xattrs_acls_set): New functions.
	* src/xheader.c: Support new keywors: "SCHILY.acl.access" and
	"SCHILY.acl.default".
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Likewise.
	* tests/acls01.at: New test.
	* tests/acls02.at: New test.

2012-11-18  Pavel Raiskup  <praiskup@redhat.com>

	Add basic suuport for extended attributes.

	* src/Makefile.am: Add xattrs.[ch]
	* src/xattrs.c: New file.
	* src/xattrs.h: New file.
	* src/common.h (READ_LIKE_SUBCOMMAND): New define.
	(selinux_context_option, acls_option, xattrs_option): New globals.
	(xheader_xattr_init, xheader_xattr_free)
	(xheader_xattr_copy, xheader_xattr_add): New protos.
	(WARN_XATTR_WRITE): New mask.
	* src/create.c (start_header): Handle xattrs pairs if in POSIX
	format.
	(dump_file0): Handle extended attributes.
	* src/extract.c (delayed_set_stat,delayed_link) <xattr_map_size>
	<xattr_map>: New members.
	(set_xattr): New static function.
	(open_output_file): Accept an additional argument indicating
	whether the file has already been created.
	(set_stat,delay_set_stat)
	(apply_nonancestor_delayed_set_stat)
	(extract_file): Handle extended attributes.
	* src/list.c (decode_header, simple_print_header): Display
	extended attributes.
	* src/tar.c: New options --xattrs, --no-xattrs, --xattrs-include,
	--xattrs-exclude
	(tar_stat_destroy): Free the xattr_map storage.
	* src/tar.h (xattr_array): New struct.
	(tar_stat_info) <xattr_map_size, xattr_map>: New members.
	* src/warning.c: New warning control keyword "xattr-write".
	* src/xheader.c (xheader_xattr_init)
	(xheader_xattr_free, xheader_xattr_add)
	(xheader_xattr_copy): New functions.
	(struct xhdr_tab) <prefix>: New member.
	(locate_handler): Permit selecting the keyword based on its
	prefix.
	(xheader_protected_pattern_p)
	(xheader_protected_keyword_p): Likewise.
	(xattr_coder, xattr_decoder): New functions.
	(xhdr_tab): Reflect the changes to struct xhdr_tab.
	New keyword "SCHILY.xattr".
	* tests/Makefile.am: Add new tests.
	* tests/testsuite.at: Likewise.
	(AT_CHECK_UTIL, AT_XATTRS_UTILS_PREREQ)
	(AT_CAPABILITIES_UTILS_PREREQ, AT_XATTRS_PREREQ): New defuns.
	* tests/xattr01.at: New test.
	* tests/xattr02.at: New test.
	* tests/xattr03.at: New test.
	* tests/xattr04.at: New test.
	* tests/capabs_raw01.at: New test.

2012-11-18  Sergey Poznyakoff  <gray@gnu.org.ua>

	Prepare for implementing extended attribute support.

	This patch adds *xattr() stubs in case extended attribute
	support is
	not present and implements the *attrat() family of functions.
	Based
	on the patch by Pavel Raiskup <pavel@raiskup.cz> for gnulib.

	* acinclude.m4 (TAR_HEADERS_ATTR_XATTR_H): New defun.
	* configure.ac: Call TAR_HEADERS_ATTR_XATTR_H
	* lib/Makefile.am: Add xattr-at.[ch], distribute attr-xattr.in.h
	[!TAR_COND_XATTR_H]: Build attr/xattr.h
	* lib/attr-xattr.in.h: New file.
	* lib/xattr-at.c: New file.
	* lib/xattr-at.h: New file.

2012-11-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix creation of incremental archives when a subdirectory becomes
	a mountpoint.

	When used with --listed-incrfental and --one-file-system, tar
	was unable to cope with directories that had once been part of the
	dumped system and became separate mount points afterwards.
	The bug
	has been reported and a fix proposed by Nathan Stratton Treadway.

	* src/incremen.c (procdir): If one_file_system_option is in
	effect,
	clear out dumpdir info from the directory.
	* tests/Makefile.am: Add new testcase.
	* tests/listed05.at: New testcase.
	* tests/testsuite.at (AT_PRIVILEGED_PREREQ): New macro.
	include listed05.at.
	* THANKS: Update.

2012-07-27  Jim Meyering  <jim@meyering.net>

	maint: try to avoid unwanted chatter in ChangeLog

	* bootstrap.conf: Do not alter ChangeLog if it already exists.

2012-07-26  Paul Eggert  <eggert@cs.ucla.edu>

	doc: improve discussion of compressed archives

	* doc/tar.texi (gzip): Don't claim that -I 'gzip --best' works.
	Problem reported by Davide Brini in
	<http://lists.gnu.org/archive/html/bug-tar/2012-07/msg00025.html>.
	Also, improve some of the surrounding text.

	This file is a placeholder. It will be replaced with the actual
	ChangeLog
	by make dist.  Run make ChangeLog if you wish to create it
	earlier.

2012-06-27  Paul Eggert  <eggert@cs.ucla.edu>

	tests: fix permissions-assumption bug in test

	* tests/owner.at: Don't assume umask is 022.
	Reported by Pavel Raiskup in
	<http://lists.gnu.org/archive/html/bug-tar/2012-06/msg00015.html>.

2012-06-27  Paul Eggert  <eggert@cs.ucla.edu>

	tar: don't assume root is uid 0

	This is not true for Tandem NonStop Kernel.  See Joachim Schmitz's
	comment in <http://bugs.gnu.org/10305#111>.
	* gnulib.modules: Add root-uid.
	* src/extract.c: Include <root-uid.h>.
	(extr_init): Don't assume root is uid 0.

2012-04-25  Paul Eggert  <eggert@cs.ucla.edu>

	* src/compare.c (diff_dumpdir): Omit useless 'stat'.

2012-04-25  Paul Eggert  <eggert@cs.ucla.edu>

	* doc/tar.texi (Option Summary): Fix xref typo.

	Reported by Nathan Stratton Treadway in
	<http://lists.gnu.org/archive/html/bug-tar/2012-04/msg00035.html>.

	This file is a placeholder. It will be replaced with the actual
	ChangeLog
	by make dist.  Run make ChangeLog if you wish to create it
	earlier.

2012-03-29  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix unrecognized option.

	* src/tar.c (parse_opt): Handle OLD_ARCHIVE_OPTION.

2012-03-11  Paul Eggert  <eggert@cs.ucla.edu>

	tar: remove lint

	This lint was found by GCC 4.6.2 on Fedora 15 x86-64.
	* src/buffer.c (buffer_write_global_xheader, mv_end,
	set_start_time)
	(compute_duration, print_total_stats, flush_read, flush_write):
	* src/checkpoint.c (checkpoint_finish_compile):
	* src/list.c (test_archive_label):
	* src/misc.c (chdir_count):
	* src/names.c (const):
	* src/unlink.c (finish_deferred_unlinks):
	Define with (void) instead of with (), for slightly-better C type
	checking and to avoid a GCC warning.
	* src/compare.c (diff_dumpdir):
	* src/tar.c (parse_owner_group): Remove unused local.
	* src/misc.c (chdir_do):
	* src/tar.c (add_exclude_array): Rename local to avoid shadowing.
	(LOW_DENSITY_NUM, MID_DENSITY_NUM, HIGH_DENSITY_NUM):
	Define only if needed.
	* src/update.c (update_archive): Initialize a local; this fixes
	what appears to be a real bug.

2012-02-14  Paul Eggert  <eggert@cs.ucla.edu>

	doc: suggest Bash for large-fd script

	* doc/tar.texi (Multi-Volume Archives): Suggest Bash for shell
	script that might use >&10.  Problem reported by Edward F
	Eaglehouse in
	<http://lists.gnu.org/archive/html/bug-tar/2012-02/msg00002.html>.

2012-01-18  Paul Eggert  <eggert@cs.ucla.edu>

	tar: quote 'like this', not `like this'

	This fixes some test failures recently introduced by gnulib
	updates
	prompted by recent changes to the GNU coding standards,
	which now advise to use quotes 'like this' or "like this"
	rather than `like this'.
	* NEWS: Document this.
	* README, README-hacking, doc/Makefile.am, scripts/backup.in:
	* scripts/backup.sh.in, scripts/dump-remind.in:
	* src/buffer.c, src/checkpoint.c, src/create.c, src/incremen.c:
	* src/misc.c, src/names.c, src/sparse.c, src/transform.c:
	* tests/incr02.at, tests/incremental.at, tests/multiv08.at:
	* tests/sparse04.at, tests/star/README, tests/update01.at:
	Quote 'like this' in comments.
	* src/tar.h:
	Quote "like this" in comments, when quoting English phrases rather
	than code.
	* configure.ac:
	* scripts/xsparse.c (get_var, read_xheader, main):
	* src/compare.c (diff_archive):
	* src/extract.c (prepare_to_extract):
	* src/tar.c (request_stdin, tar_set_quoting_style, doc, options)
	(set_subcommand_option, report_textual_dates, parse_opt)
	(decode_options, main):
	* src/xheader.c (decx):
	Quote 'like this' in diagnostics.
	* doc/tar.texi (list, warnings, override)
	(Selecting Archive Members, quoting styles, after, hard links)
	(Sparse Recovery, Multi-Volume Archives, label):
	Adjust documentation to match new output.
	* tests/backup01.at, tests/incr01.at, tests/incr04.at:
	* tests/label04.at, tests/label05.at, tests/link03.at:
	* tests/listed02.at, tests/multiv03.at, tests/multiv05.at:
	* tests/rename01.at, tests/rename02.at, tests/rename03.at:
	* tests/volume.at:
	Adjust tests to match new quoting behavior.

2012-01-18  Paul Eggert  <eggert@cs.ucla.edu>

	tar: port --overwrite symlink test to GNU/Hurd

	Problem reported by Pino Toscano in
	<http://lists.gnu.org/archive/html/bug-tar/2012-01/msg00040.html>.
	* gnulib.modules: Add fcntl-h, which defines
	HAVE_WORKING_O_NOFOLLOW.
	* src/extract.c (open_output_file): Use HAVE_WORKING_O_NOFOLLOW,
	not O_NOFOLLOW, when testing whther O_NOFOLLOW works.

	This file is a placeholder. It will be replaced with the actual
	ChangeLog
	by make dist.  Run make ChangeLog if you wish to create it
	earlier.

2012-01-11  Paul Eggert  <eggert@cs.ucla.edu>

	tar: fix core dump with --index-file=bad_path

	* src/tar.c (decode_options): Exit cleanly if index file won't
	open.
	Problem reported by Khanh-Dang Nguyen Thu Lam in
	<http://lists.gnu.org/archive/html/bug-tar/2012-01/msg00018.html>.

2012-01-06  Paul Eggert  <eggert@cs.ucla.edu>

	tar: don't assume O_NONBLOCK is benign on regular files

	On Data Migration Facility (DMF), High Peformance Storage System
	(HPSS),
	and presumably other file systems based on hierarchical storage,
	opening
	a regular file with O_NONBLOCK can cause later reads to fail with
	errno == EAGAIN.  We need the O_NONBLOCK to avoid some security
	races.
	Work around the problem by using fcntl to clear the O_NONBLOCK
	flag if I/O fails with that errno value.
	Problem reported by Vitezslav Cizek in
	<http://lists.gnu.org/archive/html/bug-tar/2012-01/msg00000.html>.
	* src/common.h (blocking_read, blocking_write): New decls.
	* src/misc.c (blocking_read, blocking_write): New functions.
	* src/compare.c (process_rawdata):
	* src/create.c (dump_regular_file):
	* src/extract.c (extract_file):
	* src/sparse.c (sparse_scan_file, sparse_extract_region):

2011-11-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix --keep-old-files option.

	The regression was introduced by 8f390db9.  This patch implements
	additional
	option --skip-old-files, which silently skips members which
	would cause
	writing over existing files, and restores --keep-old-files to
	its traditional
	behavior.

	* NEWS: Update.
	* configure.ac: Update.
	* doc/tar.texi: Document the changes.
	* src/common.h (SKIP_OLD_FILES): New old_files mode.
	* src/extract.c (maybe_recoverable): Restore KEEP_OLD_FILES
	behavior.
	Handle SKIP_OLD_FILES.
	* src/tar.c: New option --skip-old-files.
	* tests/extrac18.at: New file.
	* tests/extrac19.at: New file.
	* tests/Makefile.am: Add new test cases.
	* tests/testsuite.at: Likewise.

2011-11-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Warn about existing files in keep-old-files mode (complements
	8f390db9).

	This is controlled by "existing-file" warning code, which is off
	by default.

	* src/common.h (WARN_EXISTING_FILE): New warning code.
	(WARN_VERBOSE_WARNINGS): Add WARN_EXISTING_FILE.
	* src/extract.c (maybe_recoverable): warn about existing file
	if WARN_EXISTING_FILE is set.
	* src/warning.c: New warning type: "existing-file"

2011-11-17  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix the "Creating directory:" output

	* src/list.c (print_for_mkdir): don't use unquoted name length for
	computing its output width.

2011-11-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix operation of --verify in conjunction with --listed-incremental

	* src/common.h (clear_directory_table): New proto.
	* src/incremen.c (clear_directory_table): New function.
	* src/compare.c (diff_dumpdir): Take a pointer to struct
	tar_stat_info as argument.
	Initialize its fd.
	(diff_archive): Update call to diff_dumpdir.
	(verify_volume): Call clear_directory_table.

2011-10-18  Paul Eggert  <eggert@cs.ucla.edu>

	* doc/tar.texi (Option Summary, absolute): Document -P better,

	by describing how it deals with symbolic links on extraction.

2011-09-28  Paul Eggert  <eggert@cs.ucla.edu>

	2011-09-27 Paul Eggert <eggert@cs.ucla.edu>

	* src/tar.c (stat_on_signal): Use SA_RESTART if available.

2011-09-20  Paul Eggert  <eggert@cs.ucla.edu>

	* doc/tar.texi: Remove front- and back-cover texts.

	These are no longer needed for this manual, according to the
	GNU maintainers guide.	Update copyright date to 2011.

2011-09-19  Sergey Poznyakoff  <gray@gnu.org.ua>

	Minor changes.

	* scripts/tar-snapshot-edit: License under GPLv3+.
	Remove trailing whitespace.

2011-09-19  Nathan Stratton Treadway  <nathanst+bugtar@ontko.com>

	Minor changes.

	* doc/snapshot.texi: Clarify the use of nfs field in 0 and
	1 formats.
	Give more precise information about which versions of tar
	used each
	format.

2011-09-19  Nathan Stratton Treadway  <nathanst+bugtar@ontko.com>

	Upgrade tar-snapshot-edit script.

	* scripts/tar-snapshot-edit: Update Perl syntax to work
	correctly with more recent versions of Perl.  (The original
	code worked with in the v5.8 timeframe but not with
	Perl v5.10.1 and later.)
	Add a "-c" option to check the snapshot file for invalid
	field values.
	Handle NFS indicator character ("+") in version 0 and 1 files.
	Preserve the original header/version line when editing version 1
	or 2 files.
	Tweak output formatting.
	* doc/tar-snapshot-edit.texi: Update documentation.

2011-08-13  Paul Eggert  <eggert@cs.ucla.edu>

	tar: --owner and --group names and numbers

	The --owner and --group options now accept operands of the form
	NAME:NUM, so that you can specify both symbolic name and numeric
	ID for owner and group.  Also, in these options, NAME no longer
	needs to be present in the current host's user and group
	databases; this implements Debian enhancement request 136231
	<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=136231> reported
	by Mark W. Eichin, communicated by Thayne Harbaugh to bug-tar in
	<http://lists.gnu.org/archive/html/bug-tar/2011-08/msg00001.html>.
	* NEWS, doc/tar.texi (Option Summary, override): Document
	enhancement.
	* src/common.h (group_name_option, owner_name_option): New decls.
	* src/create.c (start_header): Don't assume owner and group names
	are in current host database.
	* src/tar.c (parse_owner_group): New function, for parsing
	NAME:NUM.
	(parse_opt): Use it.
	(decode_options): Initialize owner_name_option, group_name_option.
	* tests/owner.at: New file, to test this enhancement.
	* tests/Makefile.am (TESTSUITE_AT): Add it.
	* tests/testsuite.at: Include it.

2011-08-13  Paul Eggert  <eggert@cs.ucla.edu>

	.gitignore: update

	* .gitignore: Add rmt.
	* lib/.gitignore: New file.

2011-07-30  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix the --exclude-backups option.

	* src/tar.c (add_exclude_array): Take exclude option filags in its
	second argument.
	(parse_opt): Register backup_file_table with the EXCLUDE_WILDCARDS
	flag.
	* tests/exclude07.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add testsuite.at.
	* tests/testsuite.at: Include exclude07.at.

2011-06-08  Paul Eggert  <eggert@cs.ucla.edu>

	tar: simplify birthtime calculations

	* src/extract.c (same_birthtime): Remove.
	(extract_link, apply_delayed_links): Go back to using
	timestamp_cmp
	instead of same_birthtime, as this is a bit simpler.  This fix
	relies
	on an up-to-date gnulib.

2011-06-08  Paul Eggert  <eggert@cs.ucla.edu>

	tar: use birthtime rather than ctime when checking identity

	Without this fix, tar would sometimes mishandle the extraction of
	hard links to symbolic links.  Problem reported in
	<http://lists.gnu.org/archive/html/bug-tar/2011-06/msg00000.html>
	by Andreas Stolcke.
	* src/extract.c (struct delayed_link): Change ctime member
	to birthtime.
	(same_birthtime): New function.
	(create_placeholder_file, extract_link, apply_delayed_links):
	Use it to compare birthtimes (when available) instead of ctime.

2011-05-26  Paul Eggert  <eggert@cs.ucla.edu>

	* doc/tar.texi (Old Options): Clarify distinction from short
	options.

	Adjust other parts of the manual to use examples that parse the
	same regardless of whether "-" is in front of the option clump.
	See
	<http://lists.gnu.org/archive/html/bug-tar/2011-05/msg00022.html>.

2011-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Testsuite fix.

	* tests/sparse04.at: Use the -f option.

Bdale Garbee's avatar
Bdale Garbee committed
1904
1905
1906
2011-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 1.26
Bdale Garbee's avatar
Bdale Garbee committed
1907

Bdale Garbee's avatar
Bdale Garbee committed
1908
1909
1910
1911
1912
1913
	* NEWS, configure.ac: Update.
	* po/POTFILES.in: Remove paxexit.c (see bb971a1e).

2011-03-08  Paul Eggert  <eggert@cs.ucla.edu>

	--atime-preserve=replace: fix correctness and performance bugs
Bdale Garbee's avatar
Bdale Garbee committed
1914

Bdale Garbee's avatar
Bdale Garbee committed
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
	reported by Eric Blake in
	<http://lists.gnu.org/archive/html/bug-tar/2011-03/msg00000.html>.
	* src/compare.c (diff_file): Do not restore atime of size-zero
	files.
	* src/create.c (dump_file0): Likewise.	Also, do not restore atime
	when fd is zero, because that indicates a file we haven't opened.

2011-02-23  Paul Eggert  <eggert@cs.ucla.edu>

	* doc/tar.texi: Adjust example commands and output for accuracy.
Bdale Garbee's avatar
Bdale Garbee committed
1925

Bdale Garbee's avatar
Bdale Garbee committed
1926
1927
1928
1929
1930
1931
	The original problem was reported by Michael Witten in
	<http://lists.gnu.org/archive/html/bug-tar/2011-02/msg00033.html>.

2011-02-16  Paul Eggert  <eggert@cs.ucla.edu>

	tar: if (p) free (p); -> free (p);
Bdale Garbee's avatar
Bdale Garbee committed
1932

Bdale Garbee's avatar
Bdale Garbee committed
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
	There is no longer (since SunOS 4) any need to guard against
	free (NULL), so replace each "if (p) free (p);" with "free (p);".
	From Jim Meyering in
	<http://lists.gnu.org/archive/html/bug-tar/2011-01/msg00026.html>.
	* src/incremen.c (scan_directory, read_directory_file): As above.
	(try_purge_directory): Likewise.
	* src/list.c (read_header): Likewise.
	* src/misc.c (assign_string): Likewise.

2010-12-14  Sergey Poznyakoff  <gray@gnu.org.ua>

	Correctly store long sparse file names in PAX archives.
Bdale Garbee's avatar
Bdale Garbee committed
1945

Bdale Garbee's avatar
Bdale Garbee committed
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
	* src/sparse.c (pax_dump_header_1): Make sure the created header
	name is
	shorter than NAME_FIELD_SIZE bytes.
	* tests/sparse04.at: New testcase.
	* tests/Makefile.am (TESTSUITE_AT): Add sparse04.at.
	* tests/testsuite.at: Include sparse04.at.
	* NEWS: Update.

2010-12-07  Paul Eggert  <eggert@cs.ucla.edu>

	tests: make the truncate test smaller and less buggy (tiny change)
Bdale Garbee's avatar
Bdale Garbee committed
1957

Bdale Garbee's avatar
Bdale Garbee committed
1958
1959
1960
1961
1962
1963
1964
1965
1966
	Reported by Solar Designer in
	<http://lists.gnu.org/archive/html/bug-tar/2010-12/msg00003.html>.
	* tests/truncate.at: Use a smaller test case, and make its
	race condition less likely.

2010-11-27  Paul Eggert  <eggert@cs.ucla.edu>

	tests: skip SIGPIPE-dependent tests in environments ignoring
	SIGPIPE
Bdale Garbee's avatar
Bdale Garbee committed
1967

Bdale Garbee's avatar
Bdale Garbee committed
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
	Problem reported by Sven Joachim in
	<http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00043.html>.
	* tests/remfiles01.at: Use AT_SIGPIPE_PREREQ.
	* tests/sigpipe.at: Likewise.
	* tests/testsuite.at (AT_SIGPIPE_PREREQ): New macro.

2010-11-25  Paul Eggert  <eggert@cs.ucla.edu>

	tar: work around NetBSD and Tru64 symlink incompatibility
	with POSIX
Bdale Garbee's avatar
Bdale Garbee committed
1978

Bdale Garbee's avatar
Bdale Garbee committed
1979
1980
1981
1982
1983
1984
1985
1986
1987
	Problem reported by Bruno Haible in
	<http://lists.gnu.org/archive/html/bug-gnulib/2010-11/msg00306.html>.
	* src/extract.c (maybe_recoverable):  Also treat EFTYPE (if
	defined)
	and ENOTSUP like ELOOP.

2010-11-24  Paul Eggert  <eggert@cs.ucla.edu>

	tar: adjust to paxutils change: paxexit.c -> paxexit-status.c
Bdale Garbee's avatar
Bdale Garbee committed
1988

Bdale Garbee's avatar
Bdale Garbee committed
1989
1990
1991
	* lib/Makefile.am (libtar_a_SOURCES): paxexit.c renamed to
	paxexit-status.c.

Bdale Garbee's avatar
Bdale Garbee committed
1992
1993
2010-11-24  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
1994
	tar: remove unused function dir_removed_diag
Bdale Garbee's avatar
Bdale Garbee committed
1995

Bdale Garbee's avatar
Bdale Garbee committed
1996
1997
1998
1999
2000
2001
	* src/common.h (dir_removed_diag): Remove unused decl.
	* src/misc.c (dir_removed_diag): Remove unused function.

2010-11-23  Paul Eggert  <eggert@cs.ucla.edu>

	tar: work around FreeBSD symlink incompatibility with POSIX
Bdale Garbee's avatar
Bdale Garbee committed
2002

Bdale Garbee's avatar
Bdale Garbee committed
2003
2004
2005
2006
	* src/extract.c (maybe_recoverable): Treat EMLINK like ELOOP, for
	FreeBSD.  Problem reported by Christian Weisgerber in
	<http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00080.html>.

Bdale Garbee's avatar
Bdale Garbee committed
2007
2008
2010-11-23  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2009
2010
	* src/names.c: tar: fix bug with --one-file-system
	--listed-incremental
Bdale Garbee's avatar
Bdale Garbee committed
2011

Bdale Garbee's avatar
Bdale Garbee committed
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
	Problem (and idea for fix) reported by Martin Weigel
	<http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00071.html>.
	* src/common.h (is_individual_file): Remove decl.
	* src/create.c (dump_file0): Replace "is_individual_file (p)"
	with "top_level".
	* src/incremen.c (procdir): Replace "!is_individual_file
	(name_buffer)" with "st->parent".  Fix bug with --one-file-system
	and --listed-incremental.
	* src/names.c (individual_file_table, register_individual_file):
	(is_individual_file): Remove.  All uses removed.

Bdale Garbee's avatar
Bdale Garbee committed
2023
2024
2010-11-23  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2025
2026
	tests: new test listed04 for --one-file-system
	--listed-incremental
Bdale Garbee's avatar
Bdale Garbee committed
2027

Bdale Garbee's avatar
Bdale Garbee committed
2028
2029
2030
2031
	* tests/Makefile.am (TESTSUITE_AT): Add listed04.at.
	* tests/listed04.at: New file.
	* tests/testsuite.at: Include it.

Bdale Garbee's avatar
Bdale Garbee committed
2032
2033
2010-11-23  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2034
	scripts: fix option parsing
Bdale Garbee's avatar
Bdale Garbee committed
2035

Bdale Garbee's avatar
Bdale Garbee committed
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
	Problem reported by Dennis Wydra in
	<http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00082.html>.
	* scripts/backup.in: Accept "-l LEVEL".  Be more systematic about
	backslashes inside ``; it shouldn't matter for modern shells but
	it might matter for older ones.
	* scripts/restore.in: Likewise.
	* scripts/backup.in: Adjust implementation of -t/--time to match
	the new implementation of -l/--level.

2010-11-15  Sergey Poznyakoff  <gray@gnu.org.ua>

	Issue a warning if the archive being compared contais transformed
	file names.
Bdale Garbee's avatar
Bdale Garbee committed
2049

Bdale Garbee's avatar
Bdale Garbee committed
2050
2051
2052
2053
2054
	* src/common.h (transform_program_p): New proto.
	* src/transform.c (transform_program_p): New function.
	* src/compare.c (verify_volume): Warn if the archive contains
	transformed file names.

Bdale Garbee's avatar
Bdale Garbee committed
2055
2056
2010-11-15  Sergey Poznyakoff  <gray@gnu.org.ua>

Bdale Garbee's avatar
Bdale Garbee committed
2057
	Minor change.
Bdale Garbee's avatar
Bdale Garbee committed
2058

Bdale Garbee's avatar
Bdale Garbee committed
2059
2060
2061
2062
2063
	* doc/tar.texi: Reword the description of decompress-program.

2010-11-15  Paul Eggert  <eggert@cs.ucla.edu>

	tar: fix --verify option, which broke in 1.24
Bdale Garbee's avatar
Bdale Garbee committed
2064

Bdale Garbee's avatar
Bdale Garbee committed
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
	* NEWS: Document this.
	* src/compare.c (verify_volume): Decode the header before invoking
	diff_archive, as diff_archive no longer does this as of the
	2010-06-28 commit.  Also, don't try to invoke diff_archive on a
	zero block.
	* tests/Makefile.am (TESTSUITE_AT): Add verify.at.
	* tests/testsuite.at: Include verify.at.
	* tests/verify.at: New file.

2010-11-08  Paul Eggert  <eggert@cs.ucla.edu>

	Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/tar

2010-11-08  Jim Meyering  <meyering@redhat.com>

	tests: avoid spurious failure when VERSION_CONTROL envvar is set
Bdale Garbee's avatar
Bdale Garbee committed
2081

Bdale Garbee's avatar
Bdale Garbee committed
2082
2083
2084
	* tests/backup01.at: Unset VERSION_CONTROL.  Otherwise,
	when set to e.g., 'always', it would cause this test to fail.

Bdale Garbee's avatar
Bdale Garbee committed
2085
2086
2087
2010-11-07  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 1.25
Bdale Garbee's avatar
Bdale Garbee committed
2088

Bdale Garbee's avatar
Bdale Garbee committed
2089
2090
2091
2092
2093
2094
2095
	* configure.ac: Version 1.25
	* NEWS: Describe the changes.

2010-11-05  Sergey Poznyakoff  <gray@gnu.org.ua>

	Run alternative decompression programs if the principal one is
	not available.
Bdale Garbee's avatar
Bdale Garbee committed
2096

Bdale Garbee's avatar
Bdale Garbee committed
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
	Some compression programs are able to handle various compression
	formats
	(e.g. `gzip' can decompress files created by `compress', `xz'
	is able
	to handle lzma, etc.)  Tar tries to use such programs for
	decompression
	if the principal decompressor cannot be started.

	* src/buffer.c (compress_type): Swap ct_none and ct_tar.
	(archive_compression_type): New static variable.
	(zip_magic): Remove program and option fields.
	(zip_program): New structure and static.
	(compress_program): Remove macro.
	(find_zip_program): New static function.
	(first_decompress_program,next_decompress_program): New functions.
	(open_compressed_archive): Set archive_compression_type instead of
	use_compress_program_option.
	* src/common.h (first_decompress_program)
	(next_decompress_program): New functions.
	(WARN_DECOMPRESS_PROGRAM): New flag.
	(WARN_VERBOSE_WARNINGS): Include WARN_DECOMPRESS_PROGRAM.
	* src/warning.c (warning_args): Add "decompress-program".
	(warning_types): Add WARN_DECOMPRESS_PROGRAM.
	* src/system.c (run_decompress_program): New function.
	(sys_child_open_for_uncompress): Use run_decompress_program
	instead of calling execlp directly.

2010-11-02  Paul Eggert  <eggert@cs.ucla.edu>

	tests: fix some issues with signals, timestamps, "test" typo
Bdale Garbee's avatar
Bdale Garbee committed
2127

Bdale Garbee's avatar
Bdale Garbee committed
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
	* tests/extrac17.at: Add --warning=no-timestamp, to avoid
	bogus warning due to NFS clock skew.
	* tests/remfiles01.at: Discard diagnostics that some shells
	generate about broken pipes.
	* tests/sigpipe.at: Likewise.
	* tests/remfiles01.at: Fix typo: "test $EC" was written where
	"test $EC -ne 0" was intended.

2010-11-01  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix extraction of device nodes.
Bdale Garbee's avatar
Bdale Garbee committed
2139

Bdale Garbee's avatar
Bdale Garbee committed
2140
2141
2142
2143
2144
2145
	* src/extract.c (extract_node): Do not mask out node type.
	The bug was introduced in commit ea964cce.

2010-10-28  Paul Eggert  <eggert@cs.ucla.edu>

	tar: don't cross struct member boundaries with OLDGNU_MAGIC
Bdale Garbee's avatar
Bdale Garbee committed
2146

Bdale Garbee's avatar
Bdale Garbee committed
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
	* src/create.c (write_gnu_long_link, start_header): Access
	header->buffer + offsetof (struct posix_header, magic), instead of
	header->header.magic, when reading or writing the OLDGNU_MAGIC
	pattern.  The code violates the C standard without this change,
	and GCC warns about this if fortify checking is enabled.  It's not
	a bug on traditional (i.e., non-debugging) platforms, but it does
	violate the C standard so it should be fixed.  Problem originally
	reported by John Emil Karlson in
	<http://lists.gnu.org/archive/html/bug-tar/2010-04/msg00023.html>.
	* src/list.c (decode_header): Likewise.

Bdale Garbee's avatar
Bdale Garbee committed
2158
2159
2010-10-28  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2160
	tests: port to sh variants that squirrel away file descriptors
Bdale Garbee's avatar
Bdale Garbee committed
2161

Bdale Garbee's avatar
Bdale Garbee committed
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
	OpenBSD /bin/sh, and some other sh variants, squirrel away file
	descriptors before closing them.  For example, for "cat 3<&-" they
	first dup file descriptor 3 to a fd that is 10 or greater, then
	close 3 (because if "cat" had been a builtin command like ":" then
	they would have wanted to avoid the fork and restore the fd after
	":" finished); and they treat ordinary (forking) commands the same
	as builtin commands.  This approach fails after "ulimit -n 10".
	Work around this deficiency by closing the file descriptors before
	invoking ulimit.  Problem reported by Christian Weisgerber in
	<http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00041.html>;
	solution suggested by Jilles Tjoelker in
	<http://article.gmane.org/gmane.comp.shells.dash/415>.

	* tests/extrac11.at (scarce file descriptors): Close file
	descriptors before invoking ulimit -n.

2010-10-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Transform file names when updating and appendig to archives.
Bdale Garbee's avatar
Bdale Garbee committed
2181

Bdale Garbee's avatar
Bdale Garbee committed
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
	This complements 28e91b48.

	* src/common.h (transform_stat_info): New prototype.
	* src/list.c (transform_stat_info): Remove static qualifier.
	* src/update.c (update_archive): Call transform_stat_info.
	* tests/Makefile.am (TESTSUITE_AT): Add append03.at
	* tests/testsuite.at: Include append03.at

2010-10-27  Paul Eggert  <eggert@cs.ucla.edu>

	tests: port to Solaris diff
Bdale Garbee's avatar
Bdale Garbee committed
2193

Bdale Garbee's avatar
Bdale Garbee committed
2194
2195
2196
2197
	* tests/extrac13.at: Don't assume that "diff -c" outputs nothing
	when there are no differences.	This is not true on Solaris,
	where it outputs "No differences encounted".

Bdale Garbee's avatar
Bdale Garbee committed
2198
2199
2010-10-27  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2200
	tar: fix -x --overwrite bug (no --dereference, ! O_NOFOLLOW)
Bdale Garbee's avatar
Bdale Garbee committed
2201

Bdale Garbee's avatar
Bdale Garbee committed
2202
2203
2204
2205
2206
2207
2208
	This bug was discovered on Solaris 8.  On older hosts lacking
	O_NOFOLLOW, tar -x --overwrite (without --dereference) follows
	symbolic links, causing the "extract over symlinks" test to fail.

	* src/extract.c (open_output_file): If O_NOFOLLOW is needed but
	does not work, check for a symlink separately.

Bdale Garbee's avatar
Bdale Garbee committed
2209
2210
2010-10-27  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2211
	tar: don't use "((" in shell scripts
Bdale Garbee's avatar
Bdale Garbee committed
2212

Bdale Garbee's avatar
Bdale Garbee committed
2213
2214
2215
2216
2217
2218
2219
	* tests/extrac11.at: Replace "((" with "( (" in shell scripts, as
	"((" is not portable to the Korn shell, and POSIX 1003.1-2008 says
	that "((" is not portable.

2010-10-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Make sure name matching occurs before name transformation.
Bdale Garbee's avatar
Bdale Garbee committed
2220

Bdale Garbee's avatar
Bdale Garbee committed
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
	The commit 9c194c99 altered that order.

	* src/list.c (transform_stat_info): New function.  Split off from
	decode_header.
	(read_and): Call transform_stat_info right before do_something,
	and after deciding if we should proceed with this member name,
	so that name matching occurs before name transformation.

	* tests/extrac17.at: New file.
	* tests/Makefile.am (TESTSUITE_AT): Add extrac17.at
	* tests/testsuite.at: Include extrac17.at.

2010-10-26  Paul Eggert  <eggert@cs.ucla.edu>

	tar: don't assume stdin is open when testing fd limits
Bdale Garbee's avatar
Bdale Garbee committed
2236

Bdale Garbee's avatar
Bdale Garbee committed
2237
2238
2239
2240
2241
2242
	* tests/extrac11.at: Redirect stdin from /dev/null, in case
	the parent 'make' is running with stdin closed.

2010-10-26  Sergey Poznyakoff  <gray@gnu.org.ua>

	Further fixes in bootstrap.
Bdale Garbee's avatar
Bdale Garbee committed
2243

Bdale Garbee's avatar
Bdale Garbee committed
2244
2245
2246
2247
2248
2249
	* bootstrap: Restore the default for gnulib_path
	(symlink_to_dir): Re-apply 67cad07.

2010-10-26  Paul Eggert  <eggert@cs.ucla.edu>

	tar: fix bug with -C and extracting directories
Bdale Garbee's avatar
Bdale Garbee committed
2250

Bdale Garbee's avatar
Bdale Garbee committed
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
	Problem reported by Denis Excoffier in
	<http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00034.html>.

	* src/extract.c (extract_dir): Use mkdirat, not mkdir.
	* tests/extrac16.at: New file, to test for this bug.
	* tests/Makefile.am (TESTSUITE_AT): Add it.
	* tests/testsuite.at: Include it.

	This file is a placeholder. It will be replaced with the actual
	ChangeLog
	by make dist.  Run make ChangeLog if you wish to create it
	earlier.

Bdale Garbee's avatar
Bdale Garbee committed
2264
2265
2266
2010-10-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Version 1.24
Bdale Garbee's avatar
Bdale Garbee committed
2267

Bdale Garbee's avatar
Bdale Garbee committed
2268
2269
2270
2271
2272
2273
2274
2275
	* configure.ac, NEWS: Version 1.24
	* bootstrap: Restore tar-specific code lost during last
	sync from gnulib (241b72ffad).
	* src/misc.c (chdir_do): Remove unused automatic variable.

2010-10-16  Paul Eggert  <eggert@cs.ucla.edu>

	tar: use more-accurate diagnostic when intermediate mkdir fails
Bdale Garbee's avatar
Bdale Garbee committed
2276

Bdale Garbee's avatar
Bdale Garbee committed
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
	Without this change, if tar tried to extract a file A/B/C, noticed
	that A/B didn't exist, attempted to mkdir A/B, and the mkdir
	failed, it did not diagnose the mkdir failure, but simply reported
	the failure to open A/B/C.  This sometimes led to confusion
	because it wasn't clear what tar was trying to do, in particular
	that tar tried to mkdir A/B.  With this patch, tar issues two
	diagnostics in this case: one for A/B and the other for A/B/C.
	Problem reported by Hauke Laging in
	<http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00020.html>.
	* gnulib.modules: Remove faccessat.
	* src/extract.c (make_directories): New arg INTERDIR_MADE.
	Diagnose mkdir failure.  Return 0 on success, nonzero on failure,
	as opposed to nonzero iff some directory was created.  All callers
	changed.  Simplify the code when mkdir fails, by checking whether
	the desired file exists unless errno==EEXIST: this is more robust.
	* tests/extrac15.at: New test, to check this.
	* tests/Makefile.am (TESTSUITE_AT): Add it.
	* tests/testsuite.at: Include it.

Bdale Garbee's avatar
Bdale Garbee committed
2296
2297
2010-10-16  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2298
	tests: port to NFS file servers with clock skew
Bdale Garbee's avatar
Bdale Garbee committed
2299

Bdale Garbee's avatar
Bdale Garbee committed
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
	Several of the tests assumed that a newly created file cannot
	have a time stamp dated in the future.	This assumption is not
	true when files are served by a remote host whose clock is
	slightly in advance of ours.  Fix the problems that I observed
	when running "make check" a couple of times on such a server.

	* tests/backup01.at: Use --warning=no-timestamp to suppress
	clock-skew warnings.
	* tests/chtype.at, tests/comprec.at, tests/exclude06.at:
	* tests/extrac01.at, tests/extrac03.at, tests/extrac05.at:
	* tests/extrac06.at, tests/extrac08.at, tests/extrac13.at:
	* tests/extrac14.at, tests/incr01.at, tests/incr03.at,
	tests/link01.at:
	* tests/multiv01.at, tests/multiv02.at, tests/multiv03.at:
	* tests/pipe.at, tests/rename02.at, tests/rename03.at:
	* tests/rename05.at, tests/same-order01.at, tests/same-order02.at:
	* tests/sparse01.at:
	Likewise.

2010-10-12  Paul Eggert  <eggert@cs.ucla.edu>

	gnulib: sync from latest gnulib, notably bootstrap and
	parse-datetime
Bdale Garbee's avatar
Bdale Garbee committed
2323

Bdale Garbee's avatar
Bdale Garbee committed
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
	* bootstrap: Sync from gnulib.
	* doc/.gitignore: Rename getdate.texi to parse-datetime.texi.
	* doc/Makefile.am (tar_TEXINFOS): Likewise.
	* doc/tar.texi (Top): Adjust to renaming of getdate to
	parse-datetime.
	* gnulib.modules: Likewise.  Also, remove ftruncate (now
	obsolete).
	And add inttostr (we missed this dependency).
	* src/tar.c: Include parse-datetime.h, not getdate.h.  All calls
	to get_date replaced with parse_datetime.

2010-09-24  Paul Eggert  <eggert@cs.ucla.edu>

	tar: -x -C symlink fix
Bdale Garbee's avatar
Bdale Garbee committed
2338

Bdale Garbee's avatar
Bdale Garbee committed
2339
2340
2341
2342
2343
2344
2345
	* src/misc.c (chdir_do): Don't use O_NOFOLLOW when opening the
	argument to -C.  This is for consistency with "tar -c -C FOO", and
	matches the new documentation.
	* tests/extrac14.at: New file.
	* tests/Makefile.am (TESTSUITE_AT): Add it.
	* tests/testsuite.at: Include it.

Bdale Garbee's avatar
Bdale Garbee committed
2346
2347
2010-09-24  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2348
	tar: --dereference consistency
Bdale Garbee's avatar
Bdale Garbee committed
2349

Bdale Garbee's avatar
Bdale Garbee committed
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
	This closes another race condition, that occurs when overwriting a
	symlink with a regular file.
	* NEWS (--dereference consistency): New section.
	* doc/tar.texi (Option Summary): Describe new --deference
	behavior.
	(dereference): Likewise.  Remove discussion that I didn't follow,
	even before --dereference was changed.
	* src/common.h (deref_stat, set_file_atime): Adjust signatures.
	* src/compare.c (diff_file, diff_multivol): Respect
	open_read_flags
	instead of rolling our own flags.  This implements the new
	behavior
	for --dereference.
	(diff_file, diff_dumpdir): Likewise, for fstatat_flags.
	* src/create.c: Adjust to set_file_atime signature change.
	* src/extract.c (mark_after_links, file_newer_p, extract_dir):
	Likewise.
	* src/incremen.c (try_purge_directory): Likewise.
	* src/misc.c (maybe_backup_file): Likewise.
	* src/extract.c (file_newer_p): New arg STP.  All callers changed.
	(maybe_recoverable): New arg REGULAR.  All callers changed.
	Handle the case of overwriting a symlink with a regular file,
	when --overwrite is specified but --dereference is not.
	(open_output_file): Add O_CLOEXEC, O_NOCTTY, O_NONBLOCK for
	consistency with file creation.  Add O_NOFOLLOW if
	overwriting_old_files && ! dereference_option.
	* src/incremen.c (update_parent_directory): Use fstat, not
	fstatat;
	there's less to go wrong.
	* src/misc.c (deref_stat): Remove DEREF arg.  All callers changed.
	Instead, use fstatat_flags.
	(set_file_atime): Remove ATFLAG arg.  All callers changed.
	Instead, use fstatat_flags.
	* src/names.c, src/update.c: Adjust to deref_stat signature
	change.
	* src/tar.c (get_date_or_file): Use stat, not deref_stat, as this
	is not a file to be archived.
	* tests/Makefile.am (TESTSUITE_AT): Add extrac13.at.
	* tests/extrac13.at: New file.
	* tests/testsuite.at: Include it.

2010-09-20  Paul Eggert  <eggert@cs.ucla.edu>

	tar: do not crash with --listed-incremental
Bdale Garbee's avatar
Bdale Garbee committed
2394

Bdale Garbee's avatar
Bdale Garbee committed
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
	Problem reported by Frantisek Hanzlik in
	<https://bugzilla.redhat.com/635318> via Kamil Dudka in
	<http://lists.gnu.org/archive/html/bug-tar/2010-09/msg00066.html>.
	I don't understand this code either, but Sergey can take a look at
	this patch, and perhaps install a better one, when he has
	the time.
	* src/incremen.c (append_incremental_renames): Don't actually
	append
	anything to DIR if DIR is null.

2010-09-19  Paul Eggert  <eggert@cs.ucla.edu>

	tar: prefer openat-style functions
Bdale Garbee's avatar
Bdale Garbee committed
2408

Bdale Garbee's avatar
Bdale Garbee committed
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
	This change replaces traditional functions like 'open' with the
	POSIX.1-2008 functions like 'openat'.  Mostly this is an internal
	refactoring change, in preparation for further changes to close
	some races.
	* gnulib.modules: Add faccessat, linkat, mkfifoat, renameat,
	symlinkat.
	Remove save-cwd.
	* src/Makefile.am (tar_LDADD): Add $(LIB_EACCESS).
	* tests/Makefile.am (LDADD): Likewise.
	* src/common.h (chdir_fd): New extern var.
	* src/compare.c (diff_file, diff_multivol): Use openat instead
	of open.
	* src/create.c (create_archive, restore_parent_fd): Likewise.
	* src/extract.c (create_placeholder_file): Likewise.
	* src/names.c (collect_and_sort_names): Likewise.
	* src/update.c (append_file): Likewise.
	* src/compare.c (diff_symlink): Use readlinkat instead of
	readlink.
	* src/compare.c (diff_file): Use chdir_fd instead of AT_FDCWD.
	* src/create.c (subfile_open, dump_file0): Likewise.
	* src/extract.c (fd_chmod, fd_chown, fd_stat, set_stat):
	(repair_delayed_set_stat, apply_nonancestor_delayed_set_stat):
	Likewise.
	* src/extract.c (mark_after_links, file_newer_p, extract_dir):
	(extract_link, apply_delayed_links):
	Use fstatat rather than stat or lstat.
	* src/misc.c (maybe_backup_file, deref_stat): Likewise.
	* src/extract.c (make_directories): Use mkdirat rather than mkdir.
	Use faccessat rather than access.  This fixes a minor permissions
	bug when tar is running setuid (who would want to do that?!).
	(open_output_file): Use openat rather than open.
	In the process, this removes support for Masscomp's O_CTG files,
	which aren't compatible with openat's signature.  Masscomp!  Wow!
	That's a blast from the past.  As far as I know, that operating
	system hasn't been supported for more than 20 years.
	(extract_link, apply_delayed_links):
	Use linkat rather than link.
	(extract_symlink, apply_delayed_links):
	Use symlinkat rather than symlink.
	(extract_node): Use mknodat rather than mknod.
	(extract_fifo): Use mkfifoat rather than mkfifo.
	(apply_delayed_links): Use unlinkat rather than unlink or rmdir.
	* src/misc.c (safer_rmdir, remove_any_file): Likewise.
	* src/unlink.c (flush_deferred_unlinks): Likewise.
	* src/extract.c (rename_directory): Use renameat rather than
	rename.
	* src/misc.c (maybe_backup_file, undo_last_backup): Likewise.
	* src/misc.c: Don't include <save-cwd.h>; no longer needed now
	that we're using openat etc.
	(struct wd): Add member fd.  Remove members err and fd.  All uses
	changed.
	(CHDIR_CACHE_SIZE): New constant.
	(wdcache, wdcache_count, chdir_fd): New vars.
	(chdir_do): Use openat rather than save_cwd.  Keep the cache up
	to date.  This code won't scale well, but is good enough for now.
	* src/update.c (update_archive): Use openat + fdopendir +
	streamsavedir rather than savedir.

	This file is a placeholder. It will be replaced with the actual
	ChangeLog
	by make dist.  Run make ChangeLog if you wish to create it
	earlier.

2010-09-18  Paul Eggert  <eggert@cs.ucla.edu>

	tar: add utimens.h includes
Bdale Garbee's avatar
Bdale Garbee committed
2475

Bdale Garbee's avatar
Bdale Garbee committed
2476
2477
2478
2479
	* src/extract.c: Include <utimens.h>, needed for fdutimens
	prototype.
	* src/misc.c: Likewise.

Bdale Garbee's avatar
Bdale Garbee committed
2480
2481
2010-09-18  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2482
	tar: switch to gnulib fdutimensat module
Bdale Garbee's avatar
Bdale Garbee committed
2483

Bdale Garbee's avatar
Bdale Garbee committed
2484
2485
2486
2487
2488
2489
2490
2491
2492
	* gnulib.modules: Add fdutimensat.
	* src/common.h (fd_utimensat): Remove decl.
	* src/extract.c (set_stat): Call fdutimensat, not fd_utimensat.
	* src/misc.c (set_file_atime): Likewise.
	(fd_utimensat): Remove.

2010-09-17  Paul Eggert  <eggert@cs.ucla.edu>

	tar: extract permissions for . last
Bdale Garbee's avatar
Bdale Garbee committed
2493

Bdale Garbee's avatar
Bdale Garbee committed
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
	* src/common.h (must_be_dot_or_slash): New decl.
	* src/extract.c (mark_after_links): New function, taking code
	that used to be in create_placeholder_file.
	(create_placeholder_file): Use it.
	(delay_set_stat): Always delay setting status for . and /.
	* src/misc.c (must_be_dot_or_slash): Now extern.
	* tests/extrac12.at: New file.
	* tests/Makefile.am (TESTSUITE_AT): Add it.
	* tests/testsuite.at: Likewise.

Bdale Garbee's avatar
Bdale Garbee committed
2504
2505
2010-09-17  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2506
	tar: don't check for getdtablesize; use AC_CHECK_FUNCS_ONCE
Bdale Garbee's avatar
Bdale Garbee committed
2507

Bdale Garbee's avatar
Bdale Garbee committed
2508
2509
2510
2511
	* configure.ac: Don't check for getdtablesize; no longer needed.
	Use AC_CHECK_FUNCS_ONCE rather than AC_CHECK_FUNCS, for
	efficiency.

Bdale Garbee's avatar
Bdale Garbee committed
2512
2513
2010-09-17  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2514
	tar: extract symlink attributes, close some symlink-related races
Bdale Garbee's avatar
Bdale Garbee committed
2515

Bdale Garbee's avatar
Bdale Garbee committed
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
	* NEWS: Describe symlink-extraction improvements.
	* src/extract.c (enum permstatus): Remove.
	(fchmod, fchown): Define dummy replacement macros if the system
	does not supply them.
	(implemented): New function.
	(struct delayed_set_stat): Remove members invert_permissions,
	permstatus.  They were too confusing, and tried to do too much
	in too-little space.  Instead, add members current_mode,
	current_mode_mask, interdir, atflag.  All users changed.
	(struct delayed_link): Add members mode, atime, mtime, to support
	platforms such as BSD where symlinks have these attributes.
	All users changed.
	(fd_chmod): Renamed from fdchmod.  New argument atflag.  Check for
	operation not supported at run-time, not at configure-time.  Put
	fd argument first.  All callers changed.
	(fd_chown): Likewise, renaming from fdchown.
	(fd_stat): Likewise, renaming from fdstat.
	(set_mode): Remove args stat_info, cur_info, invert_permissions,
	permstatus.  Add args mode, mode_mask, current_mode,
	current_mode_mask,
	atflag.  All callers changed.  Close some races.  Use an easier-to
	understand method for computing permissions.  Work around POSIX
	incompatibility in Linux fchmodat.  Support extraction of symlink
	modes, if the OS allows it.
	(set_stat): Remove args cur_info, invert_permissions, permstatus.
	Add args current_mode, current_mode_mask, interdir, atflag.
	All callers changed.  Close some races.  Support extraction of
	attributes on symlinks, if the OS allows it.
	(delay_set_stat): Remove args invert_permissions, permstatus.
	Add args current_mode, current_mode_mask, mode, atflag.
	The ST arg can be null now, indicating that it's an intermediate
	directory.  All callers changed.
	(repair_delayed_set_stat, apply_nonancestor_delayed_set_stat):
	Close some races.
	(extract_dir): Also be paranoid if only --same-permissions, due
	to semantics of setgid and setuid directories on some hosts.
	This closes a race on those hosts.  Simplify calculation of
	delay_set_stat arguments; the old code was truly strange and
	probably wrong in some border cases.
	(extract_dir, extract_file, extract_node, extract_fifo): Don't
	rely on
	unspecified behavior in mode arg of open, mknod, etc.  Instead,
	mask out those bits when creating the file, and add them later via
	fchmod or chmodat.
	(open_output_file): file_name is now const.  Add arg current_mode,
	current_mode_mask.  All callers changed.  When overwriting
	old files,
	refuse to overwrite something that is not a regular file, since
	we're extracting a regular file.
	(extract_file): Remove the FIXME comment.  Whatever the protection
	issues were, they should be fixed now.	As a result of all
	the other
	API changes, we now use fchmod etc. rather than chmod etc.,
	closing
	some races.
	(create_placeholder_file, apply_delayed_links): Record desired
	mode and times for symlinks, for OSes that support that.

2010-09-16  Paul Eggert  <eggert@cs.ucla.edu>

	tar: tar -x without --incremental no longer sets atime again
Bdale Garbee's avatar
Bdale Garbee committed
2577

Bdale Garbee's avatar
Bdale Garbee committed
2578
2579
2580
2581
2582
2583
	* src/extract.c (set_stat): Use UTIME_OMIT rather than UTIME_NOW.
	The UTIME_NOW was there only to emulate the previous behavior of
	using the current time, and the previous behavior was there only
	because before we started assuming POSIX.1-2008 there was no
	portable way to get the effect of UTIME_NOW.

Bdale Garbee's avatar
Bdale Garbee committed
2584
2585
2010-09-16  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2586
	tar: another --atime-preserve race fix
Bdale Garbee's avatar
Bdale Garbee committed
2587

Bdale Garbee's avatar
Bdale Garbee committed
2588
2589
2590
2591
2592
2593
	* src/common.h (set_file_atime): Add parentfd arg.
	* src/compare.c (diff_file): Use it.
	* src/create.c (dump_file0): Likewise.	This closes yet another
	race condition with symbolic links.
	* src/misc.c (set_file_atime): Add parentfd arg.

Bdale Garbee's avatar
Bdale Garbee committed
2594
2595
2010-09-16  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2596
	tar: --atime-preserve fixes for races etc.
Bdale Garbee's avatar
Bdale Garbee committed
2597

Bdale Garbee's avatar
Bdale Garbee committed
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
	This patch fixes a race condition in the --atime-preserve=replace
	option, which might cause tar to improperly follow a symbolic
	link.

	It also drops the use of the _FIOSATIME ioctl of Solaris 2.x
	and later, which loses resolution on time stamps.  Modern Solaris
	systems support full-resolution time stamps in the kernel, and
	it's not worth the hassle of testing this call, useful only in
	no-longer-supported Solaris variants.

	Also, it undoes a change I recently introduced to the --compare
	option, which caused it to not follow symbolic links unless the
	--dereference option was also used.  Quite possibly this change is
	a good idea, but the old behavior was documented and the change
	should not have been installed casually.

	* configure.ac: Don't check for stropts.h and sys/filio.h.
	* gnulib.modules: Add futimens, utimensat.  Remove futimens.
	* src/common.h (fd_utimensat): New decl.
	* src/compare.c (diff_file, diff_multivol):
	Don't use open_read_flags: those are for --create only.
	* src/create.c (dump_file0): Adjust to set_file_atime changes.
	Pass fstatat_flags to set_file_atime, so that symbolic links are
	not followed inadvertantly.
	* src/extract.c: Don't include utimens.h.
	(set_stat): Use fd_utimensat ant UTIME_NOW rather than fdutimens.
	* src/misc.c: Don't include utimens.h, stropts.h, sys/filio.h.
	(fd_utimensat): New function.
	(set_file_atime): Use it.  New arg atflag, controlling symlink
	handling.  All callers changed.

2010-09-14  Paul Eggert  <eggert@cs.ucla.edu>

	* configure.ac: tar: close some race conditions when extracting
Bdale Garbee's avatar
Bdale Garbee committed
2632

Bdale Garbee's avatar
Bdale Garbee committed
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
	* configure.ac: Check for fchmod and fchown.  Don't check
	for utimes.
	* src/extract.c (fdchmod, fdchown, fdstat): New functions.
	(set_mode, set_stat): New arg FD.  All callers changed.
	This avoids some race conditions between closing a regular file
	and setting its metadata, and it's a bit faster.

2010-09-13  Paul Eggert  <eggert@cs.ucla.edu>

	tar: don't worry about fdopendir closing its argument
Bdale Garbee's avatar
Bdale Garbee committed
2643

Bdale Garbee's avatar
Bdale Garbee committed
2644
2645
2646
2647
2648
2649
2650
2651
	* NEWS: Don't mention dirfd; no longer needed.
	* gnulib.modules: Remove dirfd.
	* src/create.c (get_directory_entries): Remove the code dealing
	with dirfd failures, as the new fdopendir replacement doesn't
	close its argument so we don't need to call dirfd.  See
	<http://lists.gnu.org/archive/html/bug-gnulib/2010-09/msg00208.html>
	and gnulib commit 970c9038e4cca46e1b037ae0a6d574dfae6a7327.

Bdale Garbee's avatar
Bdale Garbee committed
2652
2653
2010-09-13  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2654
	* NEWS: Fix wording typo in previous change.
Bdale Garbee's avatar
Bdale Garbee committed
2655

Bdale Garbee's avatar
Bdale Garbee committed
2656
2657
	Reported by Jim Meyering.

Bdale Garbee's avatar
Bdale Garbee committed
2658
2659
2010-09-13  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2660
	tar: live within system-supplied limits on file descriptors
Bdale Garbee's avatar
Bdale Garbee committed
2661

Bdale Garbee's avatar
Bdale Garbee committed
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
	* NEWS: Note the change.  Mention dirfd and fdopendir.
	* gnulib.modules: Add dirfd and fdopendir.  The code was already
	using fdopendir; dirfd is a new need.
	* src/common.h (open_searchdir_flags, get_directory_entries):
	(subfile_open, restore_parent_fd, tar_stat_close): New decls.
	(check_exclusion_tags): Adjust signature to match code change.
	* src/create.c (IMPOSTOR_ERRNO): New constant.
	(check_exclusion_tags): First arg is now a struct tar_stat_info
	const *, not an fd.  All callers changed.
	(dump_regular_file, dump_file0): A zero fd represents an unused
	slot, so play it safe if the fd member is zero here.  A negative
	fd represents the negation of an errno value, so play it safe and
	do not assign -1 to fd merely because an open fails.
	(open_failure_recover, get_directory_entries, restore_parent_fd):
	(subfile_open): New functions.	These help to recover from file
	descriptor exhaustion.
	(dump_dir, dump_file0): Use them.
	(dump_file0): Use tar_stat_close instead of rolling our own close.
	* src/incremen.c (scan_directory): Use get_directory_entries,
	subfile_open, etc., to recover from file descriptor exhaustion.
	* src/names.c (add_hierarchy_to_namelist): Likewise.
	(collect_and_sort_names): A negative fd represents the negation
	of an errno value, so play it safe and do not assign -1 to fd.
	* src/tar.c (decode_options): Set open_searchdir_flags.
	Add O_CLOEXEC to all the open flags.
	(tar_stat_close): New function, which knows how to deal with
	new convention for directory streams and file descriptors.
	Diagnose 'close' failures.
	(tar_stat_destroy): Use it.
	* src/tar.h (struct tar_stat_info): New member dirstream.
	fd now has the negative of an errno value, not merely -1, if
	the file could not be opened, so that failures to reopen
	directories
	are better-diagnosed later.
	* tests/Makefile.am (TESTSUITE_AT): Add extrac11.at.
	* tests/testsuite.at: Likewise.
	* tests/extrac11.at: New file.

2010-09-08  Paul Eggert  <eggert@cs.ucla.edu>

	tar: improve documentation of reliability and security issues
Bdale Garbee's avatar
Bdale Garbee committed
2703

Bdale Garbee's avatar
Bdale Garbee committed
2704
2705
2706
2707
2708
2709
2710
2711
2712
	* doc/tar.texi (Reliability and security, Reliability):
	(Permissions problems, Data corruption and repair, Race
	conditions):
	(Security, Privacy, Integrity, Live untrusted data):
	(Security rules of thumb): New nodes.

2010-09-06  Paul Eggert  <eggert@cs.ucla.edu>

	tar: more reliable directory traversal when creating archives
Bdale Garbee's avatar
Bdale Garbee committed
2713

Bdale Garbee's avatar
Bdale Garbee committed
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
	* NEWS: Document this.
	* gnulib.modules: Add openat, readlinkat.
	* src/common.h (open_read_flags, fstatat_flags): New global
	variables.
	(cachedir_file_p, dump_file, check_exclusion_tags,
	scan_directory):
	Adjust to new signatures, described below.
	(name_fill_directory): Remove.
	* src/compare.c (diff_file, diff_multivol): Use open_read_flags.
	* src/create.c (struct exclusion_tag): Exclusion predicates
	now take
	a file descriptor, not a file name.
	(add_exclusion_tag): Likewise.	All uses changed.
	(cachedir_file_p): Likewise.
	(check_exclusion_tags): The directory is now a file descriptor,
	not a file name.  All uses changed.  Use openat for better
	traversal.
	(file_dumpable_p): Arg is now a struct stat, not a struct
	tar_stat_info.	All uses changed.  Check the arg's file types too.
	(dump_dir0, dump_dir, dump_file0, dump_file): Omit top_level and
	parent_device args, since st->parent tells us that now.  All uses
	changed.
	(dump_dir): Likewise.  Also, omit fd arg for similar reasons.
	Apply fdsavedir to a dup of the file descriptor, since we need a
	file descriptor for openat etc. as well, and fdsavedir (perhaps
	unwisely) consumes its file descriptor when successful.
	Do not consume st->fd when successful; this simplifies the caller.
	(create_archive): Allocate a file descriptor when retraversing
	a directory, during incremental dumps.
	(dump_file0): Use fstatat, openat, and readlinkat for better
	traversal.
	When opening a file, use the result of fstat on the file
	descriptor
	rather than the fstatat on the directory entry, to avoid some race
	conditions.  No need to reopen the directory since we now
	no longer
	close it.  Change "did we open the file?" test from 0 <= fd to
	0 < fd since fd == 0 now represents uninitialized.
	(dump_file): Now accepts struct tar_stat_info describing parent,
	not parent_device.  Also, accept basename and fullname of entry.
	All uses changed.
	* src/incremen.c (update_parent_directory): Accept struct
	tar_stat_info for parent, not name.  All callers changed.
	Use fstatat for safer directory traversal.
	(procdir): Accept struct tar_stat_info, not struct stat and
	dev_t, for info about directory.  All callers changed.
	(scan_directory): Accept struct tar_stat_info, not name,
	device, and cmdline, for info about directory.	All callers
	changed.  Do not consume the file descriptor, since caller
	might need it.	Use fstatat and openat for safer directory
	traversal; also, use fstat after opening to double-check.
	(name_fill_directory): Remove.
	* src/names.c (add_hierarchy_to_namelist): Accept struct
	tar_stat_info instead of device and cmdline.  All callers changed.
	When descending into a subdirectory, use openat and fstat for
	safer directory traversal.
	(collect_and_sort_names): Use open and fstat for safer directory
	traversal.  Set up struct tar_stat_info for callee's new API.
	* src/tar.c (decode_options): Initialize open_read_flags
	and fstatat_flags.
	(tar_stat_destroy): Close st->fd if it is positive (not zero!).
	* src/tar.h (struct tar_stat_info): New members parent, fd.
	* src/update.c (update_archive): Adjust to dump_file's API change.
	* tests/filerem02.at: Ignore stderr since its contents now depend
	on the file system implementation.

2010-09-05  Paul Eggert  <eggert@cs.ucla.edu>

	tar: remove lint discovered by Sun C compiler
Bdale Garbee's avatar
Bdale Garbee committed
2783

Bdale Garbee's avatar
Bdale Garbee committed
2784
2785
2786
2787
2788
2789
2790
2791
2792
	* src/common.h (WARN_ALL): Don't mask with 0xffffffff; on a 32-bit
	host, 0xffffffff is of type 'unsigned int', which makes WARN_ALL
	an unsigned int value that is too large to fit into an int, and
	the C standard says that this has undefined behavior.  The mask is
	not needed, so omit it.

2010-09-04  Paul Eggert  <eggert@cs.ucla.edu>

	tar: restore macros that are used in some cases
Bdale Garbee's avatar
Bdale Garbee committed
2793

Bdale Garbee's avatar
Bdale Garbee committed
2794
2795
2796
2797
2798
2799
2800
	* src/tar.c (LOW_DENSITY_NUM, MID_DENSITY_NUM, HIGH_DENSITY_NUM):
	Restore these macros, undoing the previous change to this file.
	The macros are used after all, in some cases.  Sorry about that.

2010-09-03  Paul Eggert  <eggert@cs.ucla.edu>

	tar: remove unused macros
Bdale Garbee's avatar
Bdale Garbee committed
2801

Bdale Garbee's avatar
Bdale Garbee committed
2802
2803
2804
2805
2806
2807
2808
2809
2810
	* src/create.c (UINTMAX_TO_CHARS): Remove; no longer used.
	* src/tar.c (LOW_DENSITY_NUM, MID_DENSITY_NUM, HIGH_DENSITY_NUM):
	Likewise.
	* src/incremen.c (DIR_IS_NEW): Comment out; not used.
	Mark this with a FIXME, since it looks like it should be used.

2010-08-27  Sergey Poznyakoff  <gray@gnu.org.ua>

	Fix --remove-files in update/append mode.
Bdale Garbee's avatar
Bdale Garbee committed
2811

Bdale Garbee's avatar
Bdale Garbee committed
2812
2813
2814
2815
2816
2817
2818
	* src/update.c (update_archive): Call finish_deferred_unlinks when
	done.

2010-08-26  Paul Eggert  <eggert@cs.ucla.edu>

	tar: avoid assumptions about root access and chmod -w in test
	cases
Bdale Garbee's avatar
Bdale Garbee committed
2819

Bdale Garbee's avatar
Bdale Garbee committed
2820
2821
2822
2823
2824
2825
2826
	* tests/extrac07.at, tests/extrac09.at, tests/listed03.at: Use
	AT_UNPRIVILEGED_PREREQ, since this test requires non-root
	privileges.
	* tests/extrac07.at: Don't use "chmod -w", as POSIX says it's not
	portable to start a chmod permissions-list with "-" as it may be
	confused with an option.  Use "chmod a-w" instead.

Bdale Garbee's avatar
Bdale Garbee committed
2827
2828
2010-08-26  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2829
	tar: fix bug with -C and delayed setting of metadata
Bdale Garbee's avatar
Bdale Garbee committed
2830

Bdale Garbee's avatar
Bdale Garbee committed
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
	* src/common.h (chdir_current): New decl.
	* src/extract.c (struct delayed_set_stat, struct delayed_link):
	New member change_dir.
	(delay_set_stat, create_placeholder_file): Set it.
	(apply_nonancestor_delayed_set_stat, apply_delayed_links): Use it.
	(extract_link): Check that the links are all relative to the same
	directory.
	(extract_archive): Restore the current directory after
	apply_nonancestor_delayed_set_stat has possibly changed it.
	* src/misc.c (chdir_current): New external var; this used to
	be the private static variable 'previous' inside chdir_dir.
	All uses changed.
	* tests/Makefile.am (TESTSUITE_AT): New test extrac10.at.
	* tests/extrac10.at: New file.
	* tests/testsuite.at: Include it.

2010-08-25  Sergey Poznyakoff  <gray@gnu.org.ua>

	Don't apply file transformations to volume names.
Bdale Garbee's avatar
Bdale Garbee committed
2850

Bdale Garbee's avatar
Bdale Garbee committed
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
	* src/list.c (decode_header): Don't apply file transformations
	to volume names.
	* tests/xform01.at: New testcase.
	* tests/xform-h.at (xform): Rename macro to xformtest. Use
	pushdef/popdef.
	* tests/Makefile.am, tests/testsuite.at: Add xform01.at

2010-08-25  Paul Eggert  <eggert@cs.ucla.edu>

	tar: optimize -c --sparse when file is entirely sparse
Bdale Garbee's avatar
Bdale Garbee committed
2861

Bdale Garbee's avatar
Bdale Garbee committed
2862
2863
2864
2865
2866
2867
	* src/sparse.c (sparse_scan_file): If the file is entirely sparse,
	that is, if ST_NBLOCKS is zero, don't bother scanning for nonzero
	blocks.  Idea by Kit Westneat, communicated by Bernd Schubert in
	<http://lists.gnu.org/archive/html/bug-tar/2010-08/msg00038.html>.
	Also, omit unnecessary lseek at start of file.

Bdale Garbee's avatar
Bdale Garbee committed
2868
2869
2010-08-25  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2870
	tar: don't assume size of a sparse file chunk fits in size_t
Bdale Garbee's avatar
Bdale Garbee committed
2871

Bdale Garbee's avatar
Bdale Garbee committed
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
	* src/tar.h (struct sp_array): Change numbytes from size_t
	to off_t.
	All uses changed.
	* scripts/xsparse.c (struct sp_array): Likewise.
	Include <stdint.h>, for SIZE_MAX.
	(expand_sparse): Don't try to allocate a buffer bigger than
	SIZE_MAX bytes.
	* src/common.h (SIZE_TO_CHARS, size_to_chars, SIZE_FROM_HEADER):
	(size_from_header): Remove decls.
	* src/create.c (size_to_chars): Remove.
	* src/list.c (size_from_header): Remove.
	* src/sparse.c (sparse_extract_region, check_data_region):
	(oldgnu_add_sparse, oldgnu_store_sparse_info, pax_decode_header):
	Don't assume chunk sizes fit in size_t.
	(oldgnu_add_sparse): Check for off_t overflow.
	* src/xheader.c (sparse_numbytes_decoder, sparse_map_decoder):
	Likewise.

Bdale Garbee's avatar
Bdale Garbee committed
2890
2891
2010-08-25  Paul Eggert  <eggert@cs.ucla.edu>

Bdale Garbee's avatar
Bdale Garbee committed
2892
	tar: use ctime, not mtime, when checking placeholders