#1 2014-12-23 13:25:25

arthurvinicius
Member
Registered: 2014-12-23

LDAP importierte Benutzer korrumpiert

Hallo miteinander,

ich habe LDAP auf meinem ReportServer konfiguriert. Der Kode hat mit Erfolg die Benutzer des A.D. genommen. Danach zwei komische Sachen sind passiert

- Als ich versuche mit einem Benutzer von A.D. einzuloggen, er wirft einen Login-Fehler. Ich habe mit println herausgefunden, dass die Authentifikation von A.D. (Server-Side) zwar funktioniert. Komischerweise ReportServer wirft keine Exception, nur das Login-Fehlerfenster im Browser wird gezeigt. Die Rechte sind richtig eingestellt.

- Nach einer gewissen Zeit konnte ich gar nicht die Benutzerliste bei der Benutzerverwaltung ausklappen. Das passiert aber nur bei der Liste von den externen Benutzer (von A.D.). Da wirft er eine Exception. Sie ist:

Dec 23, 2014 1:51:30 PM net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor invoke
INFO: Intercepted NonFatalException
org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: net.datenwerke.security.service.usermanager.entities.AbstractUserManagerNode
        at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:114)
        at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:136)
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:730)
        at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:4552)
        at org.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1388)
        at org.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1377)
        at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1595)
        at org.hibernate.loader.Loader.getRow(Loader.java:1504)
        at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:712)
        at org.hibernate.loader.Loader.processResultSet(Loader.java:942)
        at org.hibernate.loader.Loader.doQuery(Loader.java:910)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311)
        at org.hibernate.loader.Loader.loadCollection(Loader.java:2234)
        at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:65)
        at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:674)
        at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:85)
        at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1849)
        at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:549)
        at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:234)
        at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545)
        at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124)
        at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:153)
        at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:138)
        at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:234)
        at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:137)
        at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242)
        at net.datenwerke.treedb.service.treedb.AbstractNode.hasChildren(AbstractNode.java:213)
        at net.datenwerke.treedb.service.treedb.dtogen.AbstractNode2DtoPostProcessor.dtoCreated(AbstractNode2DtoPostProcessor.java:34)
        at net.datenwerke.security.service.usermanager.entities.dtogen.OrganisationalUnit2DtoGenerator.createDto(OrganisationalUnit2DtoGenerator.java:89)
        at net.datenwerke.security.service.usermanager.entities.dtogen.OrganisationalUnit2DtoGenerator.createDto(OrganisationalUnit2DtoGenerator.java:1)
        at net.datenwerke.security.service.dtoservice.SecurityDtoServiceImpl.createDto(SecurityDtoServiceImpl.java:254)
        at net.datenwerke.gf.service.dtoservice.DtoServiceImpl.createDto(DtoServiceImpl.java:204)
        at net.datenwerke.security.server.TreeDBManagerTreeHandler.getChildrenAsFto(TreeDBManagerTreeHandler.java:208)
        at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:110)
        at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)
        at sun.reflect.GeneratedMethodAccessor142.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
        at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:110)
        at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
        at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at net.datenwerke.security.service.security.aop.SecurityCheckInterceptor.invoke(SecurityCheckInterceptor.java:110)
        at net.datenwerke.gf.service.gwtstacktrace.CatchStacktraceInterceptor.invoke(CatchStacktraceInterceptor.java:38)
        at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263)
        at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178)
        at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
        at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62)
        at com.google.inject.persist.PersistFilter.doFilter(PersistFilter.java:89)
        at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
        at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
        at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
        at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)

13:51:30,620  WARN LoadContexts:122 - HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@59127c78<rs=com.mchange.v2.c3p0.impl.NewProxyResultSet@1a0f599a>
13:51:30,620  WARN CollectionLoadContext:351 - HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries

Ich habe das Gefühl, es sei etwas in der DB beim Importieren falsch gegangen. Was denkt ihr ?

Ich danke euch im Voraus.

Arthur Vinicius.

Offline

#2 2015-01-06 11:17:40

arthurvinicius
Member
Registered: 2014-12-23

Re: LDAP importierte Benutzer korrumpiert

Ich habe einfach die DB neu eingestellt.

Die Exception ist jetzt weg aber ich kann mit den importierten Benutzern mich nicht einloggen.
Ich habe ihnen Rechte für das FileSystem und den ReportServer Zugriff gegeben, dennoch ein Loginfehler wurde geworfen. 'exec -g hookldappam.groovy' wurde auch gemacht.

Mit ein paar 'prints' im 'hookldappam.groovy' habe ich herausgefunden dass das Login mit dem LDAP erfolgreich war. Von mir aus jetzt, der Fehler kann nur im ReportServer liegen.

Danke euch noch einmal.

Offline

#3 2015-01-06 12:29:45

Thorsten J. Krause
datenwerke
Registered: 2012-02-15
Website

Re: LDAP importierte Benutzer korrumpiert

Hallo Arthur,

schau doch mal, welche authenticator module in deiner reportserver.properties konfiguriert sind. In der 2.2 Version hat sich da der Default geändert. Korrekt sollte folgende Einstellung sein:
    rs.authenticator.pams = net.datenwerke.rs.authenticator.service.pam.UserPasswordPAM

Grüße
Thorsten

Offline

#4 2015-01-06 13:47:36

arthurvinicius
Member
Registered: 2014-12-23

Re: LDAP importierte Benutzer korrumpiert

Die Einstellung in meiner war:
    rs.authenticator.pams = net.datenwerke.rs.authenticator.service.pam.UserPasswordPAMAuthoritative
Obwohl ich mit deiner probiert habe, der gebende Fehler ist der selbe. Sonst noch etwas, das ausprobieren kann?

Könnte es nicht sein, dass nach der Username und das Passwort mit LDAP vergleicht sind, der ReportServer versucht mit dem gleichen Passwort ein normales Login wie z.B. 'root' zu machen? Und logischerweise ein Loginfehler wird immer passieren, denn die importieten Benutzer haben keine Passwörter in der Rs' DB.

Danke.

Last edited by arthurvinicius (2015-01-06 14:20:03)

Offline

#5 2015-01-06 14:44:19

Thorsten J. Krause
datenwerke
Registered: 2012-02-15
Website

Re: LDAP importierte Benutzer korrumpiert

Ja, das ist genau das was passiert, wenn du das ...Authoritative Modul hast.
Hast Du denn ReportServer neu gestartet, nachdem Du die Änderung gemacht hast?
Ansonsten kannst du es auch nochmal mit

    rs.authenticator.pams =

als leer probieren. Dann können sich aber die direkt in rs angelegten benutzer, also root z.b. nicht mehr anmelden.

Offline

#6 2015-01-06 16:14:46

arthurvinicius
Member
Registered: 2014-12-23

Re: LDAP importierte Benutzer korrumpiert

Ja, ich habe sogar alles neu eingestellt:
- tomcat
- db
- ReportServer

Und dann nachher die folgende Reihe benutzt: Authoritative > kein > Non-Authoritative. Der Fehler wird immer noch gezeigt.

In der DB, die Rechte für meinen LDAPs Benutzer sind die gleiche wie für einen von Rs, also die Rechte sind fast sicher nicht.

Last edited by arthurvinicius (2015-01-06 16:24:52)

Offline

#7 2015-01-06 18:25:12

Thorsten J. Krause
datenwerke
Registered: 2012-02-15
Website

Re: LDAP importierte Benutzer korrumpiert

Okay, probier mal folgendes:

Anstatt dem hookldappam aus dem blog benutze dieses hier: http://pastebin.com/dWjnEJDL
Das erlaubt einfach allen Benutzern die Anmeldung, egal ob das Passwort korrekt ist, oder nicht.
Lege das script in onstartup.d, damit es automatisch ausgeführt wird.

In der reportserver.properties benutzt du  "rs.authenticator.pams = " also keine pams.

Falls es immer noch nicht geht, probiere es als root (mit falschem Passwort). Wenn root sich anmelden kann sind ziemlich sicher doch die Rechte in ReportServer noch falsch.

Offline

#8 2015-01-06 19:20:57

arthurvinicius
Member
Registered: 2014-12-23

Re: LDAP importierte Benutzer korrumpiert

Super, das war eine sehr gute Übung. Das Ergebnis war genauso wie erwartet:

- LDAPs Benutzer, dem die Rechte gegeben wurde, konnte sich mit Erfolg einloggen, egal was für ein Passwort man eingab;
- Mit dem RS' Benutzer passierte dasselbe.

Last edited by arthurvinicius (2015-01-06 20:49:02)

Offline

#9 2015-01-06 20:56:00

Thorsten J. Krause
datenwerke
Registered: 2012-02-15
Website

Re: LDAP importierte Benutzer korrumpiert

Okay, gut. Dann kann das Problem jetzt ja eigentlich nur noch im hookldappam script stecken.

Tausche doch bitte das Script aus dem vorherigen Schritt gegen dieses aus: http://pastebin.com/ThSPU8wC
Das ist im Prinzip das Script aus dem Blogpost jedoch mit ein paar Debug-Ausgaben und der Erweiterung, dass sich auch lokale Benutzer noch anmelden können.

Offline

#10 2015-01-07 07:22:22

arthurvinicius
Member
Registered: 2014-12-23

Re: LDAP importierte Benutzer korrumpiert

Jetzt funktioniert es smile

Das Script, wie ich gesehen habe, ist das selbe außer der Erweiterung, was bedeutet dieses Ergebnis dann?

Danke.

Last edited by arthurvinicius (2015-01-07 07:22:53)

Offline

#11 2015-01-07 08:54:05

Thorsten J. Krause
datenwerke
Registered: 2012-02-15
Website

Re: LDAP importierte Benutzer korrumpiert

Sehr schön!
Also wichtig ist auf jeden Fall das in der reportserver.properties die pams-liste leer ist.
(Wir werden nochmal drüber nachdenken, ob das so richtig ist)
Vermutlich war genau als Du das getestet hast einfach noch irgendwas anderes gerade falsch.

Grüße
Thorsten

Offline

#12 2015-01-07 09:23:59

arthurvinicius
Member
Registered: 2014-12-23

Re: LDAP importierte Benutzer korrumpiert

Ja, es ist leer.

Dann lasse ich mal so wie es jetzt ist. Kannst Du bitte den letzten Satz nochmals anders schreiben?
Ich habe nicht verstanden, was Du gemeint hast.

Vielen Danke für deine Hilfe.

Last edited by arthurvinicius (2015-01-07 09:25:58)

Offline

#13 2015-01-07 09:31:44

Thorsten J. Krause
datenwerke
Registered: 2012-02-15
Website

Re: LDAP importierte Benutzer korrumpiert

Ich nehme an, dass ausgerechnet dann als du die reportserver.properties richtig hattest, noch irgendetwas anderes falsch war.
Gerade mit den Neustarts zwischendurch passiert das ja leicht, dass man etwas anderes testet, als man denkt.

Offline

#14 2015-01-07 09:36:03

arthurvinicius
Member
Registered: 2014-12-23

Re: LDAP importierte Benutzer korrumpiert

Ok, verstanden.

Offline

Board footer

Powered by FluxBB