Hi
I don't agree that "contextpath + userpath + user" isn't webdav conform.
When I look at webdav acl draft 06 spec
5.4.5 Example: Retrieving a Resource�s Access Control List
I see the following response example:
<D:principal>
<D:href>
http://www.webdav.org/_acl/groups/maintainers/
</D:href>
</D:principal>
The principal href should be a full uri for the principal resource.
Slide has a restriction that all principal resources must be under
<userspath>
I thought about removing this restriction but decided against it.
It is actually the <D:principal-collection-set> definition. You can
enhance this to a list of principal collection sets.
One thing you might want to change is to define a userspath for each
store and remove this path from href going to the store.
For example:
The principal /users/john is now stored in the security store as
/users/john
We can't remap the stores because the full slide uri is in the security
store.
The enhancement would be to define:
<scope match="/" store="jdbc" userspath="/users" />
When the store with john gets remapped to /users/mydomain/john you can
change the scope to:
<scope match="/" store="jdbc" userspath="/users/mydomain" />
this way you don't have to update the acl's and you can restrict/define
the users that are know to the acl's in this scope.
The external view of this uri is then
http://host:port/context/users/mydomain/john
And that is the purpose of the domain file to map stores to a webdav uri
space.
Back to your point, why do you want to remove userspath from the
external uri ?
Dirk
"Hermann, Eckehard" wrote:
>
> Hi Dirk,
>
> currently it is so, if you define an ACE, the principal has to consist of
> the userpath + user. If you do a propfind acl, the principals of the ACEs
> also consist of the contextpath + userpath + user. This seems for me slide
> specific and not webdav conform. So I would like to change the
> parsePrincipal() method of the ACLMethod as follow (see bold typed):
>
> protected String parsePrincipal(Element principal) throws
> WebdavException {
>
> // FIXME: make constants and make sure they are used in
> // AclMethod:parsePrincipal and PropFindMethod:writePrincipal
> NodeList hrefList =
> principal.getElementsByTagNameNS(NodeProperty.DEFAULT_NAMESPACE, "href");
> if (hrefList.getLength() == 1) {
> Element href = (Element) hrefList.item(0);
> if (href.getFirstChild().getNodeType() ==
> Node.TEXT_NODE){
> if
> (token.getNamespaceConfig().getUsersPath() != null) {
> return
> (token.getNamespaceConfig().getUsersPath() + "/" +
> getSlidePath(href.getFirstChild().getNodeValue()));
> } else {
> return
> getSlidePath(href.getFirstChild().getNodeValue());
> }
> }
> } else if (hasChild(principal, NodeProperty.DEFAULT_NAMESPACE,
> "all")) {
> return "nobody";
> } else if (hasChild(principal, NodeProperty.DEFAULT_NAMESPACE,
> "self")) {
> return "~";
> } else if (hasChild(principal, NodeProperty.DEFAULT_NAMESPACE,
> "unauthenticated")) {
> return token.getNamespaceConfig().getUsersPath() + "/" +
> token.getNamespaceConfig().getGuestPath();
> }
> throw new WebdavException(WebdavStatus.SC_BAD_REQUEST);
> }
>
> and the writePrincipal() method of the PropFind Method:
>
> protected void writePrincipal(XMLPrinter generatedXML, String principal)
> {
> generatedXML.writeElement(null, PRINCIPAL, XMLPrinter.OPENING);
> // FIXME: Apparently, there are or will be some other cases, but it
> // isn't very clear in the spec
>
> // remove userpath, if available
> if
> (principal.startsWith(token.getNamespaceConfig().getUsersPath())){
> if (principal.length() ==
> (token.getNamespaceConfig().
>
> getUsersPath()).length()) {
> principal = "nobody";
> } else {
> principal =
> principal.substring((token.getNamespaceConfig().
>
> getUsersPath() + "/").length());
> }
> }
>
> if (principal.equals("~")) {
> generatedXML.writeElement(null, "self", XMLPrinter.NO_CONTENT);
> } else if (principal.equals("nobody")) {
> generatedXML.writeElement(null, "all",
> XMLPrinter.NO_CONTENT);
> } else {
> generatedXML.writeElement(null, "href", XMLPrinter.OPENING);
> generatedXML.writeText(principal);
> // generatedXML.writeText(getFullPath(principal));
> generatedXML.writeElement(null, "href", XMLPrinter.CLOSING);
> }
> generatedXML.writeElement(null, PRINCIPAL, XMLPrinter.CLOSING);
> }
>
> Now just the user without any path-prefix has to be passed with the ACL
> method or will be returned by the PropFind method. What do you think about
> it and do you remember of any further parts that have to be changed in this
> context as well?
>
> regards
>
> Eckehard
>
> Eckehard Hermann
> Research & Development
> Software AG
> Uhlandstrasse 12
> D-64297 Darmstadt
> Germany
>
> mailto:[EMAIL PROTECTED]
> phone: +49-6151-921465
> fax: +49-6151-921609
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>