int ldap_create_page_control(LDAP *ld, unsigned int pagesize, struct berval *cookie, char isCritical, LDAPControl **output) { BerElement *ber; int rc; if (NULL == ld || NULL == output) return (LDAP_PARAM_ERROR); if ((ber = ber_alloc_t(LBER_USE_DER)) == NULLBER){ return (LDAP_NO_MEMORY); } if (ber_printf(ber, "{io}", pagesize, (cookie && cookie->bv_val) ? cookie->bv_val : "", (cookie && cookie->bv_val) ? cookie->bv_len : 0) == LBER_ERROR) { ber_free(ber, 1); return (LDAP_ENCODING_ERROR); } rc = ldap_build_control(LDAP_CONTROL_SIMPLE_PAGE, ber, 1, isCritical, output); ld->ld_errno = rc; return (rc); }
int ldap_create_virtuallist_control(LDAP *ld, LDAPVirtualList *ldvlistp, LDAPControl **ctrlp) { BerElement *ber; int rc; if (NULL == ld) return (LDAP_PARAM_ERROR); if (NULL == ctrlp || NULL == ldvlistp) return (LDAP_PARAM_ERROR); if ((ber = alloc_ber_with_options(ld)) == NULLBER) { ld->ld_errno = LDAP_NO_MEMORY; return (LDAP_NO_MEMORY); } if (ber_printf(ber, "{ii", ldvlistp->ldvlist_before_count, ldvlistp->ldvlist_after_count) == -1) { ld->ld_errno = LDAP_ENCODING_ERROR; ber_free(ber, 1); return (LDAP_ENCODING_ERROR); } if (NULL == ldvlistp->ldvlist_attrvalue) { if (ber_printf(ber, "t{ii}}", LDAP_TAG_VLV_BY_INDEX, ldvlistp->ldvlist_index, ldvlistp->ldvlist_size) == -1) { ld->ld_errno = LDAP_ENCODING_ERROR; ber_free(ber, 1); return (LDAP_ENCODING_ERROR); } } else { if (ber_printf(ber, "to}", LDAP_TAG_VLV_BY_VALUE, ldvlistp->ldvlist_attrvalue, strlen(ldvlistp->ldvlist_attrvalue)) == -1) { ld->ld_errno = LDAP_ENCODING_ERROR; ber_free(ber, 1); return (LDAP_ENCODING_ERROR); } } rc = ldap_build_control(LDAP_CONTROL_VLVREQUEST, ber, 1, 1, ctrlp); ld->ld_errno = rc; return (rc); }