diff --git a/changelogs/fragments/11990-ldap-attrs-case-insensitive-attr-lookup.yml b/changelogs/fragments/11990-ldap-attrs-case-insensitive-attr-lookup.yml new file mode 100644 index 0000000000..679b94c0af --- /dev/null +++ b/changelogs/fragments/11990-ldap-attrs-case-insensitive-attr-lookup.yml @@ -0,0 +1,2 @@ +bugfixes: + - ldap_attrs - fix ``state=exact`` incorrectly issuing ``MOD_ADD`` instead of ``MOD_REPLACE`` for attributes returned by the server with different casing (https://github.com/ansible-collections/community.general/issues/1624, https://github.com/ansible-collections/community.general/pull/11990). diff --git a/plugins/modules/ldap_attrs.py b/plugins/modules/ldap_attrs.py index 31c4b62090..a4cdf43fc2 100644 --- a/plugins/modules/ldap_attrs.py +++ b/plugins/modules/ldap_attrs.py @@ -347,7 +347,8 @@ class LdapAttrs(LdapGeneric): results = self.connection.search_s(self.dn, ldap.SCOPE_BASE, attrlist=[name]) except ldap.LDAPError as e: self.fail(f"Cannot search for attribute {name}", e) - self._cached_values[lc_name] = results[0][1].get(name, []) + attrs = results[0][1] + self._cached_values[lc_name] = next((v for k, v in attrs.items() if k.lower() == lc_name), []) return self._cached_values[lc_name] def _is_value_absent(self, name, value):