Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 1 Apr 2017 12:09:36 -0500
From:      Lewis Donzis <lew@perftech.com>
To:        Eitan Adler <lists@eitanadler.com>
Cc:        FreeBSD Standards <freebsd-standards@freebsd.org>, freebsd-bugs@freebsd.org
Subject:   Re: Fix cp not to give chflags error on NFS
Message-ID:  <B6FF4891-B29E-4958-BC55-B567936FA8F7@perftech.com>
In-Reply-To: <CAF6rxgkG_SuuVH2HNc6Wd9v7XCQPfAxhfUZk1KQWB_pXyj-KeA@mail.gmail.com>
References:  <8FDBAA2C-93B8-49FA-B3CD-5B709A93A5C4@perftech.com> <CAF6rxgkG_SuuVH2HNc6Wd9v7XCQPfAxhfUZk1KQWB_pXyj-KeA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hmmm, good point.

And I have to apologize.  After a bit more research, the real annoyance =
was not actually chflags, but attempting to set ACLs, specifically NFSv4 =
ACLs.

And to add to my embarrassment, this appears to be a problem only when =
the NFS server is running Linux.  If it=E2=80=99s running FreeBSD, then =
not only does the error not occur, cp doesn=E2=80=99t even attempt to =
set the ACL because it passes the acl_is_trivial_np() test.

So I=E2=80=99m sorry to have brought it up, I think all is well within =
the FreeBSD world.

Thanks,
lew



> On Apr 1, 2017, at 11:50 AM, Eitan Adler <lists@eitanadler.com> wrote:
>=20
> +freebsd-standards for folks that know more than I do
>=20
> On 1 April 2017 at 08:54, Lewis Donzis <lew@perftech.com> wrote:
>> It's fairly annoying that cp has no way to suppress the chflags error =
when the destination file is on an NFS mount.  A bigger problem than the =
error message is that it returns exit status 1, which causes things like =
make to fail when there really was no error.
>>=20
>> What do you think about the following change to =
/usr/src/bin/cp/utils.c:
>>=20
>> 398c398
>> <               if (fdval ?
>> ---
>>>              if ((fdval ?
>> 401c401
>> <                   chflags(to.p_path, fs->st_flags))) {
>> ---
>>>                  chflags(to.p_path, fs->st_flags))) && errno !=3D =
ENOTSUP) {
>>=20
>> which simply ignores the error if the destination filesystem doesn't =
support chflags?
>=20
> I believe POSIX requires this error:
> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cp.html
>=20
> =3D=3D=3D
> The file permission bits and the S_ISUID and S_ISGID bits. Other,
> implementation-defined, bits may be duplicated as well. If this
> duplication fails for any reason, cp shall write a diagnostic message
> to standard error.
> =3D=3D=3D
>=20
> We can possibly define "implementation defined bits" to not include
> other flags if the flags are unsupported on the destination filesystem
> but this seems weird to me.
>=20
>=20
> --=20
> Eitan Adler




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B6FF4891-B29E-4958-BC55-B567936FA8F7>