diff options
Diffstat (limited to 'usr.sbin/ypldap/ldapclient.c')
| -rw-r--r-- | usr.sbin/ypldap/ldapclient.c | 24 |
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); } |
