man bsdtar says: -p, --insecure, --preserve-permissions (x mode only) Preserve file permissions. Attempt to restore the full permissions, including owner, file modes, file flags and ACLs, if available, for each item extracted from the archive. This is the default, if tar is being run by root and can be over- riden by also specifying --no-same-owner and --no-same-permissions. This description of -p makes one think that it does for ordinary user the same as for root. But if I (as ordinary--same-owner user) extract an archive with -xpf groups won't get restored. They get restored with --same-owner. IMHO -p should actually include --same-owner, the fix would be --- bsdtar.c.ORI 2012-09-24 18:09:20.000000000 +0200 +++ bsdtar.c 2015-12-10 10:14:27.085470000 +0100 @@ -438,6 +438,7 @@ bsdtar->option_absolute_paths = 1; break; case 'p': /* GNU tar, star */ + bsdtar->extract_flags |= ARCHIVE_EXTRACT_OWNER; bsdtar->extract_flags |= ARCHIVE_EXTRACT_PERM; bsdtar->extract_flags |= ARCHIVE_EXTRACT_ACL; bsdtar->extract_flags |= ARCHIVE_EXTRACT_XATTR; If not, the manpage should be corrected.
https://github.com/libarchive/libarchive/pull/1204