3个版本
0.11.5 | 2024年4月25日 |
---|---|
0.11.4 | 2024年4月25日 |
0.11.3 | 2024年4月25日 |
#198 in 认证
245KB
4.5K SLoC
LDAP客户端库
使用Tokio堆栈的纯Rust LDAP客户端库。
版本说明
0.11分支进行了延迟但重要的依赖升级:在lber
支持库和ldap3
本身中的nom
解析器组合器crate。这应该是一个对用户不可见的实现细节,解析器有一系列测试,但出于谨慎考虑,版本仍然被提升。0.10.6和0.11.3之间没有功能差异。
从0.10.3版本开始,如果编译时带有gssapi功能,则支持跨平台Kerberos/GSSAPI。此功能启用在Active Directory域中使用集成Windows身份验证。有关编译时要求的详细信息,请参阅此README中的功能描述。
0.11分支正在积极开发。错误修复将被移植到0.10.x。因此,0.9分支已被弃用。
文档
API参考
对于仍然在LDAP世界中寻找方向的人来说,有一个LDAP简介。
其他备注
该库仅作为客户端。不能用它制作LDAP服务器或代理。它仅支持通过面向连接的传输的协议第3版。
没有内置的连接池、自动回退或重新连接的支持。
使用方法
将其添加到您的Cargo.toml
[dependencies.ldap3]
version = "0.11.3"
该库可以同步或异步使用。目标是提供两种风格的调用接口基本相同,根据I/O的性质,必要的差异在交互和返回值中。
示例
以下两个示例执行完全相同的操作,应产生相同的结果。它们应在crate源代码的data
子目录中的示例服务器上运行。其他期望相同服务器设置的示例程序可以在examples
子目录中找到。
同步搜索
use ldap3::{LdapConn, Scope, SearchEntry};
use ldap3::result::Result;
fn main() -> Result<()> {
let mut ldap = LdapConn::new("ldap://127.0.0.1:2389")?;
let (rs, _res) = ldap.search(
"ou=Places,dc=example,dc=org",
Scope::Subtree,
"(&(objectClass=locality)(l=ma*))",
vec!["l"]
)?.success()?;
for entry in rs {
println!("{:?}", SearchEntry::construct(entry));
}
Ok(ldap.unbind()?)
}
异步搜索
use ldap3::{LdapConnAsync, Scope, SearchEntry};
use ldap3::result::Result;
#[tokio::main]
async fn main() -> Result<()> {
let (conn, mut ldap) = LdapConnAsync::new("ldap://127.0.0.1:2389").await?;
ldap3::drive!(conn);
let (rs, _res) = ldap.search(
"ou=Places,dc=example,dc=org",
Scope::Subtree,
"(&(objectClass=locality)(l=ma*))",
vec!["l"]
).await?.success()?;
for entry in rs {
println!("{:?}", SearchEntry::construct(entry));
}
Ok(ldap.unbind().await?)
}
编译时功能
以下功能在编译时可用
-
sync(默认启用):同步API支持。
-
gssapi(默认禁用):Kerberos/GSSAPI支持。在Windows上,使用系统支持的二进制包和SDK库。在其他地方,此功能需要Clang及其开发库(用于
bindgen
),以及Kerberos开发库。在Debian/Ubuntu上,这意味着需要安装clang-N
、libclang-N-dev
和libkrb5-dev
。从这些要求中可以看出,GSSAPI支持使用FFI调用C库;您应考虑这一事实的安全影响。有关用法说明和注意事项,请参阅API参考中
Ldap::sasl_gssapi_bind()
的文档。 -
tls(默认启用):TLS支持,由
native-tls
二进制包提供支持,使用特定平台的TLS后端。这是tls-native的别名。 -
tls-rustls(默认禁用):TLS支持,由Rustls库提供支持。
如果没有任何特性,则只能使用普通的TCP连接(在类Unix平台上为Unix域套接字)。对于TLS支持,tls和tls-rustls是互斥的:选择两者都会导致编译时错误。
许可证
根据您的选择,许可如下:
- Apache License,版本2.0(《LICENSE-APACHE》),或
- MIT许可证(《LICENSE-MIT》)
。
依赖关系
~6–38MB
~635K SLoC