Index: src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java =================================================================== --- src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java (revision 18625) +++ src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java (working copy) @@ -531,7 +531,7 @@ return param; } - protected void createUser(String user, XWikiContext context) throws XWikiException + protected String createUser(String user, XWikiContext context) throws XWikiException { String createuser = getParam("auth_createuser", context); if (log.isDebugEnabled()) { @@ -568,7 +568,11 @@ log.debug("User page already exists for user " + user); } } + + return wikiname; } + + return user; } /** Index: src/main/java/com/xpn/xwiki/user/impl/xwiki/AppServerTrustedKerberosAuthServiceImpl.java =================================================================== --- src/main/java/com/xpn/xwiki/user/impl/xwiki/AppServerTrustedKerberosAuthServiceImpl.java (revision 0) +++ src/main/java/com/xpn/xwiki/user/impl/xwiki/AppServerTrustedKerberosAuthServiceImpl.java (revision 0) @@ -0,0 +1,83 @@ +/** + * + */ +package com.xpn.xwiki.user.impl.xwiki; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.xpn.xwiki.XWikiContext; +import com.xpn.xwiki.XWikiException; +import com.xpn.xwiki.user.api.XWikiUser; + +/** + * Implements a authentication mechanism which is trusting the App Server authentication. + * If it fails it falls back to the standard XWiki authentication + * + */ +public class AppServerTrustedKerberosAuthServiceImpl extends XWikiAuthServiceImpl { + + private static final Log LOG = LogFactory.getLog(AppServerTrustedKerberosAuthServiceImpl.class); + + /** + * @see com.xpn.xwiki.user.impl.xwiki.XWikiAuthServiceImpl#checkAuth(com.xpn.xwiki.XWikiContext) + */ + @Override + public XWikiUser checkAuth(XWikiContext context) throws XWikiException { + String user = context.getRequest().getRemoteUser(); + if ((user == null) || user.equals("")) + return super.checkAuth(context); + else { + if (user.contains("\\")) + if (user.lastIndexOf("\\") + 1 < user.length()) + user = user.substring(user.lastIndexOf("\\") + 1); + else { + user = ""; + return super.checkAuth(context); + } + + if (user.contains("@")) + user = user.substring(0, user.lastIndexOf("@")); + + if (LOG.isDebugEnabled()) + LOG.debug("Launching create user for " + user); + user = createUser(user, context); + if (LOG.isDebugEnabled()) + LOG.debug("Create user done for " + user); + + user = "XWiki." + user; + + context.setUser(user); + return new XWikiUser(user); + } + } + + /** + * @see com.xpn.xwiki.user.impl.xwiki.XWikiAuthServiceImpl#checkAuth(java.lang.String, java.lang.String, java.lang.String, com.xpn.xwiki.XWikiContext) + */ + @Override + public XWikiUser checkAuth(String username, String password, String rememberme, XWikiContext context) throws XWikiException { + String user = context.getRequest().getRemoteUser(); + if ((user == null) || user.equals("")) + return super.checkAuth(username, password, rememberme, context); + else { + if (user.contains("\\")) + if (user.lastIndexOf("\\") + 1 < user.length()) + user = user.substring(user.lastIndexOf("\\") + 1); + else { + user = ""; + return super.checkAuth(username, password, rememberme, context); + } + + if (user.contains("@")) + user = user.substring(0, user.lastIndexOf("@")); + + user = createUser(user, context); + + user = "XWiki." + user; + } + context.setUser(user); + + return new XWikiUser(user); + } +} \ No newline at end of file