You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by sz...@apache.org on 2010/09/01 15:32:32 UTC
svn commit: r991532 -
/directory/apacheds-manuals/trunk/src/basic-user-guide/handling-of-data-3-operations.xml
Author: szoerner
Date: Wed Sep 1 13:32:32 2010
New Revision: 991532
URL: http://svn.apache.org/viewvc?rev=991532&view=rev
Log:
Added some content for search (command line tools, JNDI)
Modified:
directory/apacheds-manuals/trunk/src/basic-user-guide/handling-of-data-3-operations.xml
Modified: directory/apacheds-manuals/trunk/src/basic-user-guide/handling-of-data-3-operations.xml
URL: http://svn.apache.org/viewvc/directory/apacheds-manuals/trunk/src/basic-user-guide/handling-of-data-3-operations.xml?rev=991532&r1=991531&r2=991532&view=diff
==============================================================================
--- directory/apacheds-manuals/trunk/src/basic-user-guide/handling-of-data-3-operations.xml (original)
+++ directory/apacheds-manuals/trunk/src/basic-user-guide/handling-of-data-3-operations.xml Wed Sep 1 13:32:32 2010
@@ -243,6 +243,10 @@ under the License.
<table>
<title>Search operators</title>
<tgroup cols="4">
+ <colspec colnum="1" colname="col1" colwidth="2*"/>
+ <colspec colnum="2" colname="col2" colwidth="1*"/>
+ <colspec colnum="3" colname="col3" colwidth="3*"/>
+ <colspec colnum="4" colname="col4" colwidth="3*"/>
<thead>
<row>
@@ -303,6 +307,10 @@ under the License.
<table>
<title>Boolean operators in search filters</title>
<tgroup cols="4">
+ <colspec colnum="1" colname="col1" colwidth="1*"/>
+ <colspec colnum="2" colname="col2" colwidth="1*"/>
+ <colspec colnum="3" colname="col3" colwidth="4*"/>
+ <colspec colnum="4" colname="col4" colwidth="4*"/>
<thead>
<row>
@@ -361,13 +369,169 @@ under the License.
<section id="Searching with a command line tool">
<title>Searching with a command line tool</title>
<para>
+ If you connect to ApacheDS with command line tools, you execute searches against the directory with the ldapsearch command.
+ </para>
+ <para>
+ Here is an example: The query searches all entries below "ou=people,o=sevenSeas"
+ which match the filter
+ <![CDATA[(&(objectClass=person)(givenName=William))]]>,
+ and therefore all persons called William.
+ </para>
+ <programlisting><![CDATA[
+$ ldapsearch -h zanzibar -p 10389 -D "uid=admin,ou=system" -w secret \\
+ -b "ou=people,o=sevenSeas" -s sub "(&(objectClass=person)(givenName=William))" uid mail
+
+dn: cn=William Bush,ou=people,o=sevenSeas
+uid: wbush
+mail: wbush@royalnavy.mod.uk
+
+dn: cn=William Bligh,ou=people,o=sevenSeas
+uid: wbligh
+mail: wbligh@royalnavy.mod.uk
+$
+ ]]></programlisting>
+
+ <para>
+ The tool returns the attribute values for the attributes given in the command line (uid and mail).
+ If no attributes are provided, all attributes the user is allowed to read will be returned.
</para>
+
+ <table>
+ <title>Command line options used in the search example</title>
+ <tgroup cols="3">
+ <colspec colnum="1" colname="col1" colwidth="1*"/>
+ <colspec colnum="2" colname="col2" colwidth="3*"/>
+ <colspec colnum="3" colname="col3" colwidth="4*"/>
+ <thead>
+ <row>
+ <entry>Option</entry>
+ <entry>Example value</entry>
+ <entry>Meaning</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>-h</entry>
+ <entry>zanzibar</entry>
+ <entry>Hostname of LDAP server to connect to (default is localhost)</entry>
+ </row>
+ <row>
+ <entry>-p</entry>
+ <entry>10389</entry>
+ <entry>Port on which the server listens (default is 389)</entry>
+ </row>
+ <row>
+ <entry>-D</entry>
+ <entry>"uid=admin,ou=system"</entry>
+ <entry>Distinguished name of bind user</entry>
+ </row>
+ <row>
+ <entry>-w</entry>
+ <entry>secret</entry>
+ <entry>Password of bind user</entry>
+ </row>
+ <row>
+ <entry>-b</entry>
+ <entry>"ou=people,o=sevenSeas"</entry>
+ <entry>search base</entry>
+ </row>
+ <row>
+ <entry>-s</entry>
+ <entry>sub</entry>
+ <entry>search scope, one of "base", "one", or "sub" (default is sub)</entry>
+ </row>
+
+ </tbody>
+ </tgroup>
+ </table>
+
+
</section>
<section id="Searching with a Java program">
<title>Searching with a Java program</title>
<para>
+ Here is the same search as above, performed against the "Seven seas" example from within a Java program with the help of JNDI.
</para>
+ <programlisting><![CDATA[
+package search;
+
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+
+public class SimpleSearch {
+
+ public static void main(String[] args) throws NamingException {
+
+ // JNDI connection data, move them to jndi.properties
+ Hashtable env = new Hashtable();
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+ env.put(Context.PROVIDER_URL, "ldap://zanzibar:10389/");
+ env.put(Context.SECURITY_AUTHENTICATION, "simple");
+ env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
+ env.put(Context.SECURITY_CREDENTIALS, "secret");
+
+ try {
+ DirContext ctx = new InitialDirContext(env);
+
+ String base = "ou=people,o=sevenSeas";
+ String filter = "(&(objectClass=person)(givenName=William))";
+
+ SearchControls ctls = new SearchControls();
+ ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+ ctls.setReturningAttributes(new String[] { "uid", "mail" });
+
+ NamingEnumeration resultEnum = ctx.search(base, filter, ctls);
+ while (resultEnum.hasMore()) {
+ SearchResult result = (SearchResult) resultEnum.next();
+
+ // print DN of entry
+ System.out.println(result.getNameInNamespace());
+
+ // print attributes returned by search
+ Attributes attrs = result.getAttributes();
+ NamingEnumeration e = attrs.getAll();
+ while (e.hasMore()) {
+ Attribute attr = (Attribute) e.next();
+ System.out.println(attr);
+ }
+ System.out.println();
+ }
+
+ ctx.close();
+ } catch (NamingException e) {
+ System.out.println(e.getMessage());
+ }
+ }
+}
+ ]]></programlisting>
+ <para>
+ the output of the program looks like this:
+ </para>
+ <programlisting><![CDATA[
+cn=William Bush,ou=people,o=sevenSeas
+mail: wbush@royalnavy.mod.uk
+uid: wbush
+
+cn=William Bligh,ou=people,o=sevenSeas
+mail: wbligh@royalnavy.mod.uk
+uid: wbligh
+ ]]></programlisting>
+ <para>
+ Key for LDAP searches with JNDI are the search methods in the <emphasis>javax.naming.directory.DirContext</emphasis> interface
+ (<link xlink:href="http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/directory/DirContext.html">javadoc</link>).
+ Learn more about JNDI and how to perform searches against an LDAP directory with it in the
+ <link xlink:href="http://java.sun.com/products/jndi/tutorial/">JNDI tutorial</link>
+ </para>
</section>
<section id="Searching with a graphical client tool">