pjs/directory/java-sdk/ldapbeans/netscape/ldap/beans/LDAPBasePropertySupport.java

396 строки
12 KiB
Java

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
package netscape.ldap.beans;
import netscape.ldap.*;
import java.util.StringTokenizer;
// This class has a bound property
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
/**
* This is a base class that is extended by various specialized LDAP
* Beans. It provides the common properties and accessors used by
* them.
*/
public class LDAPBasePropertySupport implements Serializable {
/**
* Constructor with no parameters
*/
public LDAPBasePropertySupport() {}
/**
* Returns the host to search at.
* @return DNS name or dotted IP name of host to search at
*/
public String getHost() {
return _host;
}
/**
* Sets host string.
* @param theHost host name
*/
public void setHost( String theHost ) {
_host = theHost;
}
/**
* Returns the port to search at.
* @return Port to search at
*/
public int getPort() {
return _port;
}
/**
* Sets port number.
* @param thePort port
*/
public void setPort( int thePort ) {
_port = thePort;
}
/**
* Returns the directory base to search at.
* @return directory base to search
*/
public String getBase() {
return _base;
}
/**
* Sets the starting base
* @param theBase starting base
*/
public void setBase( String theBase ) {
_base = theBase;
}
/**
* Returns the DN to authenticate as; null or empty for anonymous.
* @return DN to authenticate as
*/
public String getAuthDN() {
return _authDN;
}
/**
* Sets the DN to authenticate as; null or empty for anonymous.
* @param authDN the DN to authenticate as
*/
public void setAuthDN( String authDN ) {
this._authDN = authDN;
}
/**
* Returns the password for the DN to authenticate as
* @return Password of DN to authenticate as
*/
public String getAuthPassword() {
return _authPassword;
}
/**
* Sets the password for the DN to authenticate as
* @param authPassword the password to use in authentication
*/
public void setAuthPassword( String authPassword ) {
this._authPassword = authPassword;
}
/**
* Returns the user name
* @return The user name
*/
public String getUserName() {
return _userName;
}
/**
* Set the user name. The name should be of the form "Polly Plum".
* @param name The user name
*/
public void setUserName( String name ) {
_userName = name;
}
/**
* Return the user ID.
* @return name the user id
*/
public String getUserID() {
return _userID;
}
/**
* Set the user ID.
* @param name the value of the user id
*/
public void setUserID( String name ) {
_userID = name;
}
/**
* Get the current search scope
* @return the current search scope as integer
*/
public int getScope() {
return _scope;
}
/**
* Set the search scope using an integer
* @param scope one of LDAPConnection.SCOPE_BASE,
* LDAPConnection.SCOPE_SUB, LDAPConnection.SCOPE_ONE
*/
public void setScope( int scope ) {
_scope = scope;
}
/**
* Returns the search filter
* @return search filter
*/
public String getFilter() {
return _filter;
}
/**
* Sets the search filter
* @param filter search filter
*/
public void setFilter( String filter ) {
_filter = filter;
}
/**
* Returns true if debug output is on
* @return true if debug output is on
*/
public boolean getDebug() {
return _debug;
}
/**
* Turns debug output on or off
* @param on true for debug output
*/
public void setDebug( boolean on ) {
_debug = on;
}
/**
* Returns the latest error code
* @return The latest error code
*/
public int getErrorCode() {
return _errCode;
}
/**
* Sets an error code for retrieval by a client
* @param code An error code
*/
public void setErrorCode( int code ) {
_errCode = code;
}
/**
* Add a client to be notified when an authentication result is in
* @param listener a client to be notified of changes
*/
public void addPropertyChangeListener( PropertyChangeListener listener ) {
printDebug( "Adding listener " + listener );
m_propSupport.addPropertyChangeListener( listener );
}
/**
* Remove a client which had requested notification on authentication
* @param listener a client to not be notified of changes
*/
public void removePropertyChangeListener(
PropertyChangeListener listener ) {
m_propSupport.removePropertyChangeListener( listener );
}
/**
* Support for bound property notification
* @param propName Name of changed property
* @param oldValue Previous value of property
* @param newValue New value of property
*/
public void firePropertyChange(
String propName,
Object oldValue,
Object newValue ) {
if (m_propSupport == null)
m_propSupport = new PropertyChangeSupport( this );
m_propSupport.firePropertyChange( propName, oldValue, newValue );
}
protected void printDebug( String s ) {
if ( _debug )
System.out.println( s );
}
/**
* Sets up basic connection privileges for Communicator if necessary,
* and connects
* @param host Host to connect to.
* @param port Port number.
* @exception LDAPException from connect()
*/
protected void connect( LDAPConnection conn, String host, int port )
throws LDAPException {
boolean needsPrivileges = true;
/* Running standalone? */
SecurityManager sec = System.getSecurityManager();
printDebug( "Security manager = " + sec );
if ( sec == null ) {
printDebug( "No security manager" );
/* Not an applet, we can do what we want to */
needsPrivileges = false;
/* Can't do instanceof on an abstract class */
} else if ( sec.toString().startsWith("java.lang.NullSecurityManager") ) {
printDebug( "No security manager" );
/* Not an applet, we can do what we want to */
needsPrivileges = false;
} else if ( sec.toString().startsWith(
"netscape.security.AppletSecurity" ) ) {
/* Connecting to the local host? */
try {
if ( host.equalsIgnoreCase(
java.net.InetAddress.getLocalHost().getHostName() ) )
needsPrivileges = false;
} catch ( java.net.UnknownHostException e ) {
}
}
if ( needsPrivileges ) {
/* Running as applet. Is PrivilegeManager around? */
String mgr = "netscape.security.PrivilegeManager";
try {
Class c = Class.forName( mgr );
java.lang.reflect.Method[] m = c.getMethods();
if ( m != null ) {
for( int i = 0; i < m.length; i++ ) {
if ( m[i].getName().equals( "enablePrivilege" ) ) {
try {
Object[] args = new Object[1];
args[0] = new String( "UniversalConnect" );
m[i].invoke( null, args );
printDebug( "UniversalConnect enabled" );
args[0] = new String( "UniversalPropertyRead" );
m[i].invoke( null, args );
printDebug( "UniversalPropertyRead enabled" );
} catch ( Exception e ) {
printDebug( "Exception on invoking " +
"enablePrivilege: " +
e.toString() );
break;
}
break;
}
}
}
} catch ( ClassNotFoundException e ) {
printDebug( "no " + mgr );
}
}
conn.connect( host, port );
setDefaultReferralCredentials( conn );
}
protected void setDefaultReferralCredentials(
LDAPConnection conn ) {
final LDAPConnection m_conn = conn;
LDAPRebind rebind = new LDAPRebind() {
public LDAPRebindAuth getRebindAuthentication(
String host,
int port ) {
return new LDAPRebindAuth(
m_conn.getAuthenticationDN(),
m_conn.getAuthenticationPassword() );
}
};
try {
conn.setOption(LDAPConnection.REFERRALS, Boolean.TRUE);
conn.setOption(LDAPConnection.REFERRALS_REBIND_PROC, rebind);
} catch (LDAPException e) {
//will never happen
}
}
/**
* Utility method to convert an array of Strings to a single String
* with line feeds between elements.
* @param aResult The array of Strings to convert
* @return A String with the elements separated by line feeds
*/
public String convertToString( String[] aResult ) {
String sResult = "";
if ( null != aResult ) {
for ( int i = 0; i < aResult.length; i++ ) {
sResult += aResult[i] + "\n";
}
}
return sResult;
}
/*
* Variables
*/
/* Error codes from search operations, etc */
public static final int OK = 0;
public static final int INVALID_PARAMETER = 1;
public static final int CONNECT_ERROR = 2;
public static final int AUTHENTICATION_ERROR = 3;
public static final int PROPERTY_NOT_FOUND = 4;
public static final int AMBIGUOUS_RESULTS = 5;
public static final int NO_SUCH_OBJECT = 6;
private boolean _debug = false;
private int _errCode = 0;
private String _host = new String("localhost");
private int _port = 389;
private int _scope = LDAPConnection.SCOPE_SUB;
private String _base = new String("");
private String _filter = new String("");
private String _authDN = new String("");
private String _authPassword = new String("");
private String _userName = new String("");
private String _userID = new String("");
transient private PropertyChangeSupport m_propSupport =
new PropertyChangeSupport( this );
}