cvs commit: src/usr.sbin/pkg_install/lib url.c
Bruce Evans
bde at zeta.org.au
Thu Mar 8 10:21:43 UTC 2007
On Wed, 7 Mar 2007, Tim Kientzle wrote:
> Tim Kientzle wrote:
>>>>> ... GNU tar(1) implied the
>>>>> -p option for root, but BSD tar(1) doesn't do that.
>
> Ah. Here we are:
>
> contrib/tar/src/extract.c, revision 1.2 (07-Jun-2002) by sobomax
>
> +#ifndef __FreeBSD__
> same_permissions_option += we_are_root;
> same_owner_option += we_are_root;
> +#endif
1.2 was buggy. It took 2 more commits (1.3 and 1.5) to recover the
old behaviour (old := old FreeBSD gnu tar and old gnu gnu tar too?)
After 1.5, the ownership handling doesn't depend on __FreeBSD__,
and same_permissions_option is incremented later after some umask
stuff that I don't quite understand. Its increment doesn't depend
on we_are_root, but depends on same_permissions_option being set
previously (on the command line?). So same_permissions_option is
always set in FreeBSD, but when it is set previously, the behaviour
actually matches its name (I think it gives umask 0 for everything),
but otherwise it is affected by the current umask in a way that I
don't quite understand.
The result for permissions seems to be only subtly different from
gnu gnu tar: without -p:
- as non-root, permissions are modified by the current umask, at least
for regular files. The late setting of same_permissions_option
apparently gives normal umasking but not quite the same behaviour as
-p since this variable is used for more than the umask stuff.
- as root, permissions are preserved. I don't understand how this
happens.
Bruce
More information about the cvs-src
mailing list