ldap-sync: allow to use attrs more than once ()

This commit is contained in:
Dustin Frisch 2024-03-25 10:41:24 +01:00 committed by GitHub
parent acf05ca924
commit e5702909d0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 22 additions and 13 deletions
Cargo.lockCargo.toml
tools/iam_migrations/ldap/src

4
Cargo.lock generated
View file

@ -3450,9 +3450,9 @@ dependencies = [
[[package]]
name = "ldap3_client"
version = "0.4.3"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f294d8b0c3a0906caca55d2004f1192e174b895afa3f0f177ead05f314544d2"
checksum = "854e3458060e43858cb5220afc6a04db414be3de41d98dc29b7f628bdb7fc02d"
dependencies = [
"base64 0.21.7",
"base64urlsafedata",

View file

@ -149,7 +149,7 @@ js-sys = "^0.3.69"
kanidmd_web_ui_shared = { path = "./server/web_ui/shared" }
# REMOVE this
lazy_static = "^1.4.0"
ldap3_client = "^0.4.3"
ldap3_client = "^0.4.4"
ldap3_proto = { version = "^0.4.3", features = ["serde"] }
libc = "^0.2.153"

View file

@ -513,29 +513,31 @@ fn ldap_to_scim_entry(
name
} else {
entry
.remove_ava_single(&sync_config.person_attr_user_name)
.get_ava_single(&sync_config.person_attr_user_name)
.ok_or_else(|| {
error!(
"Missing required attribute {} (person_attr_user_name)",
sync_config.person_attr_user_name
);
})?
.to_owned()
};
let display_name = entry
.remove_ava_single(&sync_config.person_attr_display_name)
.get_ava_single(&sync_config.person_attr_display_name)
.ok_or_else(|| {
error!(
"Missing required attribute {} (person_attr_display_name)",
sync_config.person_attr_display_name
);
})?;
})?
.to_owned();
let gidnumber = if let Some(number) = entry_config.map_gidnumber {
Some(number)
} else {
entry
.remove_ava_single(&sync_config.person_attr_gidnumber)
.get_ava_single(&sync_config.person_attr_gidnumber)
.map(|gid| {
u32::from_str(&gid).map_err(|_| {
error!(
@ -547,7 +549,9 @@ fn ldap_to_scim_entry(
.transpose()?
};
let password_import = entry.remove_ava_single(&sync_config.person_attr_password);
let password_import = entry
.get_ava_single(&sync_config.person_attr_password)
.map(str::to_string);
let password_import = if let Some(pw_prefix) = sync_config.person_password_prefix.as_ref() {
password_import.map(|s| format!("{}{}", pw_prefix, s))
@ -610,7 +614,9 @@ fn ldap_to_scim_entry(
};
let account_valid_from = None;
let login_shell = entry.remove_ava_single(&sync_config.person_attr_login_shell);
let login_shell = entry
.get_ava_single(&sync_config.person_attr_login_shell)
.map(str::to_string);
let external_id = Some(entry.dn);
Ok(Some(
@ -641,18 +647,21 @@ fn ldap_to_scim_entry(
let id = entry_uuid;
let name = entry
.remove_ava_single(&sync_config.group_attr_name)
.get_ava_single(&sync_config.group_attr_name)
.ok_or_else(|| {
error!(
"Missing required attribute {} (group_attr_name)",
sync_config.group_attr_name
);
})?;
})?
.to_owned();
let description = entry.remove_ava_single(&sync_config.group_attr_description);
let description = entry
.get_ava_single(&sync_config.group_attr_description)
.map(str::to_string);
let gidnumber = entry
.remove_ava_single(&sync_config.group_attr_gidnumber)
.get_ava_single(&sync_config.group_attr_gidnumber)
.map(|gid| {
u32::from_str(&gid).map_err(|_| {
error!(