The cfldap
tag lets you search an LDAP directory. The tag returns a ColdFusion query object with the results, which you can use as you would any query result. When you query an LDAP directory, you specify the directory entry where the search starts and the attributes whose values to return. You can specify the search scope and attribute content filtering rules and use other attributes to further control the search.
The search scope sets the limits of a search. The default scope is the level below the distinguished name specified in the start
attribute. This scope does not include the entry identified by the start
attribute. For example, if the start
attribute is "ou=support, o=macromedia" the level below support is searched. You can restrict a query to the level of the start
entry, or extend it to the entire subtree below the start
entry.
The search filter syntax has the form attribute operator value. The default filter, objectclass=*, returns all entries in the scope.
The following table lists the filter operators:
The Boolean operators &
and |
can operate on more than two attributes and precede all of the attributes on which they operate. You surround a filter with parentheses and use parentheses to group conditions.
If the pattern that you are matching contains an asterisk, left parenthesis, right parenthesis, backslash, or NUL character, you must use the following three-character escape sequence in place of the character:
Character |
Escape sequence |
---|---|
* |
\2A |
( |
\28 |
) |
\29 |
\ |
\5C |
NUL |
\00 |
For example, to match the common name St*r Industries, use the filter
(cn=St\2Ar Industries).
LDAP v3 supports an extensible match filter that permits server-specific matching rules. For more information on using extensible match filters, see your LDAP server documentation.
filter="(&(cn=Robert Jones)(cn=Bobby Jones))"
filter="(objectclass=inetorgperson)"
sort
field to identify the attribute(s) to sort. By default, ColdFusion returns sorted results in case-sensitive ascending order. To specify descending order, case-insensitive sorting, or both, use the sortControl
attribute. cfldap
supports. You can use the cfldap
tag timeout
and maxRows
attributes to control the apparent performance of pages that perform queries, by limiting the number of entries and by exiting the query if the server does not respond in a specified time.Typically, you do not use a query that gets all the attributes in an entry. Such a query would return attributes that are used only by the directory server. However, you can get all the attributes by specifying attributes="*" in your query.
If you do this, ColdFusion returns the results in a structure in which each element contains a single attribute name-value pair. The tag does not return a query object. ColdFusion does this because LDAP directory entries, unlike the rows in a relational table, vary depending on their object class.
For example, the following code retrieves the contents of the Airius directory:
<cfldap name="GetList" server=#myServer# action="query" attributes="*" scope="subtree" start="o=airius.com" sort="sn,cn">
This tag returns entries for all the people in the organization and entries for all the groups. The group entries have a different object class, and therefore different attributes from the person entries. If ColdFusion returned both types of entries in one query object, some rows would have only the group-specific attribute values and the other rows would have only person-specific attribute values. Instead, ColdFusion returns a structure in which each attribute is an entry.
The following example uses the cfldap
tag to get information about the people in the Airius corporation's Santa Clara office. Users can enter all or part of a person's name and get a list of matching names with their departments, e-mail addresses, and telephone numbers.
This example uses the sample Airius corporate directory that is distributed with the Netscape Directory Server. If you do not have access to this directory, modify the code to work with your LDAP directory.
<!--- This example shows the use of CFLDAP ---> <html> <head> <title>cfldap Query Example</title> </head> <h3>cfldap Query Example</h3> <body> <p>This tool queries the Airius.com database to locate all people in the company's Santa Clara office whose common names contain the text entered in the form.</p> <p>Enter a full name, first name, last name, or name fragment.</p> <form action="cfldap.cfm" method="POST"> <input type="text" name="name"><br><br> <input type="submit" value="Search"> </form> <!--- make the LDAP query ---> <!-- Note that some search text is required. A search filter of cn=** would cause an error --> <cfif (isdefined("form.name") AND (form.name IS NOT ""))> <cfldap server="ldap.airius.com" action="query" name="results" start="ou=People, o=Airius.com" scope="onelevel" filter="(&(cn=*#form.Name#*)(l=Santa Clara))" attributes="cn,sn,ou,mail,telephonenumber" sort="ou,sn" maxrows=100 timeout=20 > <!--- Display results ---> <table border=0 cellspacing=2 cellpadding=2> <tr> <th colspan=4><cfoutput>#results.RecordCount# matches found</cfoutput> </th> </tr> <tr> <th>Name</th> <th>Department</th> <th>E-Mail</th> <th>Phone</th> </tr> <cfoutput query="results"> <tr> <td>#cn#</td> <td>#listFirst(ou)#</td> <td><a href="mailto:#mail#">#mail#</a></td> <td>#telephonenumber#</td> </tr> </cfoutput> </table> </cfif> </body> </html>
server
attribute from ldap.airius.com to the name of your installation of the Airius database.
cfldap.cfm
and run it in your browser.The following table describes the code:
This search shows the use of a logical AND statement in a filter. It returns one attribute, the surname, that is used only for sorting the results.
In this query, the ou
attribute value consists of two values in a comma-delimited list. One is the department name. The other is People. This is because the Airius database uses the ou attribute type twice:
Because the attribute values are returned in order from the person entry to the directory tree root, the ListFirst
function extracts the person's department name.