summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2011-03-29 15:13:51 -0400
committerStephen Gallagher <sgallagh@redhat.com>2011-03-30 12:34:52 -0400
commitbe0546bf88de10592b470d2948c8205db7664f6f (patch)
tree556397499d98d559c37293fbc0a285d08d1d4d09
parent036933b5ba6178896801605791be592a5b40d55b (diff)
downloadsssd-1.5.1-23.el5.tar.gz
sssd-1.5.1-23.el5.tar.xz
sssd-1.5.1-23.el5.zip
Fall back to cn if gecos is not availablesssd-1.5.1-23.el5
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.)
-rw-r--r--src/providers/ldap/sdap_async_accounts.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/providers/ldap/sdap_async_accounts.c b/src/providers/ldap/sdap_async_accounts.c
index 54416bb12..29a0f9f64 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;