eldap
eldap
模块
eldap
模块摘要
LDAP客户端
描述
该模块为轻型目录访问协议(LDAP)提供客户端API。
参考资料:
- RFC 4510-RFC 4519
- RFC 2830
以上出版物可以在这里找到IETF
。
数据类型
在此模块中多次使用的类型定义:
handle()
连接手柄
attribute() =
{Type = string(), Values=[string()]}
modify_op()
见mod_add/2
,mod_delete/2
,mod_replace/2
scope()
见baseObject/0
,singleLevel/0
,wholeSubtree/0
dereference()
见neverDerefAliases/0
,derefInSearching/0
,derefFindingBaseObj/0
,derefAlways/0
filter()
See present/1
, substrings/2
, equalityMatch/2
, greaterOrEqual/2
, lessOrEqual/2
, approxMatch/2
, extensibleMatch/2
, 'and'/1
, 'or'/1
, 'not'/1
return_value() =
ok | {ok, {referral,referrals()}} | {error,Error}
referrals() =
[Address = string()]
内容Address
取决于服务器。
出口
open([Host]) -> {ok, Handle} | {error, Reason}
类型
建立到LDAP服务器的连接,HOST
按顺序尝试。
open([Host], [Option]) -> {ok, Handle} | {error, Reason}
类型
建立到LDAP服务器的连接,HOST
按顺序尝试。
日志函数有三个参数,fun(Level, FormatString, [FormatArg]) end
。
超时设置每个服务器请求可能需要的最大时间(以毫秒为单位)。
所有TCP套接字选项被接受除active
,binary
,deliver
,list
,mode
和packet
close(Handle) -> ok
类型
在向服务器发送取消绑定请求后关闭连接。如果连接是tls,连接将关闭ssl:close/1
,否则与gen_tcp:close/1
。
start_tls(Handle, Options) -> return_value()
与start_tls相同(Handle,Options,infinity)
start_tls(Handle, Options, Timeout) -> return_value()
类型
Handle
如果可能的话,升级与tls 连接相关的连接。
升级分两个阶段完成:首先要求服务器获得升级权限。其次,如果请求被确认,则升级到tls被执行。
来自第一阶段的错误响应不会影响连接的当前加密状态。这些回应是:
tls_already_started
连接已被加密。连接不受影响。{response,ResponseFromServer}
升级被LDAP服务器拒绝。这ResponseFromServer
是在rfc 2830第2.3节中解释的LDAP服务器交付的原子。连接不受影响,因此它仍未加密。
然而,第二阶段的错误将会结束连接:
Error
从ssl:connect / 3响应的任何错误
该Timeout
参数用于实际的tls升级(阶段2),而timeout in eldap:open/2
用于关于升级的初始协商(阶段1)。
simple_bind(Handle, Dn, Password) -> return_value()
类型
使用简单身份验证验证连接。
add(Handle, Dn, [Attribute]) -> return_value()
类型
添加一个条目。该条目不得存在。
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"]}]
)
delete(Handle, Dn) -> return_value()
类型
删除一个条目。
delete(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com")
mod_add(Type, [Value]) -> modify_op()
类型
创建一个添加修改操作。
mod_delete(Type, [Value]) -> modify_op()
类型
创建一个删除修改操作。
mod_replace(Type, [Value]) -> modify_op()
类型
创建替换修改操作。
modify(Handle, Dn, [ModifyOp]) -> return_value()
类型
修改条目。
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"]) ])
modify_password(Handle, Dn, NewPasswd) -> return_value() | {ok, GenPasswd}
类型
修改用户的密码。看modify_password/4
。
modify_password(Handle, Dn, NewPasswd, OldPasswd) -> return_value() | {ok, GenPasswd}
类型
修改用户的密码。
Dn
。用户修改。应该是“”如果修改请求是针对LDAP会话的用户的。
NewPasswd
。要设置的新密码。应该是“”如果服务器要生成密码。在这种情况下,结果将是{ok, GenPasswd}
。
OldPasswd
。服务器策略有时需要用户更改其密码。如果不需要,请使用modify_password/3
。
modify_dn(Handle, Dn, NewRDN, DeleteOldRDN, NewSupDN) -> return_value()
类型
修改条目的DN。DeleteOldRDN
指示当前的RDN是否应该在后操作之后从属性列表中移除。NewSupDN
是RDN将迁移到的新父项。如果老父母仍然是父母,NewSupDN
应该是“”。
modify_dn(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com ",
"cn=Bill Jr Valentine", true, "")
search(Handle, SearchOptions) -> {ok, #eldap_search_result{}} | {ok, {referral,referrals()}} | {error, Reason}
类型
使用提供的SearchOptions搜索目录。必须提供基础和过滤器选项。默认值:scope是wholeSubtree()
,deref是derefAlways()
,types_only是false
和timeout是0
(意思是无穷大)。
Filter = eldap:substrings("cn", [{any,"V"}]),
search(Handle, [{base, "dc=example, dc=com"}, {filter, Filter}, {attributes, ["cn"]}]),
timeout
选项SearchOptions
用于ldap服务器,而超时输入eldap:open/2
用于搜索操作中的每个单独请求。
baseObject() -> scope()
只搜索基本对象。
singleLevel() -> scope()
只搜索指定的级别,即不递归。
wholeSubtree() -> scope()
搜索整个子树。
neverDerefAliases() -> dereference()
永远不要反驳别名,将别名视为条目。
derefAlways() -> dereference()
始终拒绝别名。
derefInSearching() -> dereference()
只有在搜索时才会出现别名。
derefFindingBaseObj() -> dereference()
仅在查找基地时才提供别名。
present(Type) -> filter()
类型
创建一个筛选器,对属性类型存在进行筛选。
substrings(Type, [SubString]) -> filter()
类型
创建一个筛选子字符串的过滤器。
equalityMatch(Type, Value) -> filter()
类型
创建一个等式过滤器。
greaterOrEqual(Type, Value) -> filter()
类型
创建一个更大或相等的过滤器。
lessOrEqual(Type, Value) -> filter()
类型
创建一个较小或相等的过滤器。
approxMatch(Type, Value) -> filter()
类型
创建一个近似匹配过滤器。
extensibleMatch(MatchValue, OptionalAttrs) -> filter()
类型
创建可扩展的匹配筛选器。例如,
eldap:extensibleMatch("Bar", [{type,"sn"}, {matchingRule,"caseExactMatch"}]))
创建一个过滤器,caseExactMatch
对该属性执行一次sn
并与该值匹配"Bar"
。dnAttributes
is 的默认值false
。
'and'([Filter]) -> filter()
类型
创建一个过滤器,其中所有Filter
一定是真的。
'or'([Filter]) -> filter()
类型
创建一个筛选器,其中至少有一个Filter
一定是真的。
'not'(Filter) -> filter()
类型
否定过滤器。