1 /* 2 * Copyright (c) 2002-2014, Mairie de Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.util.ldap; 35 36 import java.util.Hashtable; 37 38 import javax.naming.Context; 39 import javax.naming.NamingEnumeration; 40 import javax.naming.NamingException; 41 import javax.naming.directory.DirContext; 42 import javax.naming.directory.InitialDirContext; 43 import javax.naming.directory.SearchControls; 44 import javax.naming.directory.SearchResult; 45 46 47 /** 48 * This class provides LDAP generic connection methods 49 */ 50 public final class LdapUtil 51 { 52 /** 53 * Constructor 54 */ 55 private LdapUtil( ) 56 { 57 // empty contructor 58 } 59 60 /** 61 * LDAP Context search 62 * @param strLDAPContext the context 63 * @param strLDAPUrl the url 64 * @param strAdminDN the admin dn to use 65 * @param strAdminPassword the admin password to use 66 * @return a DirContext object 67 * @throws NamingException in case of error 68 */ 69 public static DirContext getContext( String strLDAPContext, String strLDAPUrl, String strAdminDN, 70 String strAdminPassword ) throws NamingException 71 { 72 Hashtable<String, String> env = new Hashtable<String, String>( ); 73 74 env.put( Context.INITIAL_CONTEXT_FACTORY, strLDAPContext ); 75 env.put( Context.PROVIDER_URL, strLDAPUrl ); 76 env.put( Context.SECURITY_PRINCIPAL, strAdminDN ); 77 env.put( Context.SECURITY_CREDENTIALS, strAdminPassword ); 78 79 DirContext context = new InitialDirContext( env ); 80 81 return context; 82 } 83 84 /** 85 * Close the context given in parameter 86 * @param context the LDAP context as a DirContext object 87 * @throws NamingException in case of error 88 */ 89 public static void freeContext( DirContext context ) 90 throws NamingException 91 { 92 if ( context != null ) 93 { 94 context.close( ); 95 } 96 } 97 98 /** 99 * 100 * @param strLDAPContext the context 101 * @param strLDAPUrl the url 102 * @param strDN the dn of the user to connect 103 * @param strPassword the password of the user to connect 104 * @return a DirContext object 105 * @throws NamingException in case of error 106 */ 107 public static DirContext bindUser( String strLDAPContext, String strLDAPUrl, String strDN, String strPassword ) 108 throws NamingException 109 { 110 DirContext context = null; 111 112 Hashtable<String, String> env = new Hashtable<String, String>( ); 113 114 env.put( Context.INITIAL_CONTEXT_FACTORY, strLDAPContext ); 115 env.put( Context.PROVIDER_URL, strLDAPUrl ); 116 env.put( Context.SECURITY_PRINCIPAL, strDN ); 117 env.put( Context.SECURITY_CREDENTIALS, strPassword ); 118 119 context = new InitialDirContext( env ); 120 121 return context; 122 } 123 124 /** 125 * 126 * @param context the context 127 * @param strFilter the filter for the search 128 * @param strUserDN the user dn 129 * @param strDNBase the base dn 130 * @param sc the SearchControls 131 * @return an enumeration of the elements found 132 * @throws NamingException in case of error 133 */ 134 public static NamingEnumeration<SearchResult> searchUsers( DirContext context, String strFilter, String strUserDN, 135 String strDNBase, SearchControls sc ) throws NamingException 136 { 137 NamingEnumeration<SearchResult> enumeration = context.search( strUserDN + strDNBase, strFilter, sc ); 138 139 return enumeration; 140 } 141 }