On 11/04/2009 01:12 PM, tmortagne (SVN) wrote:
> Author: tmortagne
> Date: 2009-11-04 13:12:41 +0100 (Wed, 04 Nov 2009)
> New Revision: 24871
>
> Modified:
>     
> platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java
> Log:
> XWIKI-4549: Impossible to connect with local user in a subwiki of a path 
> based multiwiki mode farm
>
> Modified: 
> platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java
> ===================================================================
> --- 
> platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java
>     2009-11-04 12:12:33 UTC (rev 24870)
> +++ 
> platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java
>     2009-11-04 12:12:41 UTC (rev 24871)
> @@ -23,7 +23,9 @@
>   import java.io.IOException;
>   import java.net.URL;
>   import java.security.Principal;
> +import java.util.HashMap;
>   import java.util.List;
> +import java.util.Map;
>
>   import javax.servlet.http.HttpServletRequest;
>   import javax.servlet.http.HttpServletResponse;
> @@ -52,19 +54,30 @@
>   {
>       private static final Log log = 
> LogFactory.getLog(XWikiAuthServiceImpl.class);
>
> -    protected XWikiAuthenticator authenticator;
> +    /**
> +     * Each wiki has its own authenticator.
> +     */
> +    protected Map<String, XWikiAuthenticator>  authenticators = new 
> HashMap<String, XWikiAuthenticator>();

Something should be synchronized here...

>       protected XWikiAuthenticator getAuthenticator(XWikiContext context) 
> throws XWikiException
>       {
> -        if (this.authenticator != null) {
> -            return this.authenticator;
> +        String wikiName = context.getDatabase();
> +
> +        if (wikiName != null) {
> +            wikiName = wikiName.toLowerCase();
>           }
>
> +        XWikiAuthenticator authenticator = this.authenticators.get(wikiName);
> +
> +        if (authenticator != null) {
> +            return authenticator;
> +        }
> +
>           try {
>               XWiki xwiki = context.getWiki();
>
>               if ("basic".equals(xwiki.Param("xwiki.authentication"))) {
> -                this.authenticator = new MyBasicAuthenticator();
> +                authenticator = new MyBasicAuthenticator();
>                   SecurityConfig sconfig = new SecurityConfig(false);
>                   sconfig.setAuthMethod("BASIC");
>                   if (xwiki.Param("xwiki.authentication.realmname") != null) {
> @@ -72,9 +85,9 @@
>                   } else {
>                       sconfig.setRealmName("XWiki");
>                   }
> -                this.authenticator.init(null, sconfig);
> +                authenticator.init(null, sconfig);
>               } else {
> -                this.authenticator = new MyFormAuthenticator();
> +                authenticator = new MyFormAuthenticator();
>                   SecurityConfig sconfig = new SecurityConfig(false);
>
>                   sconfig.setAuthMethod("FORM");
> @@ -164,13 +177,15 @@
>                   
> fconfig.setInitParameter(FormAuthenticator.LOGIN_SUBMIT_PATTERN_KEY, 
> xwiki.Param(
>                       "xwiki.authentication.loginsubmitpage", 
> "/loginsubmit/XWiki/XWikiLogin"));
>
> -                this.authenticator.init(fconfig, sconfig);
> +                authenticator.init(fconfig, sconfig);
>               }
>
> -            return this.authenticator;
> +            this.authenticators.put(wikiName, authenticator);
> +
> +            return authenticator;
>           } catch (Exception e) {
>               throw new XWikiException(XWikiException.MODULE_XWIKI_USER, 
> XWikiException.ERROR_XWIKI_USER_INIT,
> -                "Cannot initialize authentication system", e);
> +                "Cannot initialize authentication system for wiki [" + 
> wikiName + "]", e);
>           }
>       }


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu/
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to