summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ypldap/ldapclient.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/ypldap/ldapclient.c')
-rw-r--r--usr.sbin/ypldap/ldapclient.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/usr.sbin/ypldap/ldapclient.c b/usr.sbin/ypldap/ldapclient.c
index 981f610d109..82b640ce19c 100644
--- a/usr.sbin/ypldap/ldapclient.c
+++ b/usr.sbin/ypldap/ldapclient.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ldapclient.c,v 1.41 2017/12/07 05:09:27 zhuk Exp $ */
+/* $OpenBSD: ldapclient.c,v 1.42 2018/11/27 12:06:39 martijn Exp $ */
/*
* Copyright (c) 2008 Alexander Schrijver <aschrijver@openbsd.org>
@@ -449,8 +449,9 @@ int
client_build_req(struct idm *idm, struct idm_req *ir, struct aldap_message *m,
int min_attr, int max_attr)
{
- char **ldap_attrs;
- int i, k;
+ struct aldap_stringset *ldap_attrs;
+ int i;
+ size_t k;
memset(ir, 0, sizeof(*ir));
for (i = min_attr; i < max_attr; i++) {
@@ -473,12 +474,13 @@ client_build_req(struct idm *idm, struct idm_req *ir, struct aldap_message *m,
}
} else if (idm->idm_list & F_LIST(i)) {
aldap_match_attr(m, idm->idm_attrs[i], &ldap_attrs);
- for (k = 0; k >= 0 && ldap_attrs && ldap_attrs[k] != NULL; k++) {
+ for (k = 0; k >= 0 && ldap_attrs && k < ldap_attrs->len; k++) {
/* XXX: Fail when attributes have illegal characters e.g. ',' */
- if (strlcat(ir->ir_line, ldap_attrs[k],
+ if (strlcat(ir->ir_line,
+ ldap_attrs->str[k].ostr_val,
sizeof(ir->ir_line)) >= sizeof(ir->ir_line))
continue;
- if (ldap_attrs[k+1] != NULL)
+ if (k + 1 < ldap_attrs->len)
if (strlcat(ir->ir_line, ",",
sizeof(ir->ir_line))
>= sizeof(ir->ir_line)) {
@@ -490,19 +492,19 @@ client_build_req(struct idm *idm, struct idm_req *ir, struct aldap_message *m,
} else {
if (aldap_match_attr(m, idm->idm_attrs[i], &ldap_attrs) == -1)
return (-1);
- if (ldap_attrs[0] == NULL)
- return (-1);
- if (strlcat(ir->ir_line, ldap_attrs[0],
+ if (strlcat(ir->ir_line, ldap_attrs->str[0].ostr_val,
sizeof(ir->ir_line)) >= sizeof(ir->ir_line)) {
aldap_free_attr(ldap_attrs);
return (-1);
}
if (i == ATTR_UID) {
ir->ir_key.ik_uid = strtonum(
- ldap_attrs[0], 0, UID_MAX, NULL);
+ ldap_attrs->str[0].ostr_val, 0, UID_MAX,
+ NULL);
} else if (i == ATTR_GR_GID) {
ir->ir_key.ik_uid = strtonum(
- ldap_attrs[0], 0, GID_MAX, NULL);
+ ldap_attrs->str[0].ostr_val, 0, GID_MAX,
+ NULL);
}
aldap_free_attr(ldap_attrs);
}