非常教程

Erlang 20参考手册

eldap

eldap

模块

eldap

模块摘要

LDAP客户端

描述

该模块为轻型目录访问协议(LDAP)提供客户端API。

参考资料:

  • RFC 4510-RFC 4519
  • RFC 2830

以上出版物可以在这里找到IETF

数据类型

在此模块中多次使用的类型定义:

handle()

连接手柄

attribute() =

{Type = string(), Values=[string()]}

modify_op()

mod_add/2mod_delete/2mod_replace/2

scope()

baseObject/0singleLevel/0wholeSubtree/0

dereference()

neverDerefAliases/0derefInSearching/0derefFindingBaseObj/0derefAlways/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套接字选项被接受除activebinarydeliverlistmodepacket

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"dnAttributesis 的默认值false

'and'([Filter]) -> filter()

类型

创建一个过滤器,其中所有Filter一定是真的。

'or'([Filter]) -> filter()

类型

创建一个筛选器,其中至少有一个Filter一定是真的。

'not'(Filter) -> filter()

类型

否定过滤器。

eldap
eldap 详细