⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testjndiops.java

📁 JAVA开源LDAP浏览器jxplorer的源码!
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
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 + -