On Tue, Mar 17, 2015 at 09:59:03AM +0100, Lukas Slebodnik wrote:
ehlo,
at first I thought it is related to ticket "#2576"
but after simplification of reproducer I found out it just looks
bad in log file.
ldb failed to add attribute with 0 values to ldb entry, but it would not have
any effect.
BTW The best would be to immediately skip request. I'm not sure how to do it
with plain ldb.
How to reproduce?
* import attached ldif
* getent group "Escalation"
* sss_cache -E
Thank you, before the patch, I got the error, after the request I no
longer see the error and the ghost attribute is still in the cache. The
code also looks good to me.
* getent group "Escalation"
BTW you can see more warnings if nested hierarchy is deeper and each
group directly contains the same user.
LS
From 78d4f1f3ae5d45819b31ba500549b717182231ad Mon Sep 17 00:00:00
2001
From: Lukas Slebodnik <lslebodn(a)redhat.com>
Date: Wed, 11 Mar 2015 18:11:13 +0100
Subject: [PATCH] memberof: Do not create request with 0 attribute values
[sysdb_set_entry_attr] (0x0080): ldb_modify failed: [Constraint violation](19)
[attribute 'ghost': attribute on
'name=Escalation,cn=groups,cn=LDAP,cn=sysdb'
specified, but with 0 values (illegal)]
[sysdb_error_to_errno] (0x0020): LDB returned unexpected error:
[Constraint violation]
[sysdb_set_entry_attr] (0x0040): Error: 14 (Bad address)
[sdap_store_group_with_gid] (0x0040): Could not store group Escalation
[sdap_save_group] (0x0080): Could not store group with GID: [Bad address]
[sdap_save_group] (0x0080): Failed to save group [Escalation]: [Bad address]
[sdap_save_groups] (0x0040): Failed to store group 1. Ignoring.
---
src/ldb_modules/memberof.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/ldb_modules/memberof.c b/src/ldb_modules/memberof.c
index c26a13bb94bafe62299572565cab4b53c77f3d94..1fce91cc1b4f472a09f8ce5b68f2c35c601dd573
100644
--- a/src/ldb_modules/memberof.c
+++ b/src/ldb_modules/memberof.c
@@ -3303,6 +3303,12 @@ static int mbof_inherited_mod(struct mbof_mod_ctx *mod_ctx)
}
el->num_values = j;
+ if (el->num_values == 0) {
+ /* nothing to do */
+ /* We cannot modifiy elment which has 0 values */
I will just fix this comment before pushing. Otherwise ACK.
+ msg->num_elements = 0;
+ }
+
mod_ctx->igh->mod_msg = msg;
mod_ctx->igh->el = el;
--
2.3.2