/* * 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/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * 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/opends/resource/legal-notices/OpenDS.LICENSE. 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 2008-2010 Sun Microsystems, Inc. */ import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.Attributes; import javax.naming.ldap.LdapContext; import javax.naming.ldap.InitialLdapContext; import javax.naming.CompositeName; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.CommunicationException; import java.util.HashSet; import java.util.Iterator; /** * Add a new entry. * Input : * -D : principal * -w : credential * -p : ldapport * -h : ldaphost * -d : dn to add * -v : attribut name:attribut value * : this option is multi valued */ public class addAnEntry { /** * Main. * * @param args arguments */ public static void main(String[] args) { String hostname=null; String ldapPort=null; String principal=null; String credential=null; String dnToAdd=null; String attributeToAdd=null; String errorCode=null; String errorMessage=null; int ind1; String attributeName; String attributeValue; Attributes attributes = new BasicAttributes(); HashSet attributeSet = new HashSet(); for (int k=0; k< args.length; k++) { String opt1 = args[k]; String val1 = args[k+1]; if (opt1.equals("-h")) { hostname = val1; } if (opt1.equals("-p")) { ldapPort = val1; } if (opt1.equals("-D")) { principal = val1; } if (opt1.equals("-w")) { credential = val1; } if (opt1.equals("-d")) { dnToAdd = val1; } if (opt1.equals("-v")) { attributeToAdd = val1; ind1= val1.indexOf(":"); attributeName=val1.substring(0,ind1); attributeValue=val1.substring(ind1+1); BasicAttribute attrToComplete = null; Iterator it = attributeSet.iterator(); while (attrToComplete == null && it.hasNext()) { BasicAttribute attr = (BasicAttribute) it.next(); if ((attr.getID()).equalsIgnoreCase(attributeName)) { attrToComplete = attr; } } if (attrToComplete == null) { attrToComplete = new BasicAttribute(attributeName); attributeSet.add(attrToComplete); } if (attributeValue != null) { attributeValue = attributeValue.replaceAll("QUOT","\\\""); attrToComplete.add(attributeValue); } } k++; } Iterator it2 = attributeSet.iterator(); while (it2.hasNext()) { BasicAttribute attr = (BasicAttribute)it2.next(); attributes.put(attr); } String provider = "ldap://" + hostname + ":" + ldapPort + "/"; Hashtable envLdap = new Hashtable(); envLdap.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory"); envLdap.put(Context.SECURITY_AUTHENTICATION, "simple"); envLdap.put(Context.SECURITY_PRINCIPAL, principal); envLdap.put(Context.SECURITY_CREDENTIALS, credential); envLdap.put(Context.PROVIDER_URL, provider); LdapContext ctx; try { CompositeName entryDN = new CompositeName(dnToAdd); System.out.println("Add a new entry " + entryDN); // connect to server ctx = new InitialLdapContext(envLdap, null); ctx.createSubcontext(entryDN, attributes); ctx.close(); } catch (CommunicationException e1) { errorMessage = e1.getMessage(); } catch (NamingException e2) { errorMessage = e2.getMessage(); } catch (Exception e3) { errorMessage= e3.getMessage(); } // No error, the modify is success if ( errorMessage == null ) { errorCode="0"; } else { System.out.println(errorMessage); int ind=errorMessage.indexOf("-"); if ( ind > 0 ) { errorCode=errorMessage.substring(18, ind-1); } else errorCode="0"; } int RC = Integer.parseInt(errorCode); System.exit(RC); } }