On Mon, Feb 25, 2013 at 12:29:36PM +0100, Jan Engelhardt wrote:
I have here a LDAP user entry which has this attribute
loginAllowedTimeMap::
AAAAAAAAAP///38AAP///38AAP///38AAP///38AAP///38AAAAAAAAA
In the function sysdb_attrs_add_string(), called from
sdap_attrs_add_ldap_attr(), strlen() is called on this blob, which is
the wrong thing to do. The result of strlen is then used to populate
the .v_length member of a struct ldb_val - and this will set it to
zero in this case. (There is also the problem that there may not be
a '\0' at all in the blob.)
Subsequently, .v_length being 0 makes ldb_modify(), called from
sysdb_set_entry_attr(), return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX. End
result is that users do not get stored in the sysdb, and programs like
`id` or `getent ...` show incomplete information.
As far as involved people and I have observed, the problem is not
present in sssd-1.5.11. AFAICS, on a source level, sssd-1.5.11 does
not have the "sdap_attrs_add_ldap_attr" function, so that may explain
things, and the problem might in fact be classified as regression.
Ack, but I will also squash in the attached one-liner.