On 13.05.2015 18:18, C. Michael Pilato wrote: > On 05/13/2015 10:35 AM, Branko Čibej wrote: >> On 13 May 2015 at 15:24, C. Michael Pilato <cmpil...@collab.net> >> <mailto:cmpil...@collab.net> wrote: >>> >>> Well, the use-case being broken here is kinda the obvious one: I >>> shouldn't have permission to create/delete some path /foo/bar (it's a >>> system-critical file that shouldn't go away, or a password-bearing file >>> path blocked by the VC system because devs keep stupidly committing >>> them, or...), but you've provided and end-around for me to do so. :-) >>> In the copy and move scenarios, you're allowing me to create a path I >>> can't later delete or further modify. Now, while this is a very handy >>> semantic for tag creation[1], it's also something an administrator >>> should be able to make a conscious decision about, not just an >>> unfortunate side-effect of an effort to make the code faster. >> This proposal really has nothing to do with performance; it's about >> intended/consistent authz semantics, which we never really bothered to >> define, let alone prove. IMO, the fact that you can have authz rules >> that allow you to create a directory but not its children is >> unintended. I bet no-one thought about it during the initial >> development of mod_authz_svn. > > Dude. The Subversion authz subsystem was discussed nearly *to death* > before its implementation. I sat less than 10 feet away from the two > guys who drove the formulation and implementation of both the public > authz subsystem and CollabNet's private manifestation thereof. I have > the T-shirt. And the scars. :-) This ground was covered.
I stand corrected. > As you might recall, though, there was really no attempt to model > in-filesystem ACLs, so you'll find all kinds of disparity with such a > system when you compare it to ours. Create a directory but not its > children? Obviously silly in an ACL system. Less so in a system > where paths themselves are considered a part of the information whose > access is controlled. But, seriously, what could be more consistent > than the policy Subversion has right now? "If I don't have write > access to a path, I can't modify (add, delete, change) anything at > that path" seems about as straightforward as is semantically possible. > > But I need to back up a bit and confess that I failed to process a bit > of the original mail, namely the bit about how the authz code naively > disallows a recursive write if there are any rules that would block > writes to some path deep in that tree *without even seeing if there > actually is/would-be such a path*. I mean, that's the claim, right? Yup. That's the case, for both the source (recursive read for copy, recursive write for move) and the target (recursive write) of the copy/move operation. > If so, that's ... weird. And yeah, wildly inconsistent with ... > really any sane reasoning. CollabNet's authz module did not behave > this way -- we accepted the recursive tree walk as a necessary evil. > Though, we did at least try to optimize it a bit: you can check read > access at the source and write access at the target of a copy with the > same walk, using a bit of path-math; and you can of course check > multiple permissions -- read, add, modify, delete, copy -- as needed > at the same time, too. Ack. Note that on the authzperf branch -- which is, in some ways, equivalent to your authz-improvements branch but with (initially) a different set of priorities -- we still don't do tree walks, but the authz parser and internal representation do predict, propagate and separate the individual access rights. Not that we have more than two there yet. >>> I lean towards thinking >>> that falls outside the scope of acceptable changes in behavior in the >>> 1.x line *unless* you can find a way to, via configuration, allow >>> administrators to explicitly toggle this new paradigm. >> Assuming we agree that it's not a new paradigm, would proper >> documentation, as I proposed, be sufficient? > > I was going to suggest that perhaps you tie the change in behavior to > the use of wildcard rules, but as was explained in the bit I failed to > process originally, this problem predates the new syntax. It still > reads to me as if you're trying to fix a relatively straightforward > problem (we do recursive path checks without actually considering the > actual paths) in a way that runs counter to the original authz design > principles (and by that, I mean authz_policy.txt, not the much-younger > libsvn_repos/authz.c) just to avoid the more-expensive-yet-correct fix > predicted in that very file: > > 3. Manually implement authz when receiving network requests that > represent calls to a commit editor: > > - do write checks for most editor operations > - do read *and* write checks for copy operations. > > (Note that doing full-out authz on whole trees fundamentally > contradicts Subversion's O(1) copy philosophy; in practice, > however, specific authz implementations are able to get the same > effect while being less expensive than O(N).) > > In other words: "To fully implement the write side of this policy, > you have to be recursive -- but maybe you'll find a way to avoid a > tree walk. Good luck!" There are ways to prevent a whole-tree walk, but these dwindle amazingly quickly as soon as you have any kind of pattern matching in the rules. > Now, I'm a bit disconnected from the project these days, so I accept a > reduction in the weight of my vote. Eh? There's no reduction, unless you want to exercise it yourself. :) > I'm confident that the world will continue to spin regardless of > what you guys decide. But just to be clear, you are proposing to > silently remove existing access control protections that have been in > place for over a decade, and introduce a change of behavior that > contradicts the written authz_policy.txt document, and then cover for > it with just a bit of documentation that sits on a website far removed > from nearly everyone's package distribution system. :-) I'm very acutely aware of this, yes ... in this case, the "we told you so!" argument isn't very solid. > SIDEBAR: I didn't see any changes in the patch to mod_authz_svn's use > of recursive checks in these same ways. If you move forward with this > change, don't forget to update that code as necessary, too. Other than not checking for recursive write on the target of a copy? No; if mod_authz_svn, by itself or with the "help" of mod_dav, do the recursive walk, nothing would change. -- Brane