Overview#
This is a
How To on
Example to perform a JNDI LDAP Example Add with Administration Account
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NameAlreadyBoundException;
import javax.naming.NamingException;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class LdapExampleAdd
{
private static DirContext ctx = null;
public LdapExampleAdd()
{
}
/**
* Generic method to obtain a reference to a DirContext
*
* @param ldapHostName
* @param ldapPost
* @param bindDn
* @param bindDnPwd
*/
public static DirContext getDirContext(String ldapHostName, String ldapPost, String bindDn, String bindDnPwd) throws Exception
{
Hashtable<String, String> env = new Hashtable<String, String>(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://" + ldapHostName + ":" + ldapPost);
env.put(Context.SECURITY_PRINCIPAL, bindDn);
env.put(Context.SECURITY_CREDENTIALS, bindDnPwd);
// Create the initial context
ctx = new InitialDirContext(env);
return ctx;
}
void createLDAPEntry(String[] args)
{
System.out.println("Performing LDAP Add with:");
System.out.println(" ldapHostName = " + args[0]);
System.out.println(" ldapPort = " + args[1]);
System.out.println(" bindDn = " + args[2]);
System.out.println(" bindDnPwd = " + args[3]);
System.out.println(" Base = " + args[4]);
System.out.println(" uid = " + args[5]);
System.out.println(" givenname = " + args[6]);
System.out.println(" sn = " + args[7]);
System.out.println(" userPassword: = " + args[8]);
try
{// Bind as a user which can create the entry
ctx = getDirContext(args[0], args[1], args[2], args[3]);
}
catch (javax.naming.AuthenticationException e)
{
System.err.println("Could not authenticate as: "+ args[2] + " With the password: "+ args[3] + "\n"+ e);
System.exit(49);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
// Add the required and optional attributes to the Entry
BasicAttributes matchAttrs = new BasicAttributes(true);
matchAttrs.put(new BasicAttribute("uid", args[5]));
matchAttrs.put(new BasicAttribute("cn", args[5]));
matchAttrs.put(new BasicAttribute("givenname", args[6]));
matchAttrs.put(new BasicAttribute("sn", args[7]));
matchAttrs.put(new BasicAttribute("userpassword", args[8]));
matchAttrs.put(new BasicAttribute("objectclass", "top"));
matchAttrs.put(new BasicAttribute("objectclass", "person"));
matchAttrs.put(new BasicAttribute("objectclass", "organizationalPerson"));
matchAttrs.put(new BasicAttribute("objectclass", "inetorgperson"));
// Construct the Fully Distinguished Name
String name = "uid=" + args[5] + "," + args[4];
InitialDirContext iniDirContext = (InitialDirContext) ctx;
try
{// Create the entry within LDAP
iniDirContext.bind(name, ctx, matchAttrs);
}
catch (NameAlreadyBoundException e)
{
System.err.println("The entry: "+ name + " Already exists!"+ "\n"+ e);
System.exit(68);
}
catch (javax.naming.NameNotFoundException e)
{
System.err.println("The Container "+ args[4] + " Probably does not exist!"+ "\n"+ e);
System.exit(32);
}
catch (NamingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
iniDirContext.close();
}
catch (NamingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Successfully created LDAP Entry:" + name);
}
/**
* Does a simple search on the LDAP Directory
*
* String ldapHostName = args[0]; String ldapPort = args[1]; String bindDn = args[2]; String bindDnPwd = args[3]; String base = args[4] String uid = args[5]; String givenname=args[6]; String sn = args[7];
* String password = args[8];
*
* @param args
*
*/
public static void main(String[] args)
{
String[] argsNames = { "ldapHostName", "ldapPort", "bindDn", "bindDnPwd", "base", "uid", "givenname", "sn", "userPassword" };
if (args.length == 9)
{
LdapExampleAdd basicjndiadd = new LdapExampleAdd();
basicjndiadd.createLDAPEntry(args);
}
else
{
System.out.println("\nYou must provide: ");
for (int i = 0; i < argsNames.length; i++)
{
System.out.print(argsNames[i] + " ");
}
System.out.print("\non the command line!");
}
}
}
There might be more information for this subject on one of the following: