зеркало из https://github.com/mozilla/pjs.git
396 строки
12 KiB
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 );
|
|
}
|
|
|