On Wed, Dec 3, 2008 at 10:45 AM, Cazottes Nicolas <[email protected]> wrote:
Hi Thomas,
I have searched deeper and finally found why I have this timeout. The explanation was found when sniffing the network between the Xwiki LDAP client and the penrose server. What happens in terms of messages exchanged with the LDAP server when it works (for exemple an openLDAP) is : 1 - bind request and response 2 - extended request and response 3 - search request and response
The problem of penrose is that the extended request is not recognized/implemented by the server. So when receiving this request the server protects himself by closing directly the connection. This makes that the search request that follows ends in timeout. The error is not quite explicit there...
So I searched why there is an extended request and what is it for. I discovered that the LDAP Client library sends this request to the server when a call is done on LDAPConnection.isConnectionAlive(). It is a sort of a ping where the server normally responds that the extended request is not known. My questions at this point are : is this behaviour knowned and whished by the xwiki ldap connection developpers ? As it is slightly underperformant, would it be usefull to make this test not mandatory through a configuration key for example ?
I just looked at XWikiLDAPConnection.open and yes I think the line succeed = this.connection.isConnected() && this.connection.isConnectionAlive() && this.connection.isBound(); is not really useful as if there is a problem connect() or bind() should throw exception so I think we can just have succeed = true; or something like that.
In order to improve all of this, what I suggest is to : 1 - use a newer version of the ldap client in Xwiki with a clearly determined version. The new one is on the novell web site at http://developer.novell.com/wiki/index.php/Jldap. This would make the error a little clearer (an IOException is raised when the last jldap client library is compiled and used). 2 - optimize the LDAP connection by not doing unnecessary extended request. I plan to do it to solve my problem and I can send it through a JIRA for you to integrate it in Xwiki.
For the other points, I put my comments in the content of the mail.
Nicolas
Thomas Mortagne a écrit :
Hi Nicolas,
On Mon, Dec 1, 2008 at 1:29 PM, Cazottes Nicolas <[email protected]> wrote:
Hello,
I am trying to use Penrose LDAP virtual server (http://docs.safehaus.org/display/PENROSE/Home) as an LDAP source to manage authentification of my xwiki instance. The connection to the server works fine but when xwiki tries to search for my user, it stops with the following exception : 2008-12-01 10:06:38,921 [http://localhost:8080/xwiki/bin/loginsubmit/XWiki/XWikiLogin] [P1-19] DEBUG ldap.XWikiLDAPUtils - Searching for the user in LDAP: user:nca base: query:(uid=nca) uid:uid 2008-12-01 10:06:39,921 [http://localhost:8080/xwiki/bin/loginsubmit/XWiki/XWikiLogin] [P1-19] DEBUG ldap.XWikiLDAPConnection - LDAP Search failed LDAPException: Client request timed out (85) LDAP Timeout at com.novell.ldap.Message$Timeout.run(Unknown Source) 2008-12-01 10:06:39,921 [http://localhost:8080/xwiki/bin/loginsubmit/XWiki/XWikiLogin] [P1-19] DEBUG LDAP.XWikiLDAPAuthServiceImpl - Local LDAP authentication failed.
After searching in the xwiki source code, I found there is a timeout of 1s for a search query to execute (in XWikiLDAPConnection line 292). It may explains the error I imagine. Is it possible to make this timeout defined via a configuration key in xwiki.cfg ?
I just created http://jira.xwiki.org/jira/browse/XWIKI-2912
Another point related to xwiki LDAP logs : I don't like very much to have the password sent to xwiki writen clearly in the log file when LDAP debug is activated. Is it possible to have stars instead of the real value of the password ?
and http://jira.xwiki.org/jira/browse/XWIKI-2913
If someone can do these modifications to the code, I will be pleased to test them. I would like to test it by myself but, currently, I did not manage to build xwiki with maven after checking out the source.
I you already checkouted the sources you just need to execute "mvn install" (after installing maven of course) in xwiki-core folder (where is located the LDAP code) and replace the xwiki-core-<version>.jar in your web app by the generated one. You can look at http://dev.xwiki.org/xwiki/bin/view/Community/Building for more details (I guess you already looked here but never knows ;)).
For the build, actually it works fine for all the maven projects excepted gwt and wysiwyg. When I launch : mvn install -Dmaven.test.skip=true -Pwindows, I have the following error : [INFO] ------------------------------------------------------------------------ [INFO] Building XWiki Platform - Web - WYSIWYG [INFO] task-segment: [install] [INFO] ------------------------------------------------------------------------ [INFO] [remote-resources:process {execution: xwiki-license-resources}] [INFO] [resources:resources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:compile] [INFO] Nothing to compile - all classes are up to date [INFO] [dependency:unpack {execution: unzip-gwt-libs}] [INFO] Configured Artifact: com.google.gwt:gwt-dev:windows-libs:1.5.2:zip [INFO] gwt-dev-1.5.2-windows-libs.zip already unpacked. [INFO] [gwt:compile {execution: generate-javascript}] [INFO] establishing classpath list (buildClaspathList - scope = COMPILE) [INFO] google.webtoolkit.home (gwtHome) *not* set, using project POM for GWT dependencies La ligne entrée est trop longue. [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Exception attempting to run script - compile.cmd
Embedded error: compile.cmd script exited abnormally with code - 255 [INFO] ------------------------------------------------------------------------ [INFO] Trace org.apache.maven.lifecycle.LifecycleExecutionException: Exception attempting to run script - compile.cmd at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:583) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:499) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:478) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:330) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:291) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:142) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:336) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:129) at org.apache.maven.cli.MavenCli.main(MavenCli.java:287) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) at org.codehaus.classworlds.Launcher.launch(Launcher.java:255) at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) at org.codehaus.classworlds.Launcher.main(Launcher.java:375) Caused by: org.apache.maven.plugin.MojoExecutionException: Exception attempting to run script - compile.cmd at com.totsp.mavenplugin.gwt.scripting.ScriptUtil.runScript(ScriptUtil.java:32) at com.totsp.mavenplugin.gwt.CompileMojo.execute(CompileMojo.java:62) at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:451) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:558) ... 16 more Caused by: org.apache.maven.plugin.MojoExecutionException: compile.cmd script exited abnormally with code - 255 at com.totsp.mavenplugin.gwt.scripting.ScriptUtil.runScript(ScriptUtil.java:28) ... 19 more
The real error seems to be "La ligne entrée est trop longue." but I don't know where GWT can have a line length problem. Are you building from a very deep path ?
You can comment or even add a patch in theses two issues if you have some time ;)
Ok, I will try to submit patches of quality.
Thank you for your help.
Nicolas CAZOTTES _______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
--
Nicolas CAZOTTES Chef de Projets SQLI Paris 01 55 93 25 51
_______________________________________________ users mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/users
-- Thomas Mortagne