sdk.xml revision ac6cbec620a184afeced16563809d3fd7da3e910
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE stax SYSTEM "/stax.dtd">
<!--
! CDDL HEADER START
!
! The contents of this file are subject to the terms of the
! Common Development and Distribution License, Version 1.0 only
! (the "License"). You may not use this file except in compliance
! with the License.
!
! You can obtain a copy of the license at
! trunk/opends/resource/legal-notices/OpenDS.LICENSE
! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
! See the License for the specific language governing permissions
! and limitations under the License.
!
! When distributing Covered Code, include this CDDL HEADER in each
! file and include the License file at
! trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
! add the following below this CDDL HEADER, with the fields enclosed
! by brackets "[]" replaced with your own identifying information:
! Portions Copyright [yyyy] [name of copyright owner]
!
! CDDL HEADER END
!
! Copyright 2011 ForgeRock AS
! -->
<stax>
<!-- SDK ldapsearch Function -->
<function name="SDKldapSearch">
<function-prolog>
This function performs an ldapsearch using the SDK java API
</function-prolog>
<function-map-args>
<function-arg-def name="dsInstanceHost" type="optional">
<function-arg-description>
Directory server hostname or IP address
</function-arg-description>
<function-arg-property name="type" value="hostname"/>
</function-arg-def>
<function-arg-def name="dsInstancePort" type="optional">
<function-arg-description>
Directory server port number
</function-arg-description>
<function-arg-property name="type" value="Port number"/>
</function-arg-def>
<function-arg-def name="dsInstanceDn" type="optional">
<function-arg-description>
Bind DN
</function-arg-description>
<function-arg-property name="type" value="DN"/>
</function-arg-def>
<function-arg-def name="dsInstancePswd" type="optional">
<function-arg-description>
Bind password
</function-arg-description>
<function-arg-property name="type" value="string"/>
</function-arg-def>
<function-arg-def name="dsScope" type="optional">
<function-arg-description>
The scope of the search operation
</function-arg-description>
<function-arg-property name="type" value="string"/>
</function-arg-def>
<function-arg-def name="dsBaseDN" type="optional">
<function-arg-description>
The baseDN for the search operation
</function-arg-description>
<function-arg-property name="type" value="dn"/>
</function-arg-def>
<function-arg-def name="dsFilter" type="optional">
<function-arg-description>
The filter for the search operation
</function-arg-description>
<function-arg-property name="type" value="filter"/>
</function-arg-def>
<function-arg-def name="dsAttributes" type="optional">
<function-arg-description>
Only return these attributes
</function-arg-description>
<function-arg-property name="type" value="string"/>
</function-arg-def>
</function-map-args>
<sequence>
<!-- Build the Command -->
<script>
from org.forgerock.opendj.ldap import *
from org.forgerock.opendj.ldap.responses import *
from org.forgerock.opendj.ldif import *
myHost=String(dsInstanceHost)
myPort=int(dsInstancePort)
myBaseDn=String(dsBaseDN)
myDn=String(dsInstanceDn)
myPassword=String(dsInstancePswd).toCharArray()
if dsScope == 'base':
myScope = SearchScope.BASE_OBJECT
elif dsScope == 'one':
myScope = SearchScope.SINGLE_LEVEL
elif dsScope == 'sub':
myScope = SearchScope.WHOLE_SUBTREE
else:
myScope = SearchScope.WHOLE_SUBTREE
if dsFilter:
myFilter = dsFilter
else:
myFilter = '(objectClass=*)'
if dsAttributes:
myAttrs = dsAttributes
else:
myAttrs = []
writer = LDIFEntryWriter(System.out)
factory = LDAPConnectionFactory(myHost,myPort)
connection = None
try:
try:
connection = factory.getConnection()
connection.bind(myDn, myPassword)
reader = connection.search(myBaseDn, myScope, myFilter, myAttrs)
#TODO: handle search result references
#TODO: not really a need to use writer to write to stdout
while (reader.hasNext()):
if not reader.isReference():
entry = reader.readEntry()
writer.writeComment("Search result entry: %s" % entry.getName().toString())
writer.writeEntry(entry)
else:
ref = reader.readReference()
writer.writeComment("Search result reference: %s " % ref.getURIs().toString())
writer.flush()
except ErrorResultException, e:
System.err.println(e.getMessage())
System.exit(e.getResult().getResultCode().intValue())
except ErrorResultIOException, e:
System.err.println(e.getMessage())
System.exit(e.getCause().getResult().getResultCode().intValue())
except InterruptedException, e:
System.err.println(e.getMessage())
System.exit(ResultCode.CLIENT_SIDE_USER_CANCELLED.intValue())
except IOException, e:
System.err.println(e.getMessage())
System.exit(ResultCode.CLIENT_SIDE_LOCAL_ERROR.intValue())
finally:
connection.close()
SDKResult = [[0,'%s' % entry.getAllAttributes().toString()]]
</script>
<message>
'Result = %s' % entry.getAllAttributes().toString()
</message>
<return>
SDKResult
</return>
</sequence>
</function>
</stax>