summaryrefslogtreecommitdiffstats
path: root/src/responder/nss/nsssrv_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/responder/nss/nsssrv_cmd.c')
-rw-r--r--src/responder/nss/nsssrv_cmd.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c
index 387408a7..f5e8f783 100644
--- a/src/responder/nss/nsssrv_cmd.c
+++ b/src/responder/nss/nsssrv_cmd.c
@@ -291,6 +291,8 @@ static int fill_pwent(struct sss_packet *packet,
struct sized_string shell;
struct sized_string pwfield;
struct sized_string fullname;
+ struct sized_string alias;
+ struct sized_string *aliasptr;
uint32_t uid;
uint32_t gid;
size_t rsize, rp, blen;
@@ -355,6 +357,18 @@ static int fill_pwent(struct sss_packet *packet,
}
to_sized_string(&name, tmpstr);
+ if (dom->alias_attr) {
+ tmpstr = ldb_msg_find_attr_as_string(msg, dom->alias_attr, NULL);
+ if (!tmpstr) {
+ aliasptr = NULL;
+ } else {
+ to_sized_string(&alias, tmpstr);
+ aliasptr = &alias;
+ }
+ } else {
+ aliasptr = NULL;
+ }
+
tmpstr = ldb_msg_find_attr_as_string(msg, SYSDB_GECOS, NULL);
if (!tmpstr) {
to_sized_string(&gecos, "");
@@ -433,7 +447,7 @@ static int fill_pwent(struct sss_packet *packet,
if (pw_mmap_cache && nctx->pwd_mc_ctx) {
ret = sss_mmap_cache_pw_store(&nctx->pwd_mc_ctx,
- &fullname, NULL, &pwfield,
+ &fullname, aliasptr, &pwfield,
uid, gid,
&gecos, &homedir, &shell);
if (ret != EOK && ret != ENOMEM) {
@@ -2013,6 +2027,8 @@ static int fill_grent(struct sss_packet *packet,
struct sized_string name;
struct sized_string pwfield;
struct sized_string fullname;
+ struct sized_string alias;
+ struct sized_string *aliasptr;
size_t delim;
size_t dom_len;
int i = 0;
@@ -2090,6 +2106,18 @@ static int fill_grent(struct sss_packet *packet,
}
to_sized_string(&name, tmpstr);
+ if (dom->alias_attr) {
+ tmpstr = ldb_msg_find_attr_as_string(msg, dom->alias_attr, NULL);
+ if (!tmpstr) {
+ aliasptr = NULL;
+ } else {
+ to_sized_string(&alias, tmpstr);
+ aliasptr = &alias;
+ }
+ } else {
+ aliasptr = NULL;
+ }
+
/* fill in gid and name and set pointer for number of members */
rsize = STRS_ROFFSET + name.len + pwfield.len; /* name\0x\0 */
if (add_domain) rsize += delim + dom_len;
@@ -2186,7 +2214,7 @@ static int fill_grent(struct sss_packet *packet,
* where body used to be, not where it is */
to_sized_string(&fullname, (const char *)&body[rzero+STRS_ROFFSET]);
ret = sss_mmap_cache_gr_store(&nctx->grp_mc_ctx,
- &fullname, NULL, &pwfield,
+ &fullname, aliasptr, &pwfield,
gid, memnum,
(char *)&body[rzero] + STRS_ROFFSET +
fullname.len + pwfield.len,