use ldap3::result::Result;
use ldap3::{LdapConn, Scope, SearchEntry};
const TEST_RDN: &str = "uid=test";
const NEXT_RDN: &str = "uid=next";
fn main() -> Result<()> {
let mut ldap = LdapConn::new("ldap://localhost:2389")?;
ldap.simple_bind("cn=Manager,dc=example,dc=org", "secret")?
.success()?;
let (rs, _res) = ldap
.search(
"ou=People,dc=example,dc=org",
Scope::OneLevel,
"(|(uid=test)(uid=next))",
vec!["uid"],
)?
.success()?;
let sr = SearchEntry::construct(rs.into_iter().next().expect("entry"));
let uid = &sr.attrs["uid"][0];
let (cur_rdn, new_rdn) = match uid.as_ref() {
"test" => (TEST_RDN, NEXT_RDN),
"next" => (NEXT_RDN, TEST_RDN),
_ => panic!("unexpected uid"),
};
let dn = format!("{},ou=People,dc=example,dc=org", cur_rdn);
let res = ldap.modifydn(&dn, new_rdn, true, None)?.success()?;
println!("{:?}", res);
Ok(ldap.unbind()?)
}