diff -r 5758cf47ff43 -r f4688940fe15 doc/manual.docbook --- a/doc/manual.docbook Thu Oct 15 11:05:14 2009 +0100 +++ b/doc/manual.docbook Thu Oct 15 11:23:38 2009 +0100 @@ -195,21 +195,75 @@ "*" only matches one directory level, where "**" matches as many as you want. More precisely, "*" matches zero or more characters not including "/" -while "**" matches zero or more characters including "/". +while "**" matches zero or more characters including "/". So +projects/* matches projects/foo but not projects/foo/bar, while +projects/** matches both. -When considering a request, mercurial-server steps through all the rules in /etc/mercurial-server/access.conf and then all the rules in access.conf in hgadmin looking for a rule which matches on every condition. If it does not find such a rule, it denies the request; otherwise it checks whether the rule grants sufficient privilege to allow it. +When considering a request, mercurial-server steps through all the rules in +/etc/mercurial-server/access.conf and then all the +rules in access.conf in hgadmin +looking for a rule which matches on every condition. The first match +determines whether the request will be allowed; if there is no match in +either file, the request will be denied. -By default, /etc/mercurial-server/access.conf has the following rules: +By default, /etc/mercurial-server/access.conf has the +following rules: init user=root/** deny repo=hgadmin write user=users/** -These rules ensure that root users can do any operation on any repository, that no other users can access the hgadmin repository, and that those with keys in keys/users can read or write to any repository but not create repositories. +These rules ensure that root users can do any operation on any repository, +that no other users can access the hgadmin repository, +and that those with keys in keys/users can read or write to any repository +but not create repositories. If these are the only rules in effect, they +have the following consequences: + + +Any request from a user with a key under keys/root will match the first rule; since +this rule is init the request will always be allowed. + + +Any request to access the hgadmin by any other user will +not match the first rule, but will match the second rule, and so will be +denied. + + +Any request to create a repository from a user with a key in keys/users will not match the first or second +rules, but will match the third rule. This is a write +rule, which doesn't grant the privilege to create repositories, so the +request will be denied. + + +Any request to access an existing repository from a user with a key in +keys/users will not match the first +or second rules, but will match the third rule, which grants +write privilege, so the request will be allowed. + + +Any request from any user whose key is in neither keys/root nor keys/users will not match any rule and so will +be denied. Unless it matches the second rule, in which case it will still +be denied. Changes to the access.conf in hgadmin will change that, as the example at the start of this section shows. + + +Any request from a user whose key not under the keys directory at all will always be denied, +no matter what rules are in effect; because of the way SSH authentication +works, they will be prompted to enter a password, but no password will +work. This can't be changed. + +
/etc/mercurial-server and hgadmin