<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html xmlns:fn="http://www.w3.org/2005/02/xpath-functions"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="../../../../doc/otp_doc.css" type="text/css"> <title>Erlang -- eldap</title> </head> <body bgcolor="white" text="#000000" link="#0000ff" vlink="#ff00ff" alink="#ff0000"><div id="container"> <script id="js" type="text/javascript" language="JavaScript" src="../../../../doc/js/flipmenu/flipmenu.js"></script><script id="js2" type="text/javascript" src="../../../../doc/js/erlresolvelinks.js"></script><script language="JavaScript" type="text/javascript"> <!-- function getWinHeight() { var myHeight = 0; if( typeof( window.innerHeight ) == 'number' ) { //Non-IE myHeight = window.innerHeight; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode' myHeight = document.documentElement.clientHeight; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { //IE 4 compatible myHeight = document.body.clientHeight; } return myHeight; } function setscrollpos() { var objf=document.getElementById('loadscrollpos'); document.getElementById("leftnav").scrollTop = objf.offsetTop - getWinHeight()/2; } function addEvent(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, true); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } addEvent(window, 'load', setscrollpos); //--></script><div id="leftnav"><div class="innertube"> <img alt="Erlang logo" src="../../../../doc/erlang-logo.png"><br><small><a href="users_guide.html">User's Guide</a><br><a href="index.html">Reference Manual</a><br><a href="release_notes.html">Release Notes</a><br><a href="../pdf/eldap-1.0.pdf">PDF</a><br><a href="../../../../doc/index.html">Top</a></small><p><strong>eldap</strong><br><strong>Reference Manual</strong><br><small>Version 1.0</small></p> <br><a href="javascript:openAllFlips()">Expand All</a><br><a href="javascript:closeAllFlips()">Contract All</a><p><small><strong>Table of Contents</strong></small></p> <ul class="flipMenu"><li id="loadscrollpos" title="eldap " expanded="true">eldap<ul> <li><a href="eldap.html"> Top of manual page </a></li> <li title="open-1"><a href="eldap.html#open-1">open/1</a></li> <li title="open-2"><a href="eldap.html#open-2">open/2</a></li> <li title="close-1"><a href="eldap.html#close-1">close/1</a></li> <li title="simple_bind-3"><a href="eldap.html#simple_bind-3">simple_bind/3</a></li> <li title="add-3"><a href="eldap.html#add-3">add/3</a></li> <li title="delete-2"><a href="eldap.html#delete-2">delete/2</a></li> <li title="mod_add-2"><a href="eldap.html#mod_add-2">mod_add/2</a></li> <li title="mod_delete-2"><a href="eldap.html#mod_delete-2">mod_delete/2</a></li> <li title="mod_replace-2"><a href="eldap.html#mod_replace-2">mod_replace/2</a></li> <li title="modify-3"><a href="eldap.html#modify-3">modify/3</a></li> <li title="modify_dn-5"><a href="eldap.html#modify_dn-5">modify_dn/5</a></li> <li title="search-2"><a href="eldap.html#search-2">search/2</a></li> <li title="baseObject-0"><a href="eldap.html#baseObject-0">baseObject/0</a></li> <li title="singleLevel-0"><a href="eldap.html#singleLevel-0">singleLevel/0</a></li> <li title="wholeSubtree-0"><a href="eldap.html#wholeSubtree-0">wholeSubtree/0</a></li> <li title="neverDerefAliases-0"><a href="eldap.html#neverDerefAliases-0">neverDerefAliases/0</a></li> <li title="derefAlways-0"><a href="eldap.html#derefAlways-0">derefAlways/0</a></li> <li title="derefInSearching-0"><a href="eldap.html#derefInSearching-0">derefInSearching/0</a></li> <li title="derefFindingBaseObj-0"><a href="eldap.html#derefFindingBaseObj-0">derefFindingBaseObj/0</a></li> <li title="present-1"><a href="eldap.html#present-1">present/1</a></li> <li title="substrings-2"><a href="eldap.html#substrings-2">substrings/2</a></li> <li title="equalityMatch-2"><a href="eldap.html#equalityMatch-2">equalityMatch/2</a></li> <li title="greaterOrEqual-2"><a href="eldap.html#greaterOrEqual-2">greaterOrEqual/2</a></li> <li title="lessOrEqual-2"><a href="eldap.html#lessOrEqual-2">lessOrEqual/2</a></li> <li title="approxMatch-2"><a href="eldap.html#approxMatch-2">approxMatch/2</a></li> <li title="'and'-1"><a href="eldap.html#'and'-1">'and'/1</a></li> <li title="'or'-1"><a href="eldap.html#'or'-1">'or'/1</a></li> <li title="'not'-1"><a href="eldap.html#'not'-1">'not'/1</a></li> </ul> </li></ul> </div></div> <div id="content"> <div class="innertube"> <!-- refpage --><center><h1>eldap</h1></center> <h3>MODULE</h3> <div class="REFBODY">eldap</div> <h3>MODULE SUMMARY</h3> <div class="REFBODY">Eldap Functions</div> <h3>DESCRIPTION</h3> <div class="REFBODY"><p> <p>This module provides a client api to the Lightweight Directory Access Protocol (LDAP). </p> <p>References:</p> <ul> <li> <p>RFC 4510 - RFC 4519</p> </li> </ul> <p>The above publications can be found at <span class="bold_code"><a href="http://www.ietf.org">IETF</a></span>. </p> <p><strong>Types</strong></p> <div class="example"><pre> handle() Connection handle attribute() {Type = string(), Values=[string()]} modify_op() See mod_add/2, mod_delete/2, mod_replace/2 scope() See baseObject/0, singleLevel/0, wholeSubtree/0 dereference() See neverDerefAliases/0, derefInSearching/0, derefFindingBaseObj/0, derefAlways/0 filter() See present/1, substrings/2, equalityMatch/2, greaterOrEqual/2, lessOrEqual/2, approxMatch/2, 'and'/1, 'or'/1, 'not'/1. </pre></div> <p></p> </p></div> <h3>EXPORTS</h3> <p><a name="open-1"><span class="bold_code">open([Host]) -> {ok, Handle} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Handle = handle()</span><br> </div> </div> <div class="REFBODY"><p> <p>Setup a connection to an LDAP server, the <span class="code">HOST</span>'s are tried in order. </p> </p></div> <p><a name="open-2"><span class="bold_code">open([Host], [Option]) -> {ok, Handle} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Handle = handle()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Option = {port, integer()} | {log, function()} | {timeout, integer()} | {ssl, boolean()}</span><br> </div> </div> <div class="REFBODY"><p> <p>Setup a connection to an LDAP server, the <span class="code">HOST</span>'s are tried in order.</p> <p>The log function takes three arguments, <span class="code">fun(Level, FormatString, [FormatArg]) end</span>.</p> <p>Timeout set the maximum time in milliseconds that each server request may take.</p> </p></div> <p><a name="close-1"><span class="bold_code">close(Handle) -> ok</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Handle = handle()</span><br> </div> </div> <div class="REFBODY"><p> <p>Shutdown the connection.</p> </p></div> <p><a name="simple_bind-3"><span class="bold_code">simple_bind(Handle, Dn, Password) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Handle = handle()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Dn = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Password = string()</span><br> </div> </div> <div class="REFBODY"><p> <p>Authenticate the connection using simple authentication.</p> </p></div> <p><a name="add-3"><span class="bold_code">add(Handle, Dn, [Attribute]) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Handle = handle()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Dn = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Attribute = attribute()</span><br> </div> </div> <div class="REFBODY"><p> <p> Add an entry. The entry must not exist.</p> <div class="example"><pre> add(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com", [{"objectclass", ["person"]}, {"cn", ["Bill Valentine"]}, {"sn", ["Valentine"]}, {"telephoneNumber", ["545 555 00"]}] ) </pre></div> </p></div> <p><a name="delete-2"><span class="bold_code">delete(Handle, Dn) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Dn = string()</span><br> </div> </div> <div class="REFBODY"><p> <p> Delete an entry.</p> <div class="example"><pre> delete(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com") </pre></div> </p></div> <p><a name="mod_add-2"><span class="bold_code">mod_add(Type, [Value]) -> modify_op()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Value = string()</span><br> </div> </div> <div class="REFBODY"><p> <p> Create an add modification operation.</p> </p></div> <p><a name="mod_delete-2"><span class="bold_code">mod_delete(Type, [Value]) -> modify_op()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Value = string()</span><br> </div> </div> <div class="REFBODY"><p> <p> Create a delete modification operation.</p> </p></div> <p><a name="mod_replace-2"><span class="bold_code">mod_replace(Type, [Value]) -> modify_op()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Value = string()</span><br> </div> </div> <div class="REFBODY"><p> <p> Create a replace modification operation.</p> </p></div> <p><a name="modify-3"><span class="bold_code">modify(Handle, Dn, [ModifyOp]) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Dn = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">ModifyOp = modify_op()</span><br> </div> </div> <div class="REFBODY"><p> <p> Modify an entry.</p> <div class="example"><pre> modify(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com", [eldap:mod_replace("telephoneNumber", ["555 555 00"]), eldap:mod_add("description", ["LDAP Hacker"]) ]) </pre></div> </p></div> <p><a name="modify_dn-5"><span class="bold_code">modify_dn(Handle, Dn, NewRDN, DeleteOldRDN, NewSupDN) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Dn = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">NewRDN = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">DeleteOldRDN = boolean()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">NewSupDN = string()</span><br> </div> </div> <div class="REFBODY"><p> <p> Modify the DN of an entry. <span class="code">DeleteOldRDN</span> indicates whether the current RDN should be removed after operation. <span class="code">NewSupDN</span> should be "" if the RDN should not be moved or the new parent which the RDN will be moved to.</p> <div class="example"><pre> modify_dn(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com ", "cn=Bill Jr Valentine", true, "") </pre></div> </p></div> <p><a name="search-2"><span class="bold_code">search(Handle, SearchOptions) -> {ok, #eldap_search_result{}} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">SearchOptions = #eldap_search{} | [SearchOption]</span><br> </div> <div class="REFTYPES"> <span class="bold_code">SearchOption = {base, string()} | {filter, filter()} | {scope, scope()} | {attributes, [string()]} | {deref, dereference()} | | {types_only, boolean()} | {timeout, integer()} </span><br> </div> </div> <div class="REFBODY"><p> <p>Search the directory with the supplied the SearchOptions. The base and filter options must be supplied. Default values: scope is <span class="code">wholeSubtree()</span>, deref is <span class="code">derefAlways()</span>, types_only is <span class="code">false</span> and timeout is <span class="code">0</span> (meaning infinity). </p> <div class="example"><pre> Filter = eldap:substrings("cn", [{any,"V"}]), search(Handle, [{base, "dc=example, dc=com"}, {filter, Filter}, {attributes, ["cn"]}]), </pre></div> </p></div> <p><a name="baseObject-0"><span class="bold_code">baseObject() -> scope()</span></a><br></p> <div class="REFBODY"><p> <p> Search baseobject only.</p> </p></div> <p><a name="singleLevel-0"><span class="bold_code">singleLevel() -> scope()</span></a><br></p> <div class="REFBODY"><p> <p> Search the specified level only, i.e. do not recurse.</p> </p></div> <p><a name="wholeSubtree-0"><span class="bold_code">wholeSubtree() -> scope()</span></a><br></p> <div class="REFBODY"><p> <p> Search the entire subtree.</p> </p></div> <p><a name="neverDerefAliases-0"><span class="bold_code">neverDerefAliases() -> dereference()</span></a><br></p> <div class="REFBODY"><p> <p>Never derefrence aliases, treat aliases as entries.</p> </p></div> <p><a name="derefAlways-0"><span class="bold_code">derefAlways() -> dereference()</span></a><br></p> <div class="REFBODY"><p> <p>Always derefrence aliases.</p> </p></div> <p><a name="derefInSearching-0"><span class="bold_code">derefInSearching() -> dereference()</span></a><br></p> <div class="REFBODY"><p> <p>Derefrence aliases only when searching.</p> </p></div> <p><a name="derefFindingBaseObj-0"><span class="bold_code">derefFindingBaseObj() -> dereference()</span></a><br></p> <div class="REFBODY"><p> <p>Derefrence aliases only in finding the base.</p> </p></div> <p><a name="present-1"><span class="bold_code">present(Type) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> </div> <div class="REFBODY"><p> <p>Create a filter which filters on attribute type presence.</p> </p></div> <p><a name="substrings-2"><span class="bold_code">substrings(Type, [SubString]) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">SubString = {StringPart, string()}</span><br> </div> <div class="REFTYPES"> <span class="bold_code">StringPart = initial | any | final</span><br> </div> </div> <div class="REFBODY"><p> <p>Create a filter which filters on substrings.</p> </p></div> <p><a name="equalityMatch-2"><span class="bold_code">equalityMatch(Type, Value) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Value = string()</span><br> </div> </div> <div class="REFBODY"><p> <p>Create a equality filter.</p> </p></div> <p><a name="greaterOrEqual-2"><span class="bold_code">greaterOrEqual(Type, Value) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Value = string()</span><br> </div> </div> <div class="REFBODY"><p> <p>Create a greater or equal filter.</p> </p></div> <p><a name="lessOrEqual-2"><span class="bold_code">lessOrEqual(Type, Value) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Value = string()</span><br> </div> </div> <div class="REFBODY"><p> <p>Create a less or equal filter.</p> </p></div> <p><a name="approxMatch-2"><span class="bold_code">approxMatch(Type, Value) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Type = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Value = string()</span><br> </div> </div> <div class="REFBODY"><p> <p>Create a approximation match filter.</p> </p></div> <p><a name="'and'-1"><span class="bold_code">'and'([Filter]) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Filter = filter()</span><br> </div> </div> <div class="REFBODY"><p> <p>Creates a filter where all <span class="code">Filter</span> must be true.</p> </p></div> <p><a name="'or'-1"><span class="bold_code">'or'([Filter]) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Filter = filter()</span><br> </div> </div> <div class="REFBODY"><p> <p>Create a filter where at least one of the <span class="code">Filter</span> must be true.</p> </p></div> <p><a name="'not'-1"><span class="bold_code">'not'(Filter) -> filter()</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Filter = filter()</span><br> </div> </div> <div class="REFBODY"><p> <p>Negate a filter.</p> </p></div> </div> <div class="footer"> <hr> <p>Copyright © 2012-2012 Ericsson AB. All Rights Reserved.</p> </div> </div> </div></body> </html>