package org.safehaus.penrose.backend; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.safehaus.penrose.session.Session; import org.safehaus.penrose.ldap.DN; import org.safehaus.penrose.ldap.Attributes; import org.safehaus.penrose.ldap.RDN; import org.safehaus.penrose.filter.Filter; import org.safehaus.penrose.ldap.*; import org.safehaus.penrose.ldap.AddRequest; import org.safehaus.penrose.ldap.AddResponse; import org.safehaus.penrose.ldap.BindRequest; import org.safehaus.penrose.ldap.BindResponse; import org.safehaus.penrose.ldap.CompareRequest; import org.safehaus.penrose.ldap.CompareResponse; import org.safehaus.penrose.ldap.DeleteRequest; import org.safehaus.penrose.ldap.DeleteResponse; import org.safehaus.penrose.ldap.Modification; import org.safehaus.penrose.ldap.ModifyRequest; import org.safehaus.penrose.ldap.ModifyResponse; import org.safehaus.penrose.ldap.ModRdnRequest; import org.safehaus.penrose.ldap.ModRdnResponse; import org.safehaus.penrose.ldap.SearchRequest; import org.safehaus.penrose.ldap.SearchResponse; import org.safehaus.penrose.ldap.UnbindRequest; import org.safehaus.penrose.ldap.UnbindResponse; import org.safehaus.penrose.ldap.ConnectRequest; import org.safehaus.penrose.ldap.DisconnectRequest; import java.util.Collection; import java.util.ArrayList; import org.safehaus.penrose.ldapbackend.Connection; public class PenroseConnection implements Connection { public Logger log = LoggerFactory.getLogger(getClass()); Session session; public PenroseConnection(Session session) { this.session = session; } public void setSession(Session session) { this.session = session; } public Session getSession() { return session; } public void close() throws Exception { session.close(); } public org.safehaus.penrose.ldapbackend.DN getBindDn() { return session.getBindDn() == null ? null : new PenroseDN(session.getBindDn()); } public boolean isAnonymous() { return session.getBindDn() == null; } public boolean isRoot() { return session.isRootUser(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Connect //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void connect(org.safehaus.penrose.ldapbackend.ConnectRequest request) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("connect("+request.getConnectionId()+")"); ConnectRequest penroseRequest = ((PenroseConnectRequest)request).getRequest(); session.connect(penroseRequest); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Disconnect //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void disconnect(org.safehaus.penrose.ldapbackend.DisconnectRequest request) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("disconnect("+request.getConnectionId()+")"); DisconnectRequest penroseRequest = ((PenroseDisconnectRequest)request).getRequest(); session.disconnect(penroseRequest); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Abandon //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void abandon( int idToAbandon ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("abandon("+idToAbandon+")"); session.abandon(""+idToAbandon); } public void abandon( org.safehaus.penrose.ldapbackend.AbandonRequest request, org.safehaus.penrose.ldapbackend.AbandonResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("abandon("+request.getIdToAbandon()+")"); AbandonRequest penroseRequest = ((PenroseAbandonRequest)request).getAbandonRequest(); AbandonResponse penroseResponse = ((PenroseAbandonResponse)response).getAbandonResponse(); session.abandon(penroseRequest, penroseResponse); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Add //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void add( org.safehaus.penrose.ldapbackend.DN dn, org.safehaus.penrose.ldapbackend.Attributes attributes ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("add("+dn+")"); DN penroseDn = ((PenroseDN)dn).getDn(); Attributes penroseAttributes = ((PenroseAttributes)attributes).getAttributes(); session.add(penroseDn, penroseAttributes); } public void add( org.safehaus.penrose.ldapbackend.AddRequest request, org.safehaus.penrose.ldapbackend.AddResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("add("+request.getDn()+")"); AddRequest penroseRequest = ((PenroseAddRequest)request).getAddRequest(); AddResponse penroseResponse = ((PenroseAddResponse)response).getAddResponse(); session.add(penroseRequest, penroseResponse); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Bind //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void bind( org.safehaus.penrose.ldapbackend.DN dn, String password ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("bind(\""+dn+", \""+password+"\")"); DN penroseDn = ((PenroseDN)dn).getDn(); session.bind(penroseDn, password); } public void bind( org.safehaus.penrose.ldapbackend.DN dn, byte[] password ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("bind(\""+dn+"\", \""+new String(password)+"\")"); DN penroseDn = ((PenroseDN)dn).getDn(); session.bind(penroseDn, password); } public void bind( org.safehaus.penrose.ldapbackend.BindRequest request, org.safehaus.penrose.ldapbackend.BindResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); byte[] password = request.getPassword(); if (debug) log.debug("bind(\""+request.getDn()+"\", "+(password == null ? null : "\""+new String(password)+"\"")+")"); BindRequest penroseRequest = ((PenroseBindRequest)request).getBindRequest(); BindResponse penroseResponse = ((PenroseBindResponse)response).getBindResponse(); session.bind(penroseRequest, penroseResponse); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Compare //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public boolean compare( org.safehaus.penrose.ldapbackend.DN dn, String attributeName, Object attributeValue ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("compare(\""+dn+", \""+attributeName+"\", \""+attributeValue+"\")"); DN penroseDn = ((PenroseDN)dn).getDn(); return session.compare(penroseDn, attributeName, attributeValue); } public boolean compare( org.safehaus.penrose.ldapbackend.CompareRequest request, org.safehaus.penrose.ldapbackend.CompareResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("compare("+request.getDn()+", "+request.getAttributeName()+", "+request.getAttributeValue()+")"); CompareRequest penroseRequest = ((PenroseCompareRequest)request).getCompareRequest(); CompareResponse penroseResponse = ((PenroseCompareResponse)response).getCompareResponse(); session.compare(penroseRequest, penroseResponse); return penroseResponse.getReturnCode() == LDAP.COMPARE_TRUE; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Delete //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void delete( org.safehaus.penrose.ldapbackend.DN dn ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("delete(\""+dn+")"); DN penroseDn = ((PenroseDN)dn).getDn(); session.delete(penroseDn); } public void delete( org.safehaus.penrose.ldapbackend.DeleteRequest request, org.safehaus.penrose.ldapbackend.DeleteResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("delete("+request.getDn()+")"); DeleteRequest penroseRequest = ((PenroseDeleteRequest)request).getDeleteRequest(); DeleteResponse penroseResponse = ((PenroseDeleteResponse)response).getDeleteResponse(); session.delete(penroseRequest, penroseResponse); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Modify //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void modify( org.safehaus.penrose.ldapbackend.DN dn, Collection<org.safehaus.penrose.ldapbackend.Modification> modifications ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("modify("+dn+")"); DN penroseDn = ((PenroseDN)dn).getDn(); Collection<Modification> penroseModifications = new ArrayList<Modification>(); for (org.safehaus.penrose.ldapbackend.Modification modification : modifications) { PenroseModification penroseModification = (PenroseModification) modification; penroseModifications.add(penroseModification.getModification()); } session.modify(penroseDn, penroseModifications); } public void modify( org.safehaus.penrose.ldapbackend.ModifyRequest request, org.safehaus.penrose.ldapbackend.ModifyResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("modify("+request.getDn()+")"); ModifyRequest penroseRequest = ((PenroseModifyRequest)request).getModifyRequest(); ModifyResponse penroseResponse = ((PenroseModifyResponse)response).getModifyResponse(); session.modify(penroseRequest, penroseResponse); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ModRdn //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void modrdn( org.safehaus.penrose.ldapbackend.DN dn, org.safehaus.penrose.ldapbackend.RDN newRdn, boolean deleteOldRdn ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("modrdn(\""+dn+"\", \""+newRdn+"\")"); DN penroseDn = ((PenroseDN)dn).getDn(); RDN penroseNewRdn = ((PenroseRDN)newRdn).getRdn(); session.modrdn(penroseDn, penroseNewRdn, deleteOldRdn); } public void modrdn( org.safehaus.penrose.ldapbackend.ModRdnRequest request, org.safehaus.penrose.ldapbackend.ModRdnResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("modrdn(\""+request.getDn()+"\", \""+request.getNewRdn()+"\")"); ModRdnRequest penroseRequest = ((PenroseModRdnRequest)request).getModRdnRequest(); ModRdnResponse penroseResponse = ((PenroseModRdnResponse)response).getModRdnResponse(); session.modrdn(penroseRequest, penroseResponse); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Search //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public org.safehaus.penrose.ldapbackend.SearchResponse search( org.safehaus.penrose.ldapbackend.DN dn, org.safehaus.penrose.ldapbackend.Filter filter, int scope ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("search(\""+dn+"\", \""+filter+"\")"); DN penroseDn = ((PenroseDN)dn).getDn(); Filter penroseFilter = ((PenroseFilter)filter).getFilter(); SearchRequest penroseRequest = new SearchRequest(); penroseRequest.setDn(penroseDn); penroseRequest.setFilter(penroseFilter); penroseRequest.setScope(scope); SearchResponse penroseResponse = new SearchResponse(); try { session.search(penroseRequest, penroseResponse); } catch (Exception e) { penroseResponse.setException(e); } return new PenroseSearchResponse(penroseResponse); } public void search( org.safehaus.penrose.ldapbackend.SearchRequest request, org.safehaus.penrose.ldapbackend.SearchResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("search(\""+request.getDn()+"\", \""+request.getFilter()+"\")"); SearchRequest penroseRequest = ((PenroseSearchRequest)request).getSearchRequest(); SearchResponse penroseResponse = ((PenroseSearchResponse)response).getSearchResponse(); try { session.search(penroseRequest, penroseResponse); } catch (Exception e) { penroseResponse.setException(e); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Unbind //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public void unbind( ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("unbind()"); session.unbind(); } public void unbind( org.safehaus.penrose.ldapbackend.UnbindRequest request, org.safehaus.penrose.ldapbackend.UnbindResponse response ) throws Exception { boolean debug = log.isDebugEnabled(); if (debug) log.debug("unbind()"); UnbindRequest penroseRequest = ((PenroseUnbindRequest)request).getUnbindRequest(); UnbindResponse penroseResponse = ((PenroseUnbindResponse)response).getUnbindResponse(); session.unbind(penroseRequest, penroseResponse); } }