Version 3 of the LDAP protocol include the means to define additional
operations ("extended operations") beyond the standard LDAP
operations. An LDAP v3 client can send an extended operation request,
identifying the operation by its unique object ID (OID). The server
receives the request and if OID corresponds to an operation supported
by the server, the server procoess the request and sends an extended
operation response back to the client.
Objects of this class can be used to represent extended operation
requests (sent by your client) or extended operation responses
(returned by an LDAP v3 server).
To determine which extended operations are supported by a server,
you need to search for the root DSE (DSA-specific entry, where DSA is
another term for "LDAP server") and find the values of the
supportedExtension
attribute. This attribute contains the
object IDs (OIDs) of the extended operations supported by this server.
The following section of code demonstrates how to get the list
of the extended operations supported by an LDAP server.
public static void main( String[] args )
{
LDAPConnection ld = new LDAPConnection();
try {
String MY_HOST = "localhost";
int MY_PORT = 389;
ld.connect( MY_HOST, MY_PORT );
try {
ld.authenticate( 3, "cn=Directory Manager", "23skidoo" );
} catch( LDAPException e ) {
System.out.println( "LDAP server does not support v3." );
ld.disconnect();
System.exit(1);
}
String MY_FILT = "(objectclass=*)";
String MY_BASE = "";
String getAttrs[] = { "supportedExtension" };
LDAPSearchResults res = ld.search( MY_BASE,
LDAPConnection.SCOPE_BASE, MY_FILT, getAttrs, false );
while ( res.hasMoreElements() ) {
LDAPEntry findEntry = (LDAPEntry)res.nextElement();
LDAPAttributeSet findAttrs = findEntry.getAttributeSet();
Enumeration enumAttrs = findAttrs.getAttributes();
while ( enumAttrs.hasMoreElements() ) {
LDAPAttribute anAttr = (LDAPAttribute)enumAttrs.nextElement();
String attrName = anAttr.getName();
System.out.println( attrName );
Enumeration enumVals = anAttr.getStringValues();
while ( enumVals.hasMoreElements() ) {
String aVal = ( String )enumVals.nextElement();
System.out.println( "\t" + aVal );
}
}
}
}
catch( LDAPException e ) {
System.out.println( "Error: " + e.toString() );
}
try {
ld.disconnect();
}
catch( LDAPException e ) {
System.exit(1);
}
System.exit(0);
}
If you compile and run this example against an LDAP server that
supports v3 of the protocol, you might receive the following results:
supportedextension
1.2.3.4
For more information on LDAP controls, see the Internet-Draft on
the LDAP v3 protocol. (Note that this internet draft is still a
work in progress. You can find the latest draft at the
ASID home page.