3个版本

0.11.5 2024年4月25日
0.11.4 2024年4月25日
0.11.3 2024年4月25日

#198 in 认证

MIT/Apache

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-Nlibclang-N-devlibkrb5-dev。从这些要求中可以看出,GSSAPI支持使用FFI调用C库;您应考虑这一事实的安全影响。

    有关用法说明和注意事项,请参阅API参考中Ldap::sasl_gssapi_bind()的文档。

  • tls(默认启用):TLS支持,由native-tls二进制包提供支持,使用特定平台的TLS后端。这是tls-native的别名。

  • tls-rustls(默认禁用):TLS支持,由Rustls库提供支持。

如果没有任何特性,则只能使用普通的TCP连接(在类Unix平台上为Unix域套接字)。对于TLS支持,tlstls-rustls是互斥的:选择两者都会导致编译时错误。

许可证

根据您的选择,许可如下:

依赖关系

~6–38MB
~635K SLoC