diff options
author | mj162486 <none@none> | 2005-11-04 01:33:16 -0800 |
---|---|---|
committer | mj162486 <none@none> | 2005-11-04 01:33:16 -0800 |
commit | 84ad75de88d379e9c62b994a68b6ce85faa90431 (patch) | |
tree | 34d78e869236011374eab8d17da1f6f881082461 /usr/src/cmd/ldap | |
parent | c09311948ee0aeed5e1af56d9205c74a9308b481 (diff) | |
download | illumos-gate-84ad75de88d379e9c62b994a68b6ce85faa90431.tar.gz |
4760450 genent_group() should add only non-empty memberUid
Diffstat (limited to 'usr/src/cmd/ldap')
-rw-r--r-- | usr/src/cmd/ldap/ns_ldap/ldapaddent.c | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/usr/src/cmd/ldap/ns_ldap/ldapaddent.c b/usr/src/cmd/ldap/ns_ldap/ldapaddent.c index 7ee7128d56..e1dd45d89d 100644 --- a/usr/src/cmd/ldap/ns_ldap/ldapaddent.c +++ b/usr/src/cmd/ldap/ns_ldap/ldapaddent.c @@ -1649,7 +1649,6 @@ genent_group(char *line, int (*cback)()) entry_col ecol[5]; struct group data; - char *memb; int ctr = 0; int retval = 1; int rc = GENENT_OK; @@ -1737,29 +1736,36 @@ genent_group(char *line, int (*cback)()) data.gr_mem = NULL; + /* Compute maximum amount of members */ + s = t; + while (s = strchr(s, ',')) { + s++; + ctr++; + } + + /* Allocate memory for all members */ + data.gr_mem = calloc(ctr + 2, sizeof (char **)); + if (data.gr_mem == NULL) { + (void) fprintf(stderr, gettext("out of memory\n")); + exit(1); + } + + ctr = 0; while (s = strchr(t, ',')) { *s++ = 0; ecol[3].ec_value.ec_value_val = t; t = s; - ctr++; - memb = strdup(ecol[3].ec_value.ec_value_val); - if ((data.gr_mem = (char **)realloc(data.gr_mem, - ctr * sizeof (char **))) == NULL) { - (void) fprintf(stderr, gettext("out of memory\n")); - exit(1); - } - data.gr_mem[ctr-1] = memb; + /* Send to server only non empty member names */ + if (strlen(ecol[3].ec_value.ec_value_val) != 0) + data.gr_mem[ctr++] = ecol[3].ec_value.ec_value_val; } - /* End the list of all the aliases by NULL */ - if ((data.gr_mem = (char **)realloc(data.gr_mem, - (ctr + 2) * sizeof (char **))) == NULL) { - (void) fprintf(stderr, gettext("out of memory\n")); - exit(1); - } - data.gr_mem[ctr] = t; - data.gr_mem[ctr+1] = NULL; + /* Send to server only non empty member names */ + if (strlen(t) != 0) + data.gr_mem[ctr++] = t; + + /* Array of members completed, finished by NULL, see calloc() */ if (flags & F_VERBOSE) (void) fprintf(stdout, @@ -3985,7 +3991,8 @@ main(int argc, char **argv) (void) fprintf(stdout, gettext("%d entries added\n"), nent_add); } - exit(exit_val); + /* exit() -> return for make lint */ + return (exit_val); } |