Token *oath_token_from_entry(Token *token, Slapi_Entry *e) { if (e != NULL && token != NULL) { Slapi_Attr *seed; token->serial = slapi_entry_attr_get_charptr(e, "tokenSerial"); token->pin = slapi_entry_attr_get_charptr(e, "tokenPIN"); token->counter = slapi_entry_attr_get_long(e, "tokenCounter"); slapi_entry_attr_find(e, "tokenSeed", &seed); if (seed != NULL) { struct berval *bval; Slapi_Value *sval; slapi_attr_first_value(seed, &sval); bval = slapi_value_get_berval(sval); token->seed = ber_bvdup(bval); } } return token; }
/* * vals - The existing values. * addval - The value to add. * nvals - The number of existing values. * maxvals - The number of elements in the existing values array. */ void bervalarray_add_berval_fast( struct berval ***vals, const struct berval *addval, int nvals, int *maxvals ) { int need = nvals + 2; if(need>*maxvals) { if (*maxvals==0) { *maxvals = 2; } while ( *maxvals < need ) { *maxvals *= 2; } if(*vals==NULL) { *vals = (struct berval **) slapi_ch_malloc( *maxvals * sizeof(struct berval *)); } else { *vals = (struct berval **) slapi_ch_realloc( (char *) *vals, *maxvals * sizeof(struct berval *)); } } (*vals)[nvals] = ber_bvdup( (struct berval *)addval ); (*vals)[nvals+1] = NULL; }
/*********************************************************************** * ber_bvdup (WLDAP32.@) * * Copy a berval structure. * * PARAMS * berval [I] Pointer to the berval structure to be copied. * * RETURNS * Success: Pointer to a copy of the berval structure. * Failure: NULL * * NOTES * Free the copy with ber_bvfree. */ BERVAL * CDECL WLDAP32_ber_bvdup( BERVAL *berval ) { #ifdef HAVE_LDAP return ber_bvdup( berval ); #else return NULL; #endif }
struct berval* slapi_ch_bvdup (const struct berval* v) { struct berval* newberval = ber_bvdup ((struct berval *)v); if (newberval == NULL) { int oserr = errno; oom_occurred(); slapi_log_error( SLAPI_LOG_FATAL, SLAPD_MODULE, "ber_bvdup of %lu bytes failed; OS error %d (%s)%s\n", (unsigned long)v->bv_len, oserr, slapd_system_strerror( oserr ), oom_advice ); exit( 1 ); } return newberval; }
/* * JCM SLOW FUNCTION * * Use only if you absolutley need to... * This function mostly exists to map from the old slapi berval * based interface to the new Slapi_Value based interfaces. */ int valuearray_get_bervalarray(Slapi_Value **cvals,struct berval ***bvals) { int i,n; n= valuearray_count(cvals); if (0 == n) { *bvals = NULL; } else { *bvals = (struct berval **)slapi_ch_malloc((n + 1) * sizeof(struct berval *)); for(i=0;i<n;i++) { (*bvals)[i] = ber_bvdup((struct berval *)slapi_value_get_berval(cvals[i])); } (*bvals)[i] = NULL; } return(0); }
static int vc_create_response( void *conn, int resultCode, const char *diagnosticMessage, struct berval *servercred, struct berval *authzid, LDAPControl **ctrls, struct berval **val ) { BerElementBuffer berbuf; BerElement *ber = (BerElement *)&berbuf; struct berval bv; int rc; assert( val != NULL ); *val = NULL; ber_init2( ber, NULL, LBER_USE_DER ); (void)ber_printf( ber, "{is" /*}*/ , resultCode, diagnosticMessage ? diagnosticMessage : "" ); if ( conn ) { struct berval cookie; cookie.bv_len = sizeof( conn ); cookie.bv_val = (char *)&conn; (void)ber_printf( ber, "tO", 0, LDAP_TAG_EXOP_VERIFY_CREDENTIALS_COOKIE, &cookie ); } if ( servercred ) { ber_printf( ber, "tO", LDAP_TAG_EXOP_VERIFY_CREDENTIALS_SCREDS, servercred ); } #if 0 if ( authzid ) { ber_printf( ber, "tO", LDAP_TAG_EXOP_VERIFY_CREDENTIALS_AUTHZID, authzid ); } #endif if ( ctrls ) { int c; rc = ber_printf( ber, "t{"/*}*/, LDAP_TAG_EXOP_VERIFY_CREDENTIALS_CONTROLS ); if ( rc == -1 ) goto done; for ( c = 0; ctrls[c] != NULL; c++ ) { rc = ber_printf( ber, "{s" /*}*/, ctrls[c]->ldctl_oid ); if ( ctrls[c]->ldctl_iscritical ) { rc = ber_printf( ber, "b", (ber_int_t)ctrls[c]->ldctl_iscritical ) ; if ( rc == -1 ) goto done; } if ( ctrls[c]->ldctl_value.bv_val != NULL ) { rc = ber_printf( ber, "O", &ctrls[c]->ldctl_value ); if( rc == -1 ) goto done; } rc = ber_printf( ber, /*{*/"N}" ); if ( rc == -1 ) goto done; } rc = ber_printf( ber, /*{*/"N}" ); if ( rc == -1 ) goto done; } ber_printf( ber, /*{*/ "}" ); rc = ber_flatten2( ber, &bv, 0 ); *val = ber_bvdup( &bv ); done:; ber_free_buf( ber ); return rc; }