From 11f42ffa09d15417929b397fb756f00691cd9d31 Mon Sep 17 00:00:00 2001 From: Stephen Gallagher Date: Tue, 29 Mar 2011 15:13:51 -0400 Subject: Fall back to cn if gecos is not available We were not fully compliant with section 5.3 of RFC 2307 which states: An account's GECOS field is preferably determined by a value of the gecos attribute. If no gecos attribute exists, the value of the cn attribute MUST be used. (The existence of the gecos attribute allows information embedded in the GECOS field, such as a user's telephone number, to be returned to the client without overloading the cn attribute. It also accommodates directories where the common name does not contain the user's full name.) --- src/providers/ldap/sdap_async_accounts.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/providers/ldap') diff --git a/src/providers/ldap/sdap_async_accounts.c b/src/providers/ldap/sdap_async_accounts.c index 54416bb1..29a0f9f6 100644 --- a/src/providers/ldap/sdap_async_accounts.c +++ b/src/providers/ldap/sdap_async_accounts.c @@ -91,6 +91,15 @@ static int sdap_save_user(TALLOC_CTX *memctx, if (el->num_values == 0) gecos = NULL; else gecos = (const char *)el->values[0].data; + if (!gecos) { + /* Fall back to the user's full name */ + ret = sysdb_attrs_get_el( + attrs, + opts->user_map[SDAP_AT_USER_FULLNAME].sys_name, &el); + if (ret) goto fail; + if (el->num_values > 0) gecos = (const char *)el->values[0].data; + } + ret = sysdb_attrs_get_el(attrs, opts->user_map[SDAP_AT_USER_HOME].sys_name, &el); if (ret) goto fail; -- cgit