/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opendj3/legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opendj3/legal-notices/CDDLv1_0.txt. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2012 ForgeRock AS
*/
package org.forgerock.opendj.examples;
import java.io.Console;
import org.forgerock.opendj.ldap.Connection;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.ErrorResultException;
import org.forgerock.opendj.ldap.LDAPConnectionFactory;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.ldap.responses.BindResult;
import org.forgerock.opendj.ldap.responses.SearchResultEntry;
/**
* An interactive command-line client that performs a search and subsequent
* simple bind. The client prompts for email address and for a password, and
* then searches based on the email address, to bind as the user with the
* password. If successful, the client displays the common name from the user's
* entry.
*
* - host - host name of the directory server
* - port - port number of the directory server, e.g. 1389, 1636
* - base-dn - base DN for the search, e.g. dc=example,dc=com
*
* All arguments are required.
*/
public final class SearchBind {
/**
* Prompt for email and password, search and bind, then display message.
*
* @param args
* The command line arguments: host, post, base-dn.
*/
public static void main(final String[] args) {
if (args.length != 3) {
System.err.println("Usage: host port base-dn");
System.err.println("For example: localhost 1389 dc=example,dc=com");
System.exit(1);
}
String host = args[0];
int port = Integer.parseInt(args[1]);
String baseDN = args[2];
// Prompt for mail and password.
Console c = System.console();
if (c == null) {
System.err.println("No console.");
System.exit(1);
}
String mail = c.readLine("Email address: ");
char[] password = c.readPassword("Password: ");
// Search using mail address, and then bind with the DN and password.
final LDAPConnectionFactory factory = new LDAPConnectionFactory(host,
port);
Connection connection = null;
try {
connection = factory.getConnection();
SearchResultEntry entry = connection.searchSingleEntry(baseDN,
SearchScope.WHOLE_SUBTREE, "(mail=" + mail + ")", "cn");
DN bindDN = entry.getName();
BindResult result = connection.bind(bindDN.toString(), password);
if (result.isSuccess()) {
String cn = entry.getAttribute("cn").firstValueAsString();
System.out.println("Hello, " + cn + "!");
} else {
System.err.println("Failed to bind.");
}
} catch (final ErrorResultException e) {
System.err.println("Failed to bind.");
System.exit(e.getResult().getResultCode().intValue());
return;
} catch (final InterruptedException e) {
System.err.println(e.getMessage());
System.exit(ResultCode.CLIENT_SIDE_USER_CANCELLED.intValue());
return;
} finally {
if (connection != null) {
connection.close();
}
}
}
/**
* Constructor not used.
*/
private SearchBind() {
// Not used
}
}