📄 testjndiops.java
字号:
package com.ca.commons.jndi;
import com.ca.commons.naming.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.io.*;
/**
* This is a general test bed interface to test the various jndi calls
* used by JXplorer. It used ldif change file format requests, and can
* be run directly from the command line, or given an ldif change file
* to process.<p>
* <p/>
* Requests are either standard ldif change file requests, such as:
* <pre>
* <p/>
* version: 1
* # Add a new entry
* dn: cn=Fiona Jensen, ou=Marketing, dc=airius, dc=com
* changetype: add
* objectclass: top
* objectclass: person
* objectclass: organizationalPerson
* cn: Fiona Jensen
* sn: Jensen
* uid: fiona
* telephonenumber: +1 408 555 1212
* jpegphoto:< file:///usr/local/directory/photos/fiona.jpg
* <pre>
* where valid 'changetype' values are [add|delete|modrdn|modify]
* (see draft-good-ldap-ldif-04.html) <p>
* This is extended by jnditest to include extra (non-standard) changetype
* commands, such as [connect|disconnect|list|search|searchOneLevel|read], to allow
* general directory access and testing.
* The 'connect' command takes the attributes; 'url', and the optional \n"+
* attributes: 'user','pwd','tracing','ldapVersion','referral' and 'useSSL' \n" +
* <p/>
* XXX coming soon - [copyTree|deleteTree|moveTree]
*
* @author Chris, Trudi
*/
public class TestJNDIOps
{
/**
* Open the appropriate input stream, and create a jdbctest object.
*/
// static String version = "1.0(build"+BuildNumber.value +")";
BufferedReader in;
PrintStream out;
DXOps myOps = null;
//AdvancedOps myAdvOps = null;
LdifUtility ldifutil = new LdifUtility(); // ldif utility used to read / write ldif files
boolean debug = true;
boolean terminating = false; // whether the program should fail, returning -1, on error
boolean printstack = false; //TE: whether to print the stack trace.
public static int OK = 0;
public static int ERROR = -1;
public static int FINISHED = 1;
public static void main(String args[])
{
String fileName = null;
String url = null;
String user = null;
String pwd = null;
String version = "3";
String referral = "follow";
boolean useSSL = false;
boolean tracing = false;
boolean debugFlag = true;
boolean terminateFlag = false;
boolean printstackFlag = false;
int i = 0;
try
{
while (i < args.length)
{
String arg = (args[i].charAt(0) != '-') ? args[i] : args[i].substring(1);
switch (arg.charAt(0))
{
case '?':
case 'H':
case 'h':
if (args.length > i + 1)
printHelp(args[i + 1]);
else
printHelp(null);
return; // print and exit program
case 'C':
case 'c':
url = args[++i];
break;
case 'D':
case 'd':
debugFlag = true;
break;
case 'E':
case 'e':
terminateFlag = true;
break;
case 'F':
case 'f':
fileName = args[++i];
break;
case 'P':
case 'p':
pwd = args[++i];
break;
case 'R':
case 'r':
referral = args[++i];
break;
case 'S':
case 's':
useSSL = true;
break;
case 'T':
case 't':
tracing = true;
break;
case 'U':
case 'u':
user = args[++i];
break;
case 'V':
case 'v':
version = args[++i];
break;
case 'X':
case 'x':
printstackFlag = true;
break;
default :
System.out.println("\n\nInvalid command line argument: -" + arg);
printHelp(null);
return; // print and exit program
}
i++;
}
}
catch (Exception e)
{
System.out.println("Error reading command line arguments.");
printHelp("");
System.exit(-1);
}
// create jnditest object
TestJNDIOps tester = new TestJNDIOps(fileName, url, user, pwd, tracing, version, debugFlag, terminateFlag, referral, useSSL, printstackFlag);
// use jnditest object to process data until input finished.
tester.processInput();
tester.out.println("\nnormal finish\n");
}
public static void printHelp(String subject)
{
if ("full".equalsIgnoreCase(subject))
{
printFullHelp();
return;
}
if ("changetype".equalsIgnoreCase(subject))
{
printChangeTypeHelp();
return;
}
System.out.println("" +
"\n\njndiTest is a small utility/test program designed to check the ldap/jndi\n" +
"functionality of JXplorer. It reads input or files in ldif change file format\n" +
"with some extra commands added to test searching and attribute reading.\n\n" +
" usage: java jnditest [<options>]\n\n" +
" options:\n" +
" -c an optional connection url of the form ldap:\\host:port\n" +
" -d debug (verbose) mode\n" +
" -e exit on error, returning -1\n" +
" -f filename name of an ldif changes input file\n" +
" -h [subject] this help message [full|changetype]\n" +
" -p password an option password\n" +
" -r referral the jndi referral type [follow|ignore|throw]\n" +
" -t set BER tracing on\n" +
" -u userdn an optional user dn\n" +
" -v set ldap version (default 3)\n\n" +
" -x print stack trace\n\n" +
"in addition to normal ldif changes commands (cf draft-good-ldap-ldif-04.html) a:\n" +
"new keyword 'actiontype' with values [list|search|read|connect|disconnect]\n" +
"is defined, with a usage similar to 'changetype'");
}
protected static void printFullHelp()
{
printChangeTypeHelp();
}
protected static void printChangeTypeHelp()
{
System.out.println("" +
" * This is a general test bed interface to test the various jndi calls \n" +
" * used by JXplorer. It used ldif change file format requests, and can \n" +
" * be run directly from the command line, or given an ldif change file\n" +
" * to process.<p>\n" +
" *\n" +
" * Requests are either standard ldif change file requests, such as:\n" +
" *\n" +
" * version: 1\n" +
" * # Add a new entry\n" +
" * changetype: add\n" +
" * objectclass: top\n" +
" * objectclass: person\n" +
" * objectclass: organizationalPerson\n" +
" * cn: Fiona Jensen\n" +
" * sn: Jensen\n" +
" * uid: fiona\n" +
" * telephonenumber: +1 408 555 1212\n" +
" * jpegphoto:< file:///usr/local/directory/photos/fiona.jpg\n" +
" * <pre>\n" +
" * where valid 'changetype' values are [add|delete|modrdn|modify] \n" +
" * This is extended by jnditest to include extra (non-standard) changetype\n" +
" * commands, such as [connect|disconnect|list|search|searchOneLevel|read], to allow\n" +
" * general directory access and testing.\n" +
" * The 'connect' command takes the attributes; 'url', and the optional \n" +
" * attributes: 'user','pwd','tracing','ldapVersion','referral' and 'useSSL' \n" +
" *\n" +
" * XXX coming soon - [copyTree|deleteTree|moveTree]\n" +
" *");
}
/**
* Constructs a jnditest object, opening a connection (if non-null input is
* passed for connection opening) and opening an input file (if a non-null
* file name is passed).<p>
* <p/>
* All the following parameters can be null.
*
* @param fileName the name of an LDIF changes input file.
* @param url a url of the form ldap://hostname:portnumber.
* @param user a user to bind to the directory as.
* @param pwd the user's password.
* @param tracing whether to set BER tracing on or not.
* @param version the LDAP Version (2 or 3) being used.
* @param debugFlag echo all system statement.
* @param terminateFlag exit on error, returning -1.
* @param referral the jndi referral type [follow|ignore|throw].
* @param useSSL to use SSL.
* @param printstackFlag whether to print a stack trace.
*/
public TestJNDIOps(String fileName, String url, String user, String pwd, boolean tracing, String version, boolean debugFlag, boolean terminateFlag, String referral, boolean useSSL, boolean printstackFlag)
{
out = System.out; // may want to make this configurable in future :-)
debug = debugFlag;
terminating = terminateFlag;
printstack = printstackFlag;
// open a connection (if we've been given one)
if (url != null)
openConnection(url, user, pwd, tracing, version, referral, useSSL);
// open an input stream - file if we have one, console if not...
if (fileName != null)
in = openFile(fileName);
else
in = new BufferedReader(new InputStreamReader(System.in));
}
/**
* Open an ldap connection using jndi, via the standard JXplorer classes
* (DXOps.java, which wraps BasicOps.java).
*
* @param url a url of the form ldap://hostname:portnumber
* @param user a user to bind to the directory as.
* @param pwd the user's password.
* @param tracing whether to set BER tracing on or not
* @param version the LDAP Version (2 or 3) being used.
* @param referralType the jndi referral type [follow|ignore|throw].
* @param useSSL to use SSL.
*/
public void openConnection(String url, String user, String pwd, boolean tracing, String version, String referralType, boolean useSSL)
{
if (referralType == null) referralType = "follow";
if ("ignorefollowthrow".indexOf(referralType) == -1)
{
error("unknown referraltype " + referralType, null);
referralType = "follow";
}
if (url.toLowerCase().startsWith("ldap://") == false)
url = "ldap://" + url;
try
{
if (debug) out.println("opening connection with :\n url: " + url + "\n user: " + user + "\n pwd: " + pwd + "\n tracing: " + tracing + "\n version: " + version + "\n referral: " + referralType);
if ((url == null) || (url.length() == 0))
{
error("unable to open connection - no url supplied", null);
return;
}
if ((version == null) || (version.length() == 0)) version = "3"; // default to ldap version 3
char[] password = (pwd == null || pwd.length() == 0) ? null : pwd.toCharArray();
int versn = Integer.parseInt(version);
ConnectionData cData = new ConnectionData(versn, url, user, password, tracing, null, null);
DirContext ctx = BasicOps.openContext(cData);
//DirContext ctx = BasicOps.openContext(versn, url, user, password, tracing, null, null);
if (ctx != null)
myOps = new DXOps(ctx);
if (myOps == null)
error("unable to open connection " + url, null);
else if (debug) out.println("connection " + url + " open. ");
}
catch (Exception e)
{
error("error opening connection " + url + "\n ", e);
}
}
/**
* Opens a text file as a Buffered Reader.
*
* @param fileName the name of the file to open.
* @return the Input Stream.
*/
public BufferedReader openFile(String fileName)
{
try
{
File myFile = new File(fileName);
ldifutil.setFileDir(myFile.getParent());
return new BufferedReader(new InputStreamReader(new FileInputStream(myFile)));
}
catch (Exception e)
{
error("unable to open file : " + fileName + "\n ", e);
System.exit(-1);
}
return null;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -