示例#1
0
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);
}
示例#2
0
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);
}