On 01.08.2015 09:24, Greg Stein wrote:
> On Fri, Jul 31, 2015 at 6:36 PM, Daniel Shahaf <d...@daniel.shahaf.name
> <mailto:d...@daniel.shahaf.name>> wrote:
> >...
>
>     Two questions:
>
>     - When one side of the diff is in the OS filesystem, do we still fold
>       its value to 644/755 for output?
>
>     - If yes, how do we choose between 644 and 755?  (e.g., do we use
>       "x & 0111 == 0111", or "x & 0100 == 0100", or access(X_OK), or …)
>
>     My answer to the first question is "yes", as discussed above.
>
>
> Whatever the answer, I don't think the client should _ever_ set
> group/world *write* [directed by the "server"]. Maybe not execute,
> too. That just screams for creating a point of abuse. (maybe umask
> applies, but I'd prefer to ignore that; we're getting perm bits from
> (potentially) an untrusted server)

We have io_set_file_perms in libsvn_subr/io.c which we should be using
here. Currently it tries to set all executable bits (user, group and
world) but only the user-write bit for readonly/writable transitions. I
don't recall offhand if apr_file_perms_set filters by umask or not.

And FWIW, we should ignore the read-write perms from Git diffs and only
(try to) tweak the executable bit. Having a read-only versioned file in
our working copy that doesn't also have the svn:needs-lock property will
likely cause all sorts of problems.

-- Brane

Reply via email to