public static SearchResult searchUnique(String searchFilter, InitialLdapContext ctx)
     throws IllegalStateException, NamingException {
   ctx.setRequestControls(null);
   SearchControls searchControls = new SearchControls();
   searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
   searchControls.setTimeLimit(1000);
   NamingEnumeration<?> namingEnum =
       ctx.search(MessagingServletConfig.ldapBaseDn, searchFilter, searchControls);
   if (namingEnum.hasMore()) {
     SearchResult result = (SearchResult) namingEnum.next();
     if (namingEnum.hasMore()) {
       throw new LimitExceededException(
           "search with filter " + searchFilter + " returned more than 1 result");
     }
     namingEnum.close();
     return result;
   } else {
     throw new NameNotFoundException("search with filter " + searchFilter + " returned no result");
   }
 }