import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPMessage;
import com.novell.ldap.LDAPResponse;
import com.novell.ldap.LDAPSearchQueue;
import com.novell.ldap.LDAPSearchResult;
import com.novell.ldap.LDAPSearchResultReference;
import com.novell.ldap.LDAPSearchConstraints;
import com.novell.ldap.util.LDIFWriter;
import com.novell.ldap.util.LDAPWriter;
import java.util.Enumeration;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class Ldap2Ldif
{
public static void main( String[] args )
{
if (args.length != 6) {
usage();
}
int ldapPort = LDAPConnection.DEFAULT_PORT;
int ldapVersion = LDAPConnection.LDAP_V3;
LDAPConnection lc = new LDAPConnection();
String ldapHost = args[0];
String loginDN = args[1];
String password = args[2];
String searchBase = args[3];
String searchFilter= args[4];
String fileName = args[5];
LDAPMessage msg;
try {
lc.connect( ldapHost, ldapPort );
lc.bind(ldapVersion, loginDN, password.getBytes("UTF8") );
FileOutputStream fos = new FileOutputStream(fileName);
LDAPWriter writer = new LDIFWriter(fos);
LDAPSearchQueue queue =
lc.search(searchBase,
LDAPConnection.SCOPE_ONE
searchFilter,
null,
false,
(LDAPSearchQueue)null,
(LDAPSearchConstraints)null);
while (( msg = queue.getResponse()) != null ) {
if ( msg instanceof LDAPSearchResultReference ) {
String urls[] =
((LDAPSearchResultReference)msg).getReferrals();
System.out.println("Search result references:");
for ( int i = 0; i < urls.length; i++ )
System.out.println(urls[i]);
}
else if (msg instanceof LDAPSearchResult ) {
writer.writeMessage(msg);
}
else {
LDAPResponse response = (LDAPResponse)msg;
int status = response.getResultCode();
if ( status == LDAPException.SUCCESS ) {
System.out.println("Asynchronous search succeeded.");
}
else if ( status == LDAPException.REFERRAL ) {
String urls[]=((LDAPResponse)msg).getReferrals();
System.out.println("Referrals:");
for ( int i = 0; i < urls.length; i++ )
System.out.println(urls[i]);
}
else {
System.out.println("Asynchronous search failed.");
throw new LDAPException( response.getErrorMessage(),
status,
response.getMatchedDN());
}
}
}
writer.finish();
fos.close();
System.out.println("An LDIF content file was generated.");
lc.disconnect();
}
catch( UnsupportedEncodingException e ) {
System.out.println( "Error: " + e.toString() );
}
catch (IOException fe) {
System.out.println( "Error: " + fe.toString() );
}
catch( LDAPException e ) {
System.out.println( "Error: " + e.toString() );
}
System.exit(0);
}
public static void usage() {
System.err.println("Usage: java Ldap2Ldif <host name> <login dn>"
+ " <password> <search base> <search filter> < out file name>");
System.err.println("Example: java Ldap2Dsml Acme.com"
+ " \"cn=admin,o=Acme\""
+ " secret \"ou=sales,o=Acme\"\n"
+ " \"objectclass=*\" out.ldif");
System.exit(1);
}
}