Coverage Report - org.acegisecurity.ldap.LdapUtils
 
Classes in this File Line Coverage Branch Coverage Complexity
LdapUtils
88% 
100% 
3.4
 
 1  
 /* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
 2  
  *
 3  
  * Licensed under the Apache License, Version 2.0 (the "License");
 4  
  * you may not use this file except in compliance with the License.
 5  
  * You may obtain a copy of the License at
 6  
  *
 7  
  *     http://www.apache.org/licenses/LICENSE-2.0
 8  
  *
 9  
  * Unless required by applicable law or agreed to in writing, software
 10  
  * distributed under the License is distributed on an "AS IS" BASIS,
 11  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12  
  * See the License for the specific language governing permissions and
 13  
  * limitations under the License.
 14  
  */
 15  
 
 16  
 package org.acegisecurity.ldap;
 17  
 
 18  
 import org.apache.commons.logging.Log;
 19  
 import org.apache.commons.logging.LogFactory;
 20  
 
 21  
 import org.springframework.util.Assert;
 22  
 
 23  
 import java.io.UnsupportedEncodingException;
 24  
 
 25  
 import javax.naming.Context;
 26  
 import javax.naming.NamingException;
 27  
 
 28  
 
 29  
 /**
 30  
  * LDAP Utility methods.
 31  
  *
 32  
  * @author Luke Taylor
 33  
  * @version $Id: LdapUtils.java 1784 2007-02-24 21:00:24Z luke_t $
 34  
  */
 35  
 public final class LdapUtils {
 36  
     //~ Static fields/initializers =====================================================================================
 37  
 
 38  2
     private static final Log logger = LogFactory.getLog(LdapUtils.class);
 39  
 
 40  
     //~ Constructors ===================================================================================================
 41  
 
 42  0
     private LdapUtils() {
 43  0
     }
 44  
 
 45  
     //~ Methods ========================================================================================================
 46  
 
 47  
     public static void closeContext(Context ctx) {
 48  
         try {
 49  52
             if (ctx != null) {
 50  48
                 ctx.close();
 51  
             }
 52  1
         } catch (NamingException e) {
 53  1
             logger.error("Failed to close context.", e);
 54  51
         }
 55  52
     }
 56  
 
 57  
     /**
 58  
      * Obtains the part of a DN relative to a supplied base context.<p>If the DN is
 59  
      * "cn=bob,ou=people,dc=acegisecurity,dc=org" and the base context name is "ou=people,dc=acegisecurity,dc=org" it
 60  
      * would return "cn=bob".</p>
 61  
      *
 62  
      * @param fullDn the DN
 63  
      * @param baseCtx the context to work out the name relative to.
 64  
      *
 65  
      * @return the
 66  
      *
 67  
      * @throws NamingException any exceptions thrown by the context are propagated.
 68  
      */
 69  
     public static String getRelativeName(String fullDn, Context baseCtx)
 70  
         throws NamingException {
 71  29
         String baseDn = baseCtx.getNameInNamespace();
 72  
 
 73  29
         if (baseDn.length() == 0) {
 74  1
             return fullDn;
 75  
         }
 76  
 
 77  28
         if (baseDn.equals(fullDn)) {
 78  1
             return "";
 79  
         }
 80  
 
 81  27
         int index = fullDn.lastIndexOf(baseDn);
 82  
 
 83  27
         Assert.isTrue(index > 0, "Context base DN is not contained in the full DN");
 84  
 
 85  
         // remove the base name and preceding comma.
 86  27
         return fullDn.substring(0, index - 1);
 87  
     }
 88  
 
 89  
     public static byte[] getUtf8Bytes(String s) {
 90  
         try {
 91  5
             return s.getBytes("UTF-8");
 92  0
         } catch (UnsupportedEncodingException e) {
 93  
             // Should be impossible since UTF-8 is required by all implementations
 94  0
             throw new IllegalStateException("Failed to convert string to UTF-8 bytes. Shouldn't be possible");
 95  
         }
 96  
     }
 97  
 
 98  
     /**
 99  
      * Works out the root DN for an LDAP URL.<p>For example, the URL
 100  
      * <tt>ldap://monkeymachine:11389/dc=acegisecurity,dc=org</tt> has the root DN "dc=acegisecurity,dc=org".</p>
 101  
      *
 102  
      * @param url the LDAP URL
 103  
      *
 104  
      * @return the root DN
 105  
      */
 106  
     public static String parseRootDnFromUrl(String url) {
 107  64
         Assert.hasLength(url);
 108  
 
 109  64
         String urlRootDn = "";
 110  
 
 111  64
         if (url.startsWith("ldap:") || url.startsWith("ldaps:")) {
 112  
 //            URI uri = parseLdapUrl(url);
 113  
 
 114  
 //            urlRootDn = uri.getPath();
 115  
             // skip past the "://"
 116  18
             int colon = url.indexOf(':');
 117  
 
 118  18
             url = url.substring(colon + 3);
 119  
 
 120  
             // Match the slash at the end of the address (if there)
 121  18
             int slash = url.indexOf('/');
 122  
 
 123  18
             if (slash >= 0) {
 124  15
                 urlRootDn = url.substring(slash);
 125  
             }
 126  18
         } else {
 127  
             // Assume it's an embedded server
 128  46
             urlRootDn = url;
 129  
         }
 130  
 
 131  64
         if (urlRootDn.startsWith("/")) {
 132  15
             urlRootDn = urlRootDn.substring(1);
 133  
         }
 134  
 
 135  64
         return urlRootDn;
 136  
     }
 137  
 
 138  
     // removed for 1.3 compatibility
 139  
 /**
 140  
      * Parses the supplied LDAP URL.
 141  
      * @param url the URL (e.g. <tt>ldap://monkeymachine:11389/dc=acegisecurity,dc=org</tt>).
 142  
      * @return the URI object created from the URL
 143  
      * @throws IllegalArgumentException if the URL is null, empty or the URI syntax is invalid.
 144  
      */
 145  
 
 146  
 //    private static URI parseLdapUrl(String url) {
 147  
 //        Assert.hasLength(url);
 148  
 //
 149  
 //        try {
 150  
 //            return new URI(url);
 151  
 //        } catch (URISyntaxException e) {
 152  
 //            IllegalArgumentException iae = new IllegalArgumentException("Unable to parse url: " + url);
 153  
 //            iae.initCause(e);
 154  
 //            throw iae;
 155  
 //        }
 156  
 //    }
 157  
 }