Update vendor/libarchive/dist to git 614110e76d9dbb9ed3e159a71cbd75fa3b23efe3
Relevant vendor changes (release 3.4.0): - check_symlinks_fsobj() without chdir() and fchdir() - bsdtar.1 manpage fixes - patches from OpenBSD to libarchive_fe/passphrase.c
This commit is contained in:
parent
8e97bbedae
commit
e3586989c2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/libarchive/dist/; revision=348971 svn path=/vendor/libarchive/3.4.0/; revision=348973; tag=vendor/libarchive/3.4.0
47
.gitignore
vendored
47
.gitignore
vendored
@ -1,19 +1,19 @@
|
||||
*~
|
||||
*.o
|
||||
*.exe
|
||||
*.la
|
||||
*.lo
|
||||
*.cmake
|
||||
.deps/
|
||||
.libs/
|
||||
.dirstamp
|
||||
Makefile
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
autom4te.cache/
|
||||
bsdcat
|
||||
bsdcat_test
|
||||
bsdcpio
|
||||
bsdcpio_test
|
||||
bsdtar
|
||||
bsdtar_test
|
||||
build/autoconf/compile
|
||||
build/autoconf/config.guess
|
||||
build/autoconf/config.sub
|
||||
@ -27,50 +27,22 @@ build/autoconf/ltversion.m4
|
||||
build/autoconf/lt~obsolete.m4
|
||||
build/autoconf/missing
|
||||
build/pkgconfig/libarchive.pc
|
||||
cat/.deps/
|
||||
cat/.dirstamp
|
||||
cat/test/.deps/
|
||||
cat/test/.dirstamp
|
||||
cat/test/list.h
|
||||
config.cache
|
||||
config.h
|
||||
config.h.in
|
||||
config.log
|
||||
config.status
|
||||
configure
|
||||
cpio/.deps/
|
||||
cpio/.dirstamp
|
||||
cpio/test/.deps/
|
||||
cpio/test/.dirstamp
|
||||
cpio/test/list.h
|
||||
libarchive.la
|
||||
libarchive/.deps/
|
||||
libarchive/.dirstamp
|
||||
libarchive/test/.deps/
|
||||
libarchive/test/.dirstamp
|
||||
libarchive/test/list.h
|
||||
libarchive_fe.la
|
||||
libarchive_fe/.deps/
|
||||
libarchive_fe/.dirstamp
|
||||
libarchive_test
|
||||
libtool
|
||||
stamp-h1
|
||||
tar/.deps/
|
||||
tar/.dirstamp
|
||||
tar/test/.deps/
|
||||
tar/test/.dirstamp
|
||||
tar/test/list.h
|
||||
CMakeCache.txt
|
||||
CMakeFiles/
|
||||
DartConfiguration.tcl
|
||||
cmake.tmp/
|
||||
cpio/CMakeFiles/
|
||||
cpio/test/CMakeFiles/
|
||||
libarchive/CMakeFiles/
|
||||
libarchive/test/CMakeFiles/
|
||||
tar/CMakeFiles/
|
||||
tar/test/CMakeFiles/
|
||||
test_utils/.deps/
|
||||
test_utils/.dirstamp
|
||||
|
||||
doc/html/*.html
|
||||
doc/man/*.1
|
||||
@ -90,15 +62,10 @@ libarchive/libarchive.so.*
|
||||
|
||||
.DS_Store
|
||||
|
||||
bsdcat_test.log
|
||||
bsdcat_test.trs
|
||||
bsdcpio_test.log
|
||||
bsdcpio_test.trs
|
||||
bsdtar_test.log
|
||||
bsdtar_test.trs
|
||||
/*_test
|
||||
/*_test.log
|
||||
/*_test.trs
|
||||
build/autoconf/test-driver
|
||||
libarchive_test.log
|
||||
libarchive_test.trs
|
||||
test-suite.log
|
||||
|
||||
.sw?
|
||||
|
@ -18,7 +18,7 @@ endif()
|
||||
# RelWithDebInfo : Release build with Debug Info
|
||||
# MinSizeRel : Release Min Size build
|
||||
IF(NOT CMAKE_BUILD_TYPE)
|
||||
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Type" FORCE)
|
||||
SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE)
|
||||
ENDIF(NOT CMAKE_BUILD_TYPE)
|
||||
# Set a value type to properly display CMAKE_BUILD_TYPE on GUI if the
|
||||
# value type is "UNINITIALIZED".
|
||||
@ -1350,6 +1350,7 @@ CHECK_FUNCTION_EXISTS_GLIBC(strrchr HAVE_STRRCHR)
|
||||
CHECK_FUNCTION_EXISTS_GLIBC(symlink HAVE_SYMLINK)
|
||||
CHECK_FUNCTION_EXISTS_GLIBC(timegm HAVE_TIMEGM)
|
||||
CHECK_FUNCTION_EXISTS_GLIBC(tzset HAVE_TZSET)
|
||||
CHECK_FUNCTION_EXISTS_GLIBC(unlinkat HAVE_UNLINKAT)
|
||||
CHECK_FUNCTION_EXISTS_GLIBC(unsetenv HAVE_UNSETENV)
|
||||
CHECK_FUNCTION_EXISTS_GLIBC(utime HAVE_UTIME)
|
||||
CHECK_FUNCTION_EXISTS_GLIBC(utimes HAVE_UTIMES)
|
||||
|
6
NEWS
6
NEWS
@ -1,3 +1,7 @@
|
||||
Jun 11, 2019: libarchive 3.4.0 released
|
||||
|
||||
May 18, 2019: Fixes for reading Android APK and JAR archives
|
||||
|
||||
Apr 16, 2019: Support for non-recursive list and extract
|
||||
|
||||
Apr 14, 2019: New tar option: --exclude-vcs
|
||||
@ -6,7 +10,7 @@ Mar 27, 2019: Support for file and directory symlinks on Windows
|
||||
|
||||
Mar 12, 2019: Important fixes for storing file attributes and flags
|
||||
|
||||
Jan 20, 2019: Support for xz, lzma, ppmd8 and bzip2 compression in zip archives
|
||||
Jan 20, 2019: Support for xz, lzma, ppmd8 and bzip2 decompression in ZIP files
|
||||
|
||||
Oct 06, 2018: RAR 5.0 reader
|
||||
|
||||
|
@ -81,6 +81,7 @@ Currently, the library automatically detects and reads the following fomats:
|
||||
* Binary cpio (big-endian or little-endian)
|
||||
* ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
|
||||
* ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives)
|
||||
* ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries)
|
||||
* GNU and BSD 'ar' archives
|
||||
* 'mtree' format
|
||||
* 7-Zip archives
|
||||
|
@ -1111,6 +1111,9 @@ typedef uint64_t uintmax_t;
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#cmakedefine HAVE_UNISTD_H 1
|
||||
|
||||
/* Define to 1 if you have the `unlinkat' function. */
|
||||
#cmakedefine HAVE_UNLINKAT 1
|
||||
|
||||
/* Define to 1 if you have the `unsetenv' function. */
|
||||
#cmakedefine HAVE_UNSETENV 1
|
||||
|
||||
|
@ -1 +1 @@
|
||||
3003004dev
|
||||
3004000
|
||||
|
@ -4,8 +4,8 @@ dnl First, define all of the version numbers up front.
|
||||
dnl In particular, this allows the version macro to be used in AC_INIT
|
||||
|
||||
dnl These first two version numbers are updated automatically on each release.
|
||||
m4_define([LIBARCHIVE_VERSION_S],[3.3.4dev])
|
||||
m4_define([LIBARCHIVE_VERSION_N],[3003004])
|
||||
m4_define([LIBARCHIVE_VERSION_S],[3.4.0])
|
||||
m4_define([LIBARCHIVE_VERSION_N],[3004000])
|
||||
|
||||
dnl bsdtar and bsdcpio versioning tracks libarchive
|
||||
m4_define([BSDTAR_VERSION_S],LIBARCHIVE_VERSION_S())
|
||||
@ -636,7 +636,7 @@ AC_CHECK_FUNCS([nl_langinfo openat pipe poll posix_spawnp readlink readlinkat])
|
||||
AC_CHECK_FUNCS([readpassphrase])
|
||||
AC_CHECK_FUNCS([select setenv setlocale sigaction statfs statvfs])
|
||||
AC_CHECK_FUNCS([strchr strdup strerror strncpy_s strrchr symlink timegm])
|
||||
AC_CHECK_FUNCS([tzset unsetenv utime utimensat utimes vfork])
|
||||
AC_CHECK_FUNCS([tzset unlinkat unsetenv utime utimensat utimes vfork])
|
||||
AC_CHECK_FUNCS([wcrtomb wcscmp wcscpy wcslen wctomb wmemcmp wmemcpy wmemmove])
|
||||
AC_CHECK_FUNCS([_ctime64_s _fseeki64])
|
||||
AC_CHECK_FUNCS([_get_timezone _localtime64_s _mkgmtime64])
|
||||
|
@ -1,105 +1,216 @@
|
||||
Summary: Library to create and read several different archive formats
|
||||
Name: libarchive
|
||||
Version: 3.1.2
|
||||
Release: 1
|
||||
Name: {{{ git_name }}}
|
||||
Version: {{{ git_version lead=3 follow=4 }}}
|
||||
Release: 1%{?dist}
|
||||
Summary: A library for handling streaming archive formats
|
||||
|
||||
License: BSD
|
||||
Group: Libraries
|
||||
Source0: http://libarchive.org/downloads/%{name}-%{version}.tar.gz
|
||||
URL: http:/libarchive.org/
|
||||
Requires: glibc
|
||||
Requires: zlib
|
||||
Requires: bzip2
|
||||
URL: http://www.libarchive.org/
|
||||
Source: {{{ git_pack }}}
|
||||
|
||||
VCS: {{{ git_vcs }}}
|
||||
|
||||
BuildRequires: automake
|
||||
BuildRequires: bison
|
||||
BuildRequires: bzip2-devel
|
||||
BuildRequires: e2fsprogs-devel
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: gawk
|
||||
BuildRequires: libacl-devel
|
||||
BuildRequires: libattr-devel
|
||||
BuildRequires: libtool
|
||||
BuildRequires: libxml2-devel
|
||||
BuildRequires: libzstd-devel
|
||||
BuildRequires: lz4-devel
|
||||
BuildRequires: lzo-devel
|
||||
BuildRequires: openssl-devel
|
||||
BuildRequires: sharutils
|
||||
BuildRequires: xz-devel
|
||||
BuildRequires: zlib-devel
|
||||
BuildRequires: bzip2
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
|
||||
%description
|
||||
Libarchive is a programming library that can create and read several
|
||||
different streaming archive formats, including most popular TAR
|
||||
variants and several CPIO formats. It can also write SHAR archives.
|
||||
Libarchive is a programming library that can create and read several different
|
||||
streaming archive formats, including most popular tar variants, several cpio
|
||||
formats, and both BSD and GNU ar variants. It can also write shar archives and
|
||||
read ISO9660 CDROM images and ZIP archives.
|
||||
|
||||
|
||||
%package devel
|
||||
Summary: Header files for libarchive library
|
||||
Group: Development/Libraries
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Summary: Development files for %{name}
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description devel
|
||||
Header files for libarchive library.
|
||||
The %{name}-devel package contains libraries and header files for
|
||||
developing applications that use %{name}.
|
||||
|
||||
%package static
|
||||
Summary: Static libarchive library
|
||||
Group: Development/Libraries
|
||||
Requires: %{name}-devel = %{version}-%{release}
|
||||
|
||||
%description static
|
||||
Static libarchive library.
|
||||
|
||||
%package -n bsdtar
|
||||
Summary: bsdtar - tar(1) implementation based on libarchive
|
||||
Group: Applications/Archiving
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Summary: Manipulate tape archives
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description -n bsdtar
|
||||
bsdtar - tar(1) implementation based on libarchive.
|
||||
The bsdtar package contains standalone bsdtar utility split off regular
|
||||
libarchive packages.
|
||||
|
||||
|
||||
%package -n bsdcpio
|
||||
Summary: bsdcpio - cpio(1) implementation based on libarchive
|
||||
Group: Applications/Archiving
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Summary: Copy files to and from archives
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description -n bsdcpio
|
||||
bsdcpio - cpio(1) implementation based on libarchive
|
||||
The bsdcpio package contains standalone bsdcpio utility split off regular
|
||||
libarchive packages.
|
||||
|
||||
|
||||
%package -n bsdcat
|
||||
Summary: Expand files to standard output
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description -n bsdcat
|
||||
The bsdcat program typically takes a filename as an argument or reads standard
|
||||
input when used in a pipe. In both cases decompressed data it written to
|
||||
standard output.
|
||||
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
{{{ git_setup_macro }}}
|
||||
%autosetup -p1
|
||||
|
||||
|
||||
%build
|
||||
mkdir -p %{buildroot}
|
||||
./configure \
|
||||
--prefix=%{_prefix} \
|
||||
--libexecdir=%{_libexecdir} \
|
||||
--libdir=%{_libdir} \
|
||||
--mandir=%{_mandir} \
|
||||
--infodir=%{_infodir} \
|
||||
--enable-shared=yes \
|
||||
--enable-static=yes \
|
||||
| tee %{buildroot}/config.log
|
||||
make | tee %{buildroot}/make.log
|
||||
build/autogen.sh
|
||||
%configure --disable-static --without-nettle LT_SYS_LIBRARY_PATH=%_libdir
|
||||
%make_build
|
||||
|
||||
|
||||
%install
|
||||
[ "%buildroot" != "/" ] && [ -d %buildroot ] && rm -rf %buildroot;
|
||||
make DESTDIR=%buildroot install
|
||||
make install DESTDIR=$RPM_BUILD_ROOT
|
||||
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
|
||||
|
||||
# rhbz#1294252
|
||||
replace ()
|
||||
{
|
||||
filename=$1
|
||||
file=`basename "$filename"`
|
||||
binary=${file%%.*}
|
||||
pattern=${binary##bsd}
|
||||
|
||||
awk "
|
||||
# replace the topic
|
||||
/^.Dt ${pattern^^} 1/ {
|
||||
print \".Dt ${binary^^} 1\";
|
||||
next;
|
||||
}
|
||||
# replace the first occurence of \"$pattern\" by \"$binary\"
|
||||
!stop && /^.Nm $pattern/ {
|
||||
print \".Nm $binary\" ;
|
||||
stop = 1 ;
|
||||
next;
|
||||
}
|
||||
# print remaining lines
|
||||
1;
|
||||
" "$filename" > "$filename.new"
|
||||
mv "$filename".new "$filename"
|
||||
}
|
||||
|
||||
for manpage in bsdtar.1 bsdcpio.1
|
||||
do
|
||||
installed_manpage=`find "$RPM_BUILD_ROOT" -name "$manpage"`
|
||||
replace "$installed_manpage"
|
||||
done
|
||||
|
||||
|
||||
%check
|
||||
%if %{with check}
|
||||
logfiles ()
|
||||
{
|
||||
find -name '*_test.log' -or -name test-suite.log
|
||||
}
|
||||
|
||||
tempdirs ()
|
||||
{
|
||||
cat `logfiles` \
|
||||
| awk "match(\$0, /[^[:space:]]*`date -I`[^[:space:]]*/) { print substr(\$0, RSTART, RLENGTH); }" \
|
||||
| sort | uniq
|
||||
}
|
||||
|
||||
cat_logs ()
|
||||
{
|
||||
for i in `logfiles`
|
||||
do
|
||||
echo "=== $i ==="
|
||||
cat "$i"
|
||||
done
|
||||
}
|
||||
|
||||
run_testsuite ()
|
||||
{
|
||||
rc=0
|
||||
%make_build check -j1 || {
|
||||
# error happened - try to extract in koji as much info as possible
|
||||
cat_logs
|
||||
|
||||
for i in `tempdirs`; do
|
||||
if test -d "$i" ; then
|
||||
find $i -printf "%p\n ~> a: %a\n ~> c: %c\n ~> t: %t\n ~> %s B\n"
|
||||
cat $i/*.log
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
cat_logs
|
||||
}
|
||||
|
||||
# On a ppc/ppc64 is some race condition causing 'make check' fail on ppc
|
||||
# when both 32 and 64 builds are done in parallel on the same machine in
|
||||
# koji. Try to run once again if failed.
|
||||
%ifarch ppc
|
||||
run_testsuite || run_testsuite
|
||||
%else
|
||||
run_testsuite
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%clean
|
||||
rm -fr %buildroot
|
||||
|
||||
%files
|
||||
%{_libdir}/libarchive.so*
|
||||
|
||||
%files static
|
||||
%{_libdir}/libarchive.a
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING
|
||||
%doc NEWS README.md
|
||||
%{_libdir}/libarchive.so.13*
|
||||
%{_mandir}/*/cpio.*
|
||||
%{_mandir}/*/mtree.*
|
||||
%{_mandir}/*/tar.*
|
||||
|
||||
%files devel
|
||||
%{_libdir}/pkgconfig/libarchive.pc
|
||||
%{_libdir}/libarchive.la
|
||||
%{_includedir}/*.h
|
||||
%doc %{_mandir}/man3/*
|
||||
%doc %{_mandir}/man5/*
|
||||
%{_mandir}/*/archive*
|
||||
%{_mandir}/*/libarchive*
|
||||
%{_libdir}/libarchive.so
|
||||
%{_libdir}/pkgconfig/libarchive.pc
|
||||
|
||||
%files -n bsdtar
|
||||
%attr(755,root,root) %{_bindir}/bsdtar
|
||||
%doc %{_mandir}/man1/bsdtar.1*
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING
|
||||
%doc NEWS README.md
|
||||
%{_bindir}/bsdtar
|
||||
%{_mandir}/*/bsdtar*
|
||||
|
||||
%files -n bsdcpio
|
||||
%attr(755,root,root) %{_bindir}/bsdcpio
|
||||
%doc %{_mandir}/man1/bsdcpio.1*
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING
|
||||
%doc NEWS README.md
|
||||
%{_bindir}/bsdcpio
|
||||
%{_mandir}/*/bsdcpio*
|
||||
|
||||
%files -n bsdcat
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING
|
||||
%doc NEWS README.md
|
||||
%{_bindir}/bsdcat
|
||||
%{_mandir}/*/bsdcat*
|
||||
|
||||
|
||||
|
||||
%changelog
|
||||
* Wed May 01 2013 Nikolai Lifanov <lifanov@mail.lifanov.com> - 3.1.2-1
|
||||
- Initial package
|
||||
- contrib/libarchive.spec by PLD team overhaul
|
||||
- Added "bsdcpio" package
|
||||
- Fixed build on x86_64 platform
|
||||
* Thu Mar 28 2019 Pavel Raiskup <praiskup@redhat.com> - 3.3.3-7
|
||||
- simplify libtool hacks
|
||||
|
||||
{{ git_changelog }}
|
||||
|
@ -36,7 +36,7 @@
|
||||
* assert that ARCHIVE_VERSION_NUMBER >= 2012108.
|
||||
*/
|
||||
/* Note: Compiler will complain if this does not match archive_entry.h! */
|
||||
#define ARCHIVE_VERSION_NUMBER 3003004
|
||||
#define ARCHIVE_VERSION_NUMBER 3004000
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <stddef.h> /* for wchar_t */
|
||||
@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(void);
|
||||
/*
|
||||
* Textual name/version of the library, useful for version displays.
|
||||
*/
|
||||
#define ARCHIVE_VERSION_ONLY_STRING "3.3.4dev"
|
||||
#define ARCHIVE_VERSION_ONLY_STRING "3.4.0"
|
||||
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
|
||||
__LA_DECL const char * archive_version_string(void);
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
#define ARCHIVE_ENTRY_H_INCLUDED
|
||||
|
||||
/* Note: Compiler will complain if this does not match archive.h! */
|
||||
#define ARCHIVE_VERSION_NUMBER 3003004
|
||||
#define ARCHIVE_VERSION_NUMBER 3004000
|
||||
|
||||
/*
|
||||
* Note: archive_entry.h is for use outside of libarchive; the
|
||||
|
@ -60,7 +60,7 @@ static int archive_filter_b64encode_write(struct archive_write_filter *,
|
||||
const void *, size_t);
|
||||
static int archive_filter_b64encode_close(struct archive_write_filter *);
|
||||
static int archive_filter_b64encode_free(struct archive_write_filter *);
|
||||
static void b64_encode(struct archive_string *, const unsigned char *, size_t);
|
||||
static void la_b64_encode(struct archive_string *, const unsigned char *, size_t);
|
||||
static int64_t atol8(const char *, size_t);
|
||||
|
||||
static const char base64[] = {
|
||||
@ -180,7 +180,7 @@ archive_filter_b64encode_open(struct archive_write_filter *f)
|
||||
}
|
||||
|
||||
static void
|
||||
b64_encode(struct archive_string *as, const unsigned char *p, size_t len)
|
||||
la_b64_encode(struct archive_string *as, const unsigned char *p, size_t len)
|
||||
{
|
||||
int c;
|
||||
|
||||
@ -234,12 +234,12 @@ archive_filter_b64encode_write(struct archive_write_filter *f, const void *buff,
|
||||
}
|
||||
if (state->hold_len < LBYTES)
|
||||
return (ret);
|
||||
b64_encode(&state->encoded_buff, state->hold, LBYTES);
|
||||
la_b64_encode(&state->encoded_buff, state->hold, LBYTES);
|
||||
state->hold_len = 0;
|
||||
}
|
||||
|
||||
for (; length >= LBYTES; length -= LBYTES, p += LBYTES)
|
||||
b64_encode(&state->encoded_buff, p, LBYTES);
|
||||
la_b64_encode(&state->encoded_buff, p, LBYTES);
|
||||
|
||||
/* Save remaining bytes. */
|
||||
if (length > 0) {
|
||||
@ -270,7 +270,7 @@ archive_filter_b64encode_close(struct archive_write_filter *f)
|
||||
|
||||
/* Flush remaining bytes. */
|
||||
if (state->hold_len != 0)
|
||||
b64_encode(&state->encoded_buff, state->hold, state->hold_len);
|
||||
la_b64_encode(&state->encoded_buff, state->hold, state->hold_len);
|
||||
archive_string_sprintf(&state->encoded_buff, "====\n");
|
||||
/* Write the last block */
|
||||
archive_write_set_bytes_in_last_block(f->archive, 1);
|
||||
|
@ -165,6 +165,10 @@ __FBSDID("$FreeBSD$");
|
||||
#define O_NOFOLLOW 0
|
||||
#endif
|
||||
|
||||
#ifndef AT_FDCWD
|
||||
#define AT_FDCWD -100
|
||||
#endif
|
||||
|
||||
struct fixup_entry {
|
||||
struct fixup_entry *next;
|
||||
struct archive_acl acl;
|
||||
@ -348,6 +352,8 @@ struct archive_write_disk {
|
||||
|
||||
#define HFS_BLOCKS(s) ((s) >> 12)
|
||||
|
||||
|
||||
static int la_opendirat(int, const char *);
|
||||
static void fsobj_error(int *, struct archive_string *, int, const char *,
|
||||
const char *);
|
||||
static int check_symlinks_fsobj(char *, int *, struct archive_string *,
|
||||
@ -400,6 +406,37 @@ static ssize_t _archive_write_disk_data(struct archive *, const void *,
|
||||
static ssize_t _archive_write_disk_data_block(struct archive *, const void *,
|
||||
size_t, int64_t);
|
||||
|
||||
static int
|
||||
la_opendirat(int fd, const char *path) {
|
||||
const int flags = O_CLOEXEC
|
||||
#if defined(O_BINARY)
|
||||
| O_BINARY
|
||||
#endif
|
||||
#if defined(O_DIRECTORY)
|
||||
| O_DIRECTORY
|
||||
#endif
|
||||
#if defined(O_PATH)
|
||||
| O_PATH
|
||||
#elif defined(O_SEARCH)
|
||||
| O_SEARCH
|
||||
#elif defined(O_EXEC)
|
||||
| O_EXEC
|
||||
#else
|
||||
| O_RDONLY
|
||||
#endif
|
||||
;
|
||||
|
||||
#if !defined(HAVE_OPENAT)
|
||||
if (fd != AT_FDCWD) {
|
||||
errno = ENOTSUP;
|
||||
return (-1);
|
||||
} else
|
||||
return (open(fd, path, flags));
|
||||
#else
|
||||
return (openat(fd, path, flags));
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
lazy_stat(struct archive_write_disk *a)
|
||||
{
|
||||
@ -1909,7 +1946,7 @@ edit_deep_directories(struct archive_write_disk *a)
|
||||
return;
|
||||
|
||||
/* Try to record our starting dir. */
|
||||
a->restore_pwd = open(".", O_RDONLY | O_BINARY | O_CLOEXEC);
|
||||
a->restore_pwd = la_opendirat(AT_FDCWD, ".");
|
||||
__archive_ensure_cloexec_flag(a->restore_pwd);
|
||||
if (a->restore_pwd < 0)
|
||||
return;
|
||||
@ -2342,7 +2379,7 @@ _archive_write_disk_close(struct archive *_a)
|
||||
{
|
||||
struct archive_write_disk *a = (struct archive_write_disk *)_a;
|
||||
struct fixup_entry *next, *p;
|
||||
int ret;
|
||||
int fd, ret;
|
||||
|
||||
archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
|
||||
ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
|
||||
@ -2353,21 +2390,33 @@ _archive_write_disk_close(struct archive *_a)
|
||||
p = sort_dir_list(a->fixup_list);
|
||||
|
||||
while (p != NULL) {
|
||||
fd = -1;
|
||||
a->pst = NULL; /* Mark stat cache as out-of-date. */
|
||||
if (p->fixup &
|
||||
(TODO_TIMES | TODO_MODE_BASE | TODO_ACLS | TODO_FFLAGS)) {
|
||||
fd = open(p->name,
|
||||
O_WRONLY | O_BINARY | O_NOFOLLOW | O_CLOEXEC);
|
||||
}
|
||||
if (p->fixup & TODO_TIMES) {
|
||||
set_times(a, -1, p->mode, p->name,
|
||||
set_times(a, fd, p->mode, p->name,
|
||||
p->atime, p->atime_nanos,
|
||||
p->birthtime, p->birthtime_nanos,
|
||||
p->mtime, p->mtime_nanos,
|
||||
p->ctime, p->ctime_nanos);
|
||||
}
|
||||
if (p->fixup & TODO_MODE_BASE)
|
||||
if (p->fixup & TODO_MODE_BASE) {
|
||||
#ifdef HAVE_FCHMOD
|
||||
if (fd >= 0)
|
||||
fchmod(fd, p->mode);
|
||||
else
|
||||
#endif
|
||||
chmod(p->name, p->mode);
|
||||
}
|
||||
if (p->fixup & TODO_ACLS)
|
||||
archive_write_disk_set_acls(&a->archive, -1, p->name,
|
||||
&p->acl, p->mode);
|
||||
archive_write_disk_set_acls(&a->archive, fd,
|
||||
p->name, &p->acl, p->mode);
|
||||
if (p->fixup & TODO_FFLAGS)
|
||||
set_fflags_platform(a, -1, p->name,
|
||||
set_fflags_platform(a, fd, p->name,
|
||||
p->mode, p->fflags_set, 0);
|
||||
if (p->fixup & TODO_MAC_METADATA)
|
||||
set_mac_metadata(a, p->name, p->mac_metadata,
|
||||
@ -2376,6 +2425,8 @@ _archive_write_disk_close(struct archive *_a)
|
||||
archive_acl_clear(&p->acl);
|
||||
free(p->mac_metadata);
|
||||
free(p->name);
|
||||
if (fd >= 0)
|
||||
close(fd);
|
||||
free(p);
|
||||
p = next;
|
||||
}
|
||||
@ -2540,8 +2591,6 @@ fsobj_error(int *a_eno, struct archive_string *a_estr,
|
||||
* scan the path and both can be optimized by comparing against other
|
||||
* recent paths.
|
||||
*/
|
||||
/* TODO: Extend this to support symlinks on Windows Vista and later. */
|
||||
|
||||
/*
|
||||
* Checks the given path to see if any elements along it are symlinks. Returns
|
||||
* ARCHIVE_OK if there are none, otherwise puts an error in errmsg.
|
||||
@ -2550,7 +2599,8 @@ static int
|
||||
check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
int flags)
|
||||
{
|
||||
#if !defined(HAVE_LSTAT)
|
||||
#if !defined(HAVE_LSTAT) && \
|
||||
!(defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT))
|
||||
/* Platform doesn't have lstat, so we can't look for symlinks. */
|
||||
(void)path; /* UNUSED */
|
||||
(void)error_number; /* UNUSED */
|
||||
@ -2565,7 +2615,10 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
char c;
|
||||
int r;
|
||||
struct stat st;
|
||||
int restore_pwd;
|
||||
int chdir_fd;
|
||||
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
|
||||
int fd;
|
||||
#endif
|
||||
|
||||
/* Nothing to do here if name is empty */
|
||||
if(path[0] == '\0')
|
||||
@ -2586,9 +2639,9 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
* c holds what used to be in *tail
|
||||
* last is 1 if this is the last tail
|
||||
*/
|
||||
restore_pwd = open(".", O_RDONLY | O_BINARY | O_CLOEXEC);
|
||||
__archive_ensure_cloexec_flag(restore_pwd);
|
||||
if (restore_pwd < 0) {
|
||||
chdir_fd = la_opendirat(AT_FDCWD, ".");
|
||||
__archive_ensure_cloexec_flag(chdir_fd);
|
||||
if (chdir_fd < 0) {
|
||||
fsobj_error(a_eno, a_estr, errno,
|
||||
"Could not open ", path);
|
||||
return (ARCHIVE_FATAL);
|
||||
@ -2621,7 +2674,11 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
c = tail[0];
|
||||
tail[0] = '\0';
|
||||
/* Check that we haven't hit a symlink. */
|
||||
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
|
||||
r = fstatat(chdir_fd, head, &st, AT_SYMLINK_NOFOLLOW);
|
||||
#else
|
||||
r = lstat(head, &st);
|
||||
#endif
|
||||
if (r != 0) {
|
||||
tail[0] = c;
|
||||
/* We've hit a dir that doesn't exist; stop now. */
|
||||
@ -2647,7 +2704,19 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
}
|
||||
} else if (S_ISDIR(st.st_mode)) {
|
||||
if (!last) {
|
||||
if (chdir(head) != 0) {
|
||||
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
|
||||
fd = la_opendirat(chdir_fd, head);
|
||||
if (fd < 0)
|
||||
r = -1;
|
||||
else {
|
||||
r = 0;
|
||||
close(chdir_fd);
|
||||
chdir_fd = fd;
|
||||
}
|
||||
#else
|
||||
r = chdir(head);
|
||||
#endif
|
||||
if (r != 0) {
|
||||
tail[0] = c;
|
||||
fsobj_error(a_eno, a_estr, errno,
|
||||
"Could not chdir ", path);
|
||||
@ -2664,7 +2733,12 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
* so we can overwrite it with the
|
||||
* item being extracted.
|
||||
*/
|
||||
if (unlink(head)) {
|
||||
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
|
||||
r = unlinkat(chdir_fd, head, 0);
|
||||
#else
|
||||
r = unlink(head);
|
||||
#endif
|
||||
if (r != 0) {
|
||||
tail[0] = c;
|
||||
fsobj_error(a_eno, a_estr, errno,
|
||||
"Could not remove symlink ",
|
||||
@ -2694,7 +2768,12 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
break;
|
||||
} else if (flags & ARCHIVE_EXTRACT_UNLINK) {
|
||||
/* User asked us to remove problems. */
|
||||
if (unlink(head) != 0) {
|
||||
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
|
||||
r = unlinkat(chdir_fd, head, 0);
|
||||
#else
|
||||
r = unlink(head);
|
||||
#endif
|
||||
if (r != 0) {
|
||||
tail[0] = c;
|
||||
fsobj_error(a_eno, a_estr, 0,
|
||||
"Cannot remove intervening "
|
||||
@ -2712,7 +2791,11 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
* This is needed to extract hardlinks over
|
||||
* symlinks.
|
||||
*/
|
||||
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
|
||||
r = fstatat(chdir_fd, head, &st, 0);
|
||||
#else
|
||||
r = la_stat(head, &st);
|
||||
#endif
|
||||
if (r != 0) {
|
||||
tail[0] = c;
|
||||
if (errno == ENOENT) {
|
||||
@ -2725,7 +2808,19 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
break;
|
||||
}
|
||||
} else if (S_ISDIR(st.st_mode)) {
|
||||
if (chdir(head) != 0) {
|
||||
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
|
||||
fd = la_opendirat(chdir_fd, head);
|
||||
if (fd < 0)
|
||||
r = -1;
|
||||
else {
|
||||
r = 0;
|
||||
close(chdir_fd);
|
||||
chdir_fd = fd;
|
||||
}
|
||||
#else
|
||||
r = chdir(head);
|
||||
#endif
|
||||
if (r != 0) {
|
||||
tail[0] = c;
|
||||
fsobj_error(a_eno, a_estr,
|
||||
errno,
|
||||
@ -2761,16 +2856,21 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
|
||||
}
|
||||
/* Catches loop exits via break */
|
||||
tail[0] = c;
|
||||
#ifdef HAVE_FCHDIR
|
||||
#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
|
||||
/* If we operate with openat(), fstatat() and unlinkat() there was
|
||||
* no chdir(), so just close the fd */
|
||||
if (chdir_fd >= 0)
|
||||
close(chdir_fd);
|
||||
#elif HAVE_FCHDIR
|
||||
/* If we changed directory above, restore it here. */
|
||||
if (restore_pwd >= 0) {
|
||||
r = fchdir(restore_pwd);
|
||||
if (chdir_fd >= 0) {
|
||||
r = fchdir(chdir_fd);
|
||||
if (r != 0) {
|
||||
fsobj_error(a_eno, a_estr, errno,
|
||||
"chdir() failure", "");
|
||||
}
|
||||
close(restore_pwd);
|
||||
restore_pwd = -1;
|
||||
close(chdir_fd);
|
||||
chdir_fd = -1;
|
||||
if (r != 0) {
|
||||
res = (ARCHIVE_FATAL);
|
||||
}
|
||||
@ -3387,6 +3487,7 @@ static int
|
||||
set_mode(struct archive_write_disk *a, int mode)
|
||||
{
|
||||
int r = ARCHIVE_OK;
|
||||
int r2;
|
||||
mode &= 07777; /* Strip off file type bits. */
|
||||
|
||||
if (a->todo & TODO_SGID_CHECK) {
|
||||
@ -3443,16 +3544,26 @@ set_mode(struct archive_write_disk *a, int mode)
|
||||
}
|
||||
|
||||
if (S_ISLNK(a->mode)) {
|
||||
#ifdef HAVE_LCHMOD
|
||||
/*
|
||||
* If this is a symlink, use lchmod(). If the
|
||||
* If this is a symlink, use fchmod() or lchmod(). If the
|
||||
* platform doesn't support lchmod(), just skip it. A
|
||||
* platform that doesn't provide a way to set
|
||||
* permissions on symlinks probably ignores
|
||||
* permissions on symlinks, so a failure here has no
|
||||
* impact.
|
||||
*/
|
||||
if (lchmod(a->name, mode) != 0) {
|
||||
#ifdef HAVE_FCHMOD
|
||||
if (a->fd > 0)
|
||||
r2 = fchmod(a->fd, mode);
|
||||
else
|
||||
#endif
|
||||
#ifdef HAVE_LCHMOD
|
||||
r2 = lchmod(a->name, mode);
|
||||
#else
|
||||
/* We don't have lchmod() here and a fd is not given */
|
||||
r2 = 0;
|
||||
#endif
|
||||
if (r2 != 0) {
|
||||
switch (errno) {
|
||||
case ENOTSUP:
|
||||
case ENOSYS:
|
||||
@ -3471,7 +3582,6 @@ set_mode(struct archive_write_disk *a, int mode)
|
||||
r = ARCHIVE_WARN;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else if (!S_ISDIR(a->mode)) {
|
||||
/*
|
||||
* If it's not a symlink and not a dir, then use
|
||||
@ -3480,17 +3590,15 @@ set_mode(struct archive_write_disk *a, int mode)
|
||||
* post-extract fixup, which is handled elsewhere.
|
||||
*/
|
||||
#ifdef HAVE_FCHMOD
|
||||
if (a->fd >= 0) {
|
||||
if (fchmod(a->fd, mode) != 0) {
|
||||
archive_set_error(&a->archive, errno,
|
||||
"Can't set permissions to 0%o", (int)mode);
|
||||
r = ARCHIVE_WARN;
|
||||
}
|
||||
} else
|
||||
if (a->fd >= 0)
|
||||
r2 = fchmod(a->fd, mode);
|
||||
else
|
||||
#endif
|
||||
/* If this platform lacks fchmod(), then
|
||||
* we'll just use chmod(). */
|
||||
if (chmod(a->name, mode) != 0) {
|
||||
r2 = chmod(a->name, mode);
|
||||
|
||||
if (r2 != 0) {
|
||||
archive_set_error(&a->archive, errno,
|
||||
"Can't set permissions to 0%o", (int)mode);
|
||||
r = ARCHIVE_WARN;
|
||||
|
@ -1948,7 +1948,6 @@ current_fixup(struct archive_write_disk *a, const wchar_t *pathname)
|
||||
return (a->current_fixup);
|
||||
}
|
||||
|
||||
/* TODO: Make this work. */
|
||||
/*
|
||||
* TODO: The deep-directory support bypasses this; disable deep directory
|
||||
* support if we're doing symlink checks.
|
||||
@ -1958,7 +1957,6 @@ current_fixup(struct archive_write_disk *a, const wchar_t *pathname)
|
||||
* scan the path and both can be optimized by comparing against other
|
||||
* recent paths.
|
||||
*/
|
||||
/* TODO: Extend this to support symlinks on Windows Vista and later. */
|
||||
static int
|
||||
check_symlinks(struct archive_write_disk *a)
|
||||
{
|
||||
|
@ -49,11 +49,10 @@ __FBSDID("$FreeBSD$");
|
||||
*/
|
||||
struct lafe_line_reader {
|
||||
FILE *f;
|
||||
char *buff, *buff_end, *line_start, *line_end, *p;
|
||||
char *buff, *buff_end, *line_start, *line_end;
|
||||
char *pathname;
|
||||
size_t buff_length;
|
||||
int nullSeparator; /* Lines separated by null, not CR/CRLF/etc. */
|
||||
int ret;
|
||||
};
|
||||
|
||||
struct lafe_line_reader *
|
||||
|
@ -23,9 +23,11 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
/* $OpenBSD: readpassphrase.c,v 1.22 2010/01/13 10:20:54 dtucker Exp $ */
|
||||
/* $OpenBSD: readpassphrase.c,v 1.27 2019/01/25 00:19:25 millert Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2000-2002, 2007 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||
* Copyright (c) 2000-2002, 2007, 2010
|
||||
* Todd C. Miller <millert@openbsd.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@ -198,6 +200,27 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
|
||||
output = STDERR_FILENO;
|
||||
}
|
||||
|
||||
/*
|
||||
* Turn off echo if possible.
|
||||
* If we are using a tty but are not the foreground pgrp this will
|
||||
* generate SIGTTOU, so do it *before* installing the signal handlers.
|
||||
*/
|
||||
if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) {
|
||||
memcpy(&term, &oterm, sizeof(term));
|
||||
if (!(flags & RPP_ECHO_ON))
|
||||
term.c_lflag &= ~(ECHO | ECHONL);
|
||||
#ifdef VSTATUS
|
||||
if (term.c_cc[VSTATUS] != _POSIX_VDISABLE)
|
||||
term.c_cc[VSTATUS] = _POSIX_VDISABLE;
|
||||
#endif
|
||||
(void)tcsetattr(input, _T_FLUSH, &term);
|
||||
} else {
|
||||
memset(&term, 0, sizeof(term));
|
||||
term.c_lflag |= ECHO;
|
||||
memset(&oterm, 0, sizeof(oterm));
|
||||
oterm.c_lflag |= ECHO;
|
||||
}
|
||||
|
||||
/*
|
||||
* Catch signals that would otherwise cause the user to end
|
||||
* up with echo turned off in the shell. Don't worry about
|
||||
@ -217,25 +240,6 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
|
||||
(void)sigaction(SIGTTIN, &sa, &savettin);
|
||||
(void)sigaction(SIGTTOU, &sa, &savettou);
|
||||
|
||||
/* Turn off echo if possible. */
|
||||
if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) {
|
||||
memcpy(&term, &oterm, sizeof(term));
|
||||
if (!(flags & RPP_ECHO_ON))
|
||||
term.c_lflag &= ~(ECHO | ECHONL);
|
||||
#ifdef VSTATUS
|
||||
if (term.c_cc[VSTATUS] != _POSIX_VDISABLE)
|
||||
term.c_cc[VSTATUS] = _POSIX_VDISABLE;
|
||||
#endif
|
||||
(void)tcsetattr(input, _T_FLUSH, &term);
|
||||
} else {
|
||||
memset(&term, 0, sizeof(term));
|
||||
term.c_lflag |= ECHO;
|
||||
memset(&oterm, 0, sizeof(oterm));
|
||||
oterm.c_lflag |= ECHO;
|
||||
}
|
||||
|
||||
/* No I/O if we are already backgrounded. */
|
||||
if (signo[SIGTTOU] != 1 && signo[SIGTTIN] != 1) {
|
||||
if (!(flags & RPP_STDIN)) {
|
||||
int r = write(output, prompt, strlen(prompt));
|
||||
(void)r;
|
||||
@ -261,13 +265,16 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
|
||||
int r = write(output, "\n", 1);
|
||||
(void)r;
|
||||
}
|
||||
}
|
||||
|
||||
/* Restore old terminal settings and signals. */
|
||||
if (memcmp(&term, &oterm, sizeof(term)) != 0) {
|
||||
const int sigttou = signo[SIGTTOU];
|
||||
|
||||
/* Ignore SIGTTOU generated when we are not the fg pgrp. */
|
||||
while (tcsetattr(input, _T_FLUSH, &oterm) == -1 &&
|
||||
errno == EINTR)
|
||||
errno == EINTR && !signo[SIGTTOU])
|
||||
continue;
|
||||
signo[SIGTTOU] = sigttou;
|
||||
}
|
||||
(void)sigaction(SIGALRM, &savealrm, NULL);
|
||||
(void)sigaction(SIGHUP, &savehup, NULL);
|
||||
|
33
tar/bsdtar.1
33
tar/bsdtar.1
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd October 1, 2017
|
||||
.Dd June 3, 2019
|
||||
.Dt TAR 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -198,7 +198,7 @@ options and before extracting any files.
|
||||
.It Fl Fl clear-nochange-fflags
|
||||
(x mode only)
|
||||
Before removing file system objects to replace them, clear platform-specific
|
||||
file flags that might prevent removal.
|
||||
file attributes or file flags that might prevent removal.
|
||||
.It Fl Fl exclude Ar pattern
|
||||
Do not process files or directories that match the
|
||||
specified pattern.
|
||||
@ -218,7 +218,8 @@ and
|
||||
.Sq Darcs .
|
||||
.It Fl Fl fflags
|
||||
(c, r, u, x modes only)
|
||||
Archive or extract file flags. This is the reverse of
|
||||
Archive or extract platform-specific file attributes or file flags.
|
||||
This is the reverse of
|
||||
.Fl Fl no-fflags
|
||||
and the default behavior in c, r, and u modes or if
|
||||
.Nm
|
||||
@ -389,8 +390,8 @@ Do not extract modification time.
|
||||
By default, the modification time is set to the time stored in the archive.
|
||||
.It Fl Fl mac-metadata
|
||||
(c, r, u and x mode only)
|
||||
Mac OS X specific. Archive or extract extended ACLs and extended attributes
|
||||
using
|
||||
Mac OS X specific. Archive or extract extended ACLs and extended file
|
||||
attributes using
|
||||
.Xr copyfile 3
|
||||
in AppleDouble format. This is the reverse of
|
||||
.Fl Fl no-mac-metadata .
|
||||
@ -445,21 +446,21 @@ and the default behavior if
|
||||
is run as non-root in x mode (on Mac OS X as any user in c, r, u and x modes).
|
||||
.It Fl Fl no-fflags
|
||||
(c, r, u, x modes only)
|
||||
Do not archive or extract file flags. This is the reverse of
|
||||
Do not archive or extract file attributes or file flags. This is the reverse of
|
||||
.Fl Fl fflags
|
||||
and the default behavior if
|
||||
.Nm
|
||||
is run as non-root in x mode.
|
||||
.It Fl Fl no-mac-metadata
|
||||
(x mode only)
|
||||
Mac OS X specific. Do not archive or extract ACLs and extended attributes using
|
||||
Mac OS X specific. Do not archive or extract ACLs and extended file attributes
|
||||
using
|
||||
.Xr copyfile 3
|
||||
in AppleDouble format. This is the reverse of
|
||||
.Fl Fl mac-metadata .
|
||||
and the default behavior if
|
||||
.Nm
|
||||
is run as non-root in x mode.
|
||||
.It Fl n , Fl Fl norecurse , Fl Fl no-recursion
|
||||
.It Fl Fl no-same-owner
|
||||
(x mode only)
|
||||
Do not extract owner and group IDs.
|
||||
@ -470,8 +471,8 @@ and the default behavior if
|
||||
is run as non-root.
|
||||
.It Fl Fl no-same-permissions
|
||||
(x mode only)
|
||||
Do not extract full permissions (SGID, SUID, sticky bit, ACLs,
|
||||
extended attributes or extended file flags).
|
||||
Do not extract full permissions (SGID, SUID, sticky bit,
|
||||
file attributes or file flags, extended file attributes and ACLs).
|
||||
This is the reverse of
|
||||
.Fl p
|
||||
and the default behavior if
|
||||
@ -479,7 +480,7 @@ and the default behavior if
|
||||
is run as non-root.
|
||||
.It Fl Fl no-xattrs
|
||||
(c, r, u, x modes only)
|
||||
Do not archive or extract extended attributes. This is the reverse of
|
||||
Do not archive or extract extended file attributes. This is the reverse of
|
||||
.Fl Fl xattrs
|
||||
and the default behavior if
|
||||
.Nm
|
||||
@ -667,13 +668,13 @@ This option suppresses these behaviors.
|
||||
.It Fl p , Fl Fl insecure , Fl Fl preserve-permissions
|
||||
(x mode only)
|
||||
Preserve file permissions.
|
||||
Attempt to restore the full permissions, including owner, file modes, ACLs,
|
||||
extended attributes and extended file flags, if available, for each item
|
||||
extracted from the archive. This is te reverse of
|
||||
Attempt to restore the full permissions, including file modes, file attributes
|
||||
or file flags, extended file attributes and ACLs, if available, for each item
|
||||
extracted from the archive. This is the reverse of
|
||||
.Fl Fl no-same-permissions
|
||||
and the default if
|
||||
.Nm
|
||||
is being run by root and can be partially overridden by also specifying
|
||||
is being run as root. It can be partially overridden by also specifying
|
||||
.Fl Fl no-acls ,
|
||||
.Fl Fl no-fflags ,
|
||||
.Fl Fl no-mac-metadata
|
||||
@ -844,7 +845,7 @@ See
|
||||
for more information about the handling of exclusions.
|
||||
.It Fl Fl xattrs
|
||||
(c, r, u, x modes only)
|
||||
Archive or extract extended attributes. This is the reverse of
|
||||
Archive or extract extended file attributes. This is the reverse of
|
||||
.Fl Fl no-xattrs
|
||||
and the default behavior in c, r, and u modes or if
|
||||
.Nm
|
||||
|
Loading…
Reference in New Issue
Block a user