/* ====================================================================== * Copyright (c) 1997 Netscape Communications Corporation * This file contains proprietary information of Netscape Communications. * Copying or reproduction without prior written approval is prohibited. * ====================================================================== */ import java.io.*; import java.net.*; import java.util.*; import netscape.ldap.*; import netscape.ldap.util.*; /** * Executes the delete command to delete an LDAP entry. * This class is implemented based on the java LDAP classes. * *
* usage : java LDAPDelete [options] DN * for example : java -D "dn" -w password -h ds.internic.net -p 389 * "cn=Johnny James,o=Ace Industry" * * options: {np = no parameters, p = requires parameters} * 'D' bind DN --------------------------------------------- p * 'h' LDAP host ------------------------------------------- p * 'p' LDAP port ------------------------------------------- p * 'w' bind password --------------------------------------- p * * note: '-' or '/' is used to distinct the option field. * e.g. -a -b /c /d parameter -e parameter * ** * @version 1.0 */ public class LDAPDelete extends LDAPTool { /* LDAPDelete */ public static void main(String args[]) { /* main */ if ( args.length < 1 ) { doUsage(); System.exit(1); } /* extract parameters from the arguments list */ extractParameters(args); if (!m_justShow) { /* perform an LDAP client connection operation */ try { m_client = new LDAPConnection(); m_client.connect( m_ldaphost, m_ldapport ); } catch(Exception e) { System.err.println("Error: client connection failed!"); System.exit(1); } /* perform an LDAP bind operation */ try { m_client.authenticate( m_version, m_binddn, m_passwd ); } catch (Exception e) { System.err.println( e.toString() ); System.exit(1); } /* perform a delete operation */ dodelete(); /* disconnect */ try { m_client.disconnect(); } catch (Exception e) { System.err.println( e.toString() ); } } else dodelete(null); System.exit(0); } /* main */ /** * Prints usage. */ private static void doUsage() { System.err.println( "usage: LDAPDelete [options] dn" ); System.err.println("options"); System.err.println(" -h host LDAP server name or IP address"); System.err.println(" -p port LDAP server TCP port number"); System.err.println(" -V version LDAP protocol version " + "number (default is 3)"); System.err.println(" -D binddn bind dn"); System.err.println(" -w password bind passwd (for simple " + "authentication)"); System.err.println(" -d level set LDAP debugging level " + "to \'level\'"); System.err.println(" -f file read DNs to delete from file"); System.err.println(" -R do not automatically follow " + "referrals"); System.err.println(" -O hop limit maximum number of referral " + "hops to traverse"); System.err.println(" -H display usage information"); System.err.println(" -c continuous mode (do not "+ "stop on errors)"); System.err.println(" -M manage references (treat them "+ "as regular entries)"); System.err.println(" -y proxy-DN DN to use for access control"); } /** * This class-method is used to extract specified parameters from the * arguments list. */ protected static void extractParameters(String args[]) { GetOpt options = LDAPTool.extractParameters( "Hcf:", args ); /* -H Help */ if (options.hasOption('H')) { doUsage(); System.exit(0); } /* Help */ /* -c continuous mode */ if (options.hasOption('c')) { m_cont = true; } /* continous mode */ /* -f file */ if (options.hasOption('f')) { String filename = options.getOptionParam('f'); if (filename == null) { doUsage(); System.exit(0); } try { FileInputStream fs = new FileInputStream(filename); DataInputStream ds = new DataInputStream(fs); m_reader = new BufferedReader(new InputStreamReader(ds)); } catch (FileNotFoundException e) { System.err.println("File "+filename+" not found"); } catch (IOException e) { System.err.println("Error in opening the file "+filename); } } /* input file */ if (m_reader == null) { Enumeration pa = options.getParameters().elements(); Vector vec = new Vector(); while (pa.hasMoreElements()) { /* while */ vec.addElement(pa.nextElement()); } if (vec.size() <= 0) { doUsage(); System.exit(0); } m_delete_dn = new String[vec.size()]; vec.copyInto(m_delete_dn); } } /* extract parameters */ /** * This class-method is used to call the LDAP Delete Operation with the * specified options, and/or parameters. */ private static void dodelete() { /* dodelete */ int msgid = 0; LDAPSearchConstraints cons = (LDAPSearchConstraints)m_client.getSearchConstraints().clone(); Vector controlVector = new Vector(); if (m_proxyControl != null) controlVector.addElement(m_proxyControl); if (m_ordinary) { controlVector.addElement( new LDAPControl( LDAPControl.MANAGEDSAIT, true, null) ); } if (controlVector.size() > 0) { LDAPControl[] controls = new LDAPControl[controlVector.size()]; controlVector.copyInto(controls); cons.setServerControls(controls); } cons.setReferrals( m_referrals ); if ( m_referrals ) { setDefaultReferralCredentials( cons ); } cons.setHopLimit( m_hopLimit ); dodelete(cons); } /* dodelete */ private static void dodelete(LDAPSearchConstraints cons) { try { if (m_reader == null) { for (int i=0; i