Back to index

openldap  2.4.31
Functions
pagectrl.c File Reference
#include "portable.h"
#include <stdio.h>
#include <ac/stdlib.h>
#include <ac/string.h>
#include <ac/time.h>
#include "ldap-int.h"

Go to the source code of this file.

Functions

int ldap_create_page_control_value (LDAP *ld, ber_int_t pagesize, struct berval *cookie, struct berval *value)
int ldap_create_page_control (LDAP *ld, ber_int_t pagesize, struct berval *cookie, int iscritical, LDAPControl **ctrlp)
int ldap_parse_pageresponse_control (LDAP *ld, LDAPControl *ctrl, ber_int_t *countp, struct berval *cookie)
int ldap_parse_page_control (LDAP *ld, LDAPControl **ctrls, ber_int_t *countp, struct berval **cookiep)

Function Documentation

int ldap_create_page_control ( LDAP *  ld,
ber_int_t  pagesize,
struct berval cookie,
int  iscritical,
LDAPControl **  ctrlp 
)

Definition at line 136 of file pagectrl.c.

{
       struct berval value;

       if ( ctrlp == NULL ) {
              ld->ld_errno = LDAP_PARAM_ERROR;
              return ld->ld_errno;
       }

       ld->ld_errno = ldap_create_page_control_value( ld,
              pagesize, cookie, &value );
       if ( ld->ld_errno == LDAP_SUCCESS ) {
              ld->ld_errno = ldap_control_create( LDAP_CONTROL_PAGEDRESULTS,
                     iscritical, &value, 0, ctrlp );
              if ( ld->ld_errno != LDAP_SUCCESS ) {
                     LDAP_FREE( value.bv_val );
              }
       }

       return ld->ld_errno;
}

Here is the call graph for this function:

int ldap_create_page_control_value ( LDAP *  ld,
ber_int_t  pagesize,
struct berval cookie,
struct berval value 
)

Definition at line 53 of file pagectrl.c.

{
       BerElement    *ber = NULL;
       ber_tag_t     tag;
       struct berval null_cookie = { 0, NULL };

       if ( ld == NULL || value == NULL ||
              pagesize < 1 || pagesize > LDAP_MAXINT )
       {
              if ( ld )
                     ld->ld_errno = LDAP_PARAM_ERROR;
              return LDAP_PARAM_ERROR;
       }

       assert( LDAP_VALID( ld ) );

       value->bv_val = NULL;
       value->bv_len = 0;
       ld->ld_errno = LDAP_SUCCESS;

       if ( cookie == NULL ) {
              cookie = &null_cookie;
       }

       ber = ldap_alloc_ber_with_options( ld );
       if ( ber == NULL ) {
              ld->ld_errno = LDAP_NO_MEMORY;
              return ld->ld_errno;
       }

       tag = ber_printf( ber, "{iO}", pagesize, cookie );
       if ( tag == LBER_ERROR ) {
              ld->ld_errno = LDAP_ENCODING_ERROR;
              goto done;
       }

       if ( ber_flatten2( ber, value, 1 ) == -1 ) {
              ld->ld_errno = LDAP_NO_MEMORY;
       }

done:;
       if ( ber != NULL ) {
              ber_free( ber, 1 );
       }

       return ld->ld_errno;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int ldap_parse_page_control ( LDAP *  ld,
LDAPControl **  ctrls,
ber_int_t *  countp,
struct berval **  cookiep 
)

Definition at line 233 of file pagectrl.c.

{
       LDAPControl *c;
       struct berval cookie;

       if ( cookiep == NULL ) {
              ld->ld_errno = LDAP_PARAM_ERROR;
              return ld->ld_errno;
       }

       if ( ctrls == NULL ) {
              ld->ld_errno =  LDAP_CONTROL_NOT_FOUND;
              return ld->ld_errno;
       }

       c = ldap_control_find( LDAP_CONTROL_PAGEDRESULTS, ctrls, NULL );
       if ( c == NULL ) {
              /* No page control was found. */
              ld->ld_errno = LDAP_CONTROL_NOT_FOUND;
              return ld->ld_errno;
       }

       ld->ld_errno = ldap_parse_pageresponse_control( ld, c, countp, &cookie );
       if ( ld->ld_errno == LDAP_SUCCESS ) {
              *cookiep = LDAP_MALLOC( sizeof( struct berval ) );
              if ( *cookiep == NULL ) {
                     ld->ld_errno = LDAP_NO_MEMORY;
              } else {
                     **cookiep = cookie;
              }
       }

       return ld->ld_errno;
}

Here is the call graph for this function:

int ldap_parse_pageresponse_control ( LDAP *  ld,
LDAPControl ctrl,
ber_int_t *  countp,
struct berval cookie 
)

Definition at line 178 of file pagectrl.c.

{
       BerElement *ber;
       ber_tag_t tag;
       ber_int_t count;

       if ( ld == NULL || ctrl == NULL || cookie == NULL ) {
              if ( ld )
                     ld->ld_errno = LDAP_PARAM_ERROR;
              return LDAP_PARAM_ERROR;
       }

       /* Create a BerElement from the berval returned in the control. */
       ber = ber_init( &ctrl->ldctl_value );

       if ( ber == NULL ) {
              ld->ld_errno = LDAP_NO_MEMORY;
              return ld->ld_errno;
       }

       /* Extract the count and cookie from the control. */
       tag = ber_scanf( ber, "{io}", &count, cookie );
        ber_free( ber, 1 );

       if ( tag == LBER_ERROR ) {
              ld->ld_errno = LDAP_DECODING_ERROR;
       } else {
              ld->ld_errno = LDAP_SUCCESS;

              if ( countp != NULL ) {
                     *countp = (unsigned long)count;
              }
       }

       return ld->ld_errno;
}

Here is the call graph for this function:

Here is the caller graph for this function: