Changed LDAP_AVA struct berval * to struct berval.

This commit is contained in:
Howard Chu 2001-12-29 10:35:24 +00:00
parent 3930a390e0
commit a191392e2e
3 changed files with 137 additions and 161 deletions

View file

@ -1164,8 +1164,8 @@ ldap_get_dn LDAP_P((
LDAPMessage *entry ));
typedef struct ldap_ava {
struct berval *la_attr;
struct berval *la_value;
struct berval la_attr;
struct berval la_value;
unsigned la_flags;
#define LDAP_AVA_STRING 0x0000U
#define LDAP_AVA_BINARY 0x0001U

View file

@ -32,15 +32,15 @@ static int dn2dn( const char *dnin, unsigned fin, char **dnout, unsigned fout );
extern char * parse_numericoid(const char **sp, int *code, const int flags);
/* parsing/printing routines */
static int str2strval( const char *str, struct berval **val,
static int str2strval( const char *str, struct berval *val,
const char **next, unsigned flags, unsigned *retFlags );
static int DCE2strval( const char *str, struct berval **val,
static int DCE2strval( const char *str, struct berval *val,
const char **next, unsigned flags );
static int IA52strval( const char *str, struct berval **val,
static int IA52strval( const char *str, struct berval *val,
const char **next, unsigned flags );
static int quotedIA52strval( const char *str, struct berval **val,
static int quotedIA52strval( const char *str, struct berval *val,
const char **next, unsigned flags );
static int hexstr2binval( const char *str, struct berval **val,
static int hexstr2binval( const char *str, struct berval *val,
const char **next, unsigned flags );
static int hexstr2bin( const char *str, char *c );
static int byte2hexpair( const char *val, char *pair );
@ -201,22 +201,22 @@ ldap_explode_rdn( LDAP_CONST char *rdn, int notypes )
LDAPAVA *ava = tmpRDN[ iAVA ][ 0 ];
if ( ava->la_flags == LDAP_AVA_BINARY ) {
vl = 1 + 2 * ava->la_value->bv_len;
vl = 1 + 2 * ava->la_value.bv_len;
} else {
if ( strval2strlen( ava->la_value,
if ( strval2strlen( &ava->la_value,
ava->la_flags, &vl ) ) {
goto error_return;
}
}
if ( !notypes ) {
al = ava->la_attr->bv_len;
l = vl + ava->la_attr->bv_len + 1;
al = ava->la_attr.bv_len;
l = vl + ava->la_attr.bv_len + 1;
str = LDAP_MALLOC( l + 1 );
AC_MEMCPY( str, ava->la_attr->bv_val,
ava->la_attr->bv_len );
AC_MEMCPY( str, ava->la_attr.bv_val,
ava->la_attr.bv_len );
str[ al++ ] = '=';
} else {
@ -226,12 +226,12 @@ ldap_explode_rdn( LDAP_CONST char *rdn, int notypes )
if ( ava->la_flags == LDAP_AVA_BINARY ) {
str[ al++ ] = '#';
if ( binval2hexstr( ava->la_value, &str[ al ] ) ) {
if ( binval2hexstr( &ava->la_value, &str[ al ] ) ) {
goto error_return;
}
} else {
if ( strval2str( ava->la_value, &str[ al ],
if ( strval2str( &ava->la_value, &str[ al ],
ava->la_flags, &vl ) ) {
goto error_return;
}
@ -479,11 +479,11 @@ dn2dn( const char *dnin, unsigned fin, char **dnout, unsigned fout )
#define LDAP_DN_IS_RDN_DC( r ) \
( (r) && (r)[0][0] && !(r)[1] \
&& ((r)[0][0]->la_flags == LDAP_AVA_STRING) \
&& ((r)[0][0]->la_attr->bv_len == 2) \
&& (((r)[0][0]->la_attr->bv_val[0] == LDAP_DC_ATTR[0]) \
|| ((r)[0][0]->la_attr->bv_val[0] == LDAP_DC_ATTRU[0])) \
&& (((r)[0][0]->la_attr->bv_val[1] == LDAP_DC_ATTR[1]) \
|| ((r)[0][0]->la_attr->bv_val[1] == LDAP_DC_ATTRU[1])))
&& ((r)[0][0]->la_attr.bv_len == 2) \
&& (((r)[0][0]->la_attr.bv_val[0] == LDAP_DC_ATTR[0]) \
|| ((r)[0][0]->la_attr.bv_val[0] == LDAP_DC_ATTRU[0])) \
&& (((r)[0][0]->la_attr.bv_val[1] == LDAP_DC_ATTR[1]) \
|| ((r)[0][0]->la_attr.bv_val[1] == LDAP_DC_ATTRU[1])))
/* Composite rules */
#define LDAP_DN_ALLOW_ONE_SPACE(f) \
@ -526,8 +526,8 @@ ldapava_new( const struct berval *attr, const struct berval *val,
return( NULL );
}
ava->la_attr = ( struct berval * )attr;
ava->la_value = ( struct berval * )val;
ava->la_attr = *attr;
ava->la_value = *val;
ava->la_flags = flags;
ava->la_private = NULL;
@ -547,8 +547,8 @@ ldap_avafree( LDAPAVA *ava )
assert( ava->la_private == NULL );
#endif
ber_bvfree( ava->la_attr );
ber_bvfree( ava->la_value );
free( ava->la_attr.bv_val );
free( ava->la_value.bv_val );
LDAP_FREE( ava );
}
@ -866,8 +866,8 @@ ldap_str2rdn( const char *str, LDAPRDN **rdn, const char **n, unsigned flags )
int attrTypeEncoding = LDAP_AVA_STRING,
attrValueEncoding = LDAP_AVA_STRING;
struct berval *attrType = NULL;
struct berval *attrValue = NULL;
struct berval attrType = { 0, NULL };
struct berval attrValue = { 0, NULL };
LDAPRDN *newRDN = NULL;
@ -1005,11 +1005,7 @@ ldap_str2rdn( const char *str, LDAPRDN **rdn, const char **n, unsigned flags )
LDAP_FREE( type );
} else {
attrType = ber_bvstr( type );
if ( attrType == NULL ) {
rc = LDAP_NO_MEMORY;
goto parsing_error;
}
ber_str2bv( type, 0, 0, &attrType );
}
attrTypeEncoding = LDAP_AVA_BINARY;
@ -1077,18 +1073,12 @@ ldap_str2rdn( const char *str, LDAPRDN **rdn, const char **n, unsigned flags )
break;
}
assert( attrType == NULL );
attrType = LDAP_MALLOC( sizeof( struct berval ) );
if ( attrType == NULL ) {
attrType.bv_val = LDAP_STRNDUP( startPos, len );
if ( attrType.bv_val == NULL ) {
rc = LDAP_NO_MEMORY;
goto parsing_error;
}
attrType->bv_val = LDAP_STRNDUP( startPos, len );
if ( attrType->bv_val == NULL ) {
rc = LDAP_NO_MEMORY;
goto parsing_error;
}
attrType->bv_len = len;
attrType.bv_len = len;
break;
}
@ -1234,7 +1224,7 @@ ldap_str2rdn( const char *str, LDAPRDN **rdn, const char **n, unsigned flags )
/*
* we accept empty values
*/
ava = ldapava_new( attrType, attrValue,
ava = ldapava_new( &attrType, &attrValue,
attrValueEncoding );
if ( ava == NULL ) {
rc = LDAP_NO_MEMORY;
@ -1280,8 +1270,8 @@ ldap_str2rdn( const char *str, LDAPRDN **rdn, const char **n, unsigned flags )
}
/* they should have been used in an AVA */
attrType = NULL;
attrValue = NULL;
attrType.bv_val = NULL;
attrValue.bv_val = NULL;
p++;
state = B4AVA;
@ -1296,12 +1286,12 @@ ldap_str2rdn( const char *str, LDAPRDN **rdn, const char **n, unsigned flags )
parsing_error:;
/* They are set to NULL after they're used in an AVA */
if ( attrType ) {
ber_bvfree( attrType );
if ( attrType.bv_val ) {
free( attrType.bv_val );
}
if ( attrValue ) {
ber_bvfree( attrValue );
if ( attrValue.bv_val ) {
free( attrValue.bv_val );
}
if ( newRDN ) {
@ -1326,7 +1316,7 @@ return_result:;
* '\' + HEXPAIR(p) -> unhex(p)
*/
static int
str2strval( const char *str, struct berval **val, const char **next, unsigned flags, unsigned *retFlags )
str2strval( const char *str, struct berval *val, const char **next, unsigned flags, unsigned *retFlags )
{
const char *p, *startPos, *endPos = NULL;
ber_len_t len, escapes, unescapes;
@ -1335,7 +1325,6 @@ str2strval( const char *str, struct berval **val, const char **next, unsigned fl
assert( val );
assert( next );
*val = NULL;
*next = NULL;
for ( startPos = p = str, escapes = 0, unescapes = 0; p[ 0 ]; p++ ) {
@ -1424,30 +1413,29 @@ str2strval( const char *str, struct berval **val, const char **next, unsigned fl
* FIXME: test memory?
*/
len = ( endPos ? endPos : p ) - startPos - escapes - unescapes;
*val = LDAP_MALLOC( sizeof( struct berval ) );
( *val )->bv_len = len;
val->bv_len = len;
if ( escapes == 0 && unescapes == 0 ) {
( *val )->bv_val = LDAP_STRNDUP( startPos, len );
val->bv_val = LDAP_STRNDUP( startPos, len );
} else {
ber_len_t s, d;
( *val )->bv_val = LDAP_MALLOC( len + 1 );
val->bv_val = LDAP_MALLOC( len + 1 );
for ( s = 0, d = 0; d < len; ) {
if ( LDAP_DN_ESCAPE( startPos[ s ] ) ) {
s++;
if ( ( s == 0 && LDAP_DN_NEEDESCAPE_LEAD( startPos[ s ] ) )
|| ( s == len - 1 && LDAP_DN_NEEDESCAPE_TRAIL( startPos[ s ] ) )
|| LDAP_DN_NEEDESCAPE( startPos[ s ] ) ) {
( *val )->bv_val[ d++ ] =
val->bv_val[ d++ ] =
startPos[ s++ ];
} else if ( LDAP_DN_HEXPAIR( &startPos[ s ] ) ) {
char c;
hexstr2bin( &startPos[ s ], &c );
( *val )->bv_val[ d++ ] = c;
val->bv_val[ d++ ] = c;
s += 2;
} else {
@ -1455,24 +1443,24 @@ str2strval( const char *str, struct berval **val, const char **next, unsigned fl
* we allow escaping of chars
* that do not need to
*/
( *val )->bv_val[ d++ ] =
val->bv_val[ d++ ] =
startPos[ s++ ];
}
} else {
( *val )->bv_val[ d++ ] = startPos[ s++ ];
val->bv_val[ d++ ] = startPos[ s++ ];
}
}
( *val )->bv_val[ d ] = '\0';
assert( strlen( ( *val )->bv_val ) == len );
val->bv_val[ d ] = '\0';
assert( strlen( val->bv_val ) == len );
}
return( 0 );
}
static int
DCE2strval( const char *str, struct berval **val, const char **next, unsigned flags )
DCE2strval( const char *str, struct berval *val, const char **next, unsigned flags )
{
const char *p, *startPos, *endPos = NULL;
ber_len_t len, escapes;
@ -1481,7 +1469,6 @@ DCE2strval( const char *str, struct berval **val, const char **next, unsigned fl
assert( val );
assert( next );
*val = NULL;
*next = NULL;
for ( startPos = p = str, escapes = 0; p[ 0 ]; p++ ) {
@ -1530,15 +1517,14 @@ DCE2strval( const char *str, struct berval **val, const char **next, unsigned fl
}
len = ( endPos ? endPos : p ) - startPos - escapes;
*val = LDAP_MALLOC( sizeof( struct berval ) );
( *val )->bv_len = len;
val->bv_len = len;
if ( escapes == 0 ){
( *val )->bv_val = LDAP_STRNDUP( startPos, len );
val->bv_val = LDAP_STRNDUP( startPos, len );
} else {
ber_len_t s, d;
( *val )->bv_val = LDAP_MALLOC( len + 1 );
val->bv_val = LDAP_MALLOC( len + 1 );
for ( s = 0, d = 0; d < len; ) {
/*
* This point is reached only if escapes
@ -1549,17 +1535,17 @@ DCE2strval( const char *str, struct berval **val, const char **next, unsigned fl
s++;
}
( *val )->bv_val[ d++ ] = startPos[ s++ ];
val->bv_val[ d++ ] = startPos[ s++ ];
}
( *val )->bv_val[ d ] = '\0';
assert( strlen( ( *val )->bv_val ) == len );
val->bv_val[ d ] = '\0';
assert( strlen( val->bv_val ) == len );
}
return( 0 );
}
static int
IA52strval( const char *str, struct berval **val, const char **next, unsigned flags )
IA52strval( const char *str, struct berval *val, const char **next, unsigned flags )
{
const char *p, *startPos, *endPos = NULL;
ber_len_t len, escapes;
@ -1568,7 +1554,6 @@ IA52strval( const char *str, struct berval **val, const char **next, unsigned fl
assert( val );
assert( next );
*val = NULL;
*next = NULL;
/*
@ -1612,31 +1597,30 @@ IA52strval( const char *str, struct berval **val, const char **next, unsigned fl
return( 0 );
}
*val = LDAP_MALLOC( sizeof( struct berval ) );
len = ( endPos ? endPos : p ) - startPos - escapes;
( *val )->bv_len = len;
val->bv_len = len;
if ( escapes == 0 ) {
( *val )->bv_val = LDAP_STRNDUP( startPos, len );
val->bv_val = LDAP_STRNDUP( startPos, len );
} else {
ber_len_t s, d;
( *val )->bv_val = LDAP_MALLOC( len + 1 );
val->bv_val = LDAP_MALLOC( len + 1 );
for ( s = 0, d = 0; d < len; ) {
if ( LDAP_DN_ESCAPE( startPos[ s ] ) ) {
s++;
}
( *val )->bv_val[ d++ ] = startPos[ s++ ];
val->bv_val[ d++ ] = startPos[ s++ ];
}
( *val )->bv_val[ d ] = '\0';
assert( strlen( ( *val )->bv_val ) == len );
val->bv_val[ d ] = '\0';
assert( strlen( val->bv_val ) == len );
}
return( 0 );
}
static int
quotedIA52strval( const char *str, struct berval **val, const char **next, unsigned flags )
quotedIA52strval( const char *str, struct berval *val, const char **next, unsigned flags )
{
const char *p, *startPos, *endPos = NULL;
ber_len_t len;
@ -1646,7 +1630,6 @@ quotedIA52strval( const char *str, struct berval **val, const char **next, unsig
assert( val );
assert( next );
*val = NULL;
*next = NULL;
/* initial quote already eaten */
@ -1705,25 +1688,24 @@ quotedIA52strval( const char *str, struct berval **val, const char **next, unsig
len = endPos - startPos - escapes;
assert( len >= 0 );
*val = LDAP_MALLOC( sizeof( struct berval ) );
( *val )->bv_len = len;
val->bv_len = len;
if ( escapes == 0 ) {
( *val )->bv_val = LDAP_STRNDUP( startPos, len );
val->bv_val = LDAP_STRNDUP( startPos, len );
} else {
ber_len_t s, d;
( *val )->bv_val = LDAP_MALLOC( len + 1 );
( *val )->bv_len = len;
val->bv_val = LDAP_MALLOC( len + 1 );
val->bv_len = len;
for ( s = d = 0; d < len; ) {
if ( LDAP_DN_ESCAPE( str[ s ] ) ) {
s++;
}
( *val )->bv_val[ d++ ] = str[ s++ ];
val->bv_val[ d++ ] = str[ s++ ];
}
( *val )->bv_val[ d ] = '\0';
assert( strlen( ( *val )->bv_val ) == len );
val->bv_val[ d ] = '\0';
assert( strlen( val->bv_val ) == len );
}
return( 0 );
@ -1770,7 +1752,7 @@ hexstr2bin( const char *str, char *c )
}
static int
hexstr2binval( const char *str, struct berval **val, const char **next, unsigned flags )
hexstr2binval( const char *str, struct berval *val, const char **next, unsigned flags )
{
const char *p, *startPos, *endPos = NULL;
ber_len_t len;
@ -1780,7 +1762,6 @@ hexstr2binval( const char *str, struct berval **val, const char **next, unsigned
assert( val );
assert( next );
*val = NULL;
*next = NULL;
for ( startPos = p = str; p[ 0 ]; p += 2 ) {
@ -1852,15 +1833,9 @@ end_of_value:;
/* must be even! */
assert( 2 * len == (ber_len_t) (( endPos ? endPos : p ) - startPos ));
*val = LDAP_MALLOC( sizeof( struct berval ) );
if ( *val == NULL ) {
return( LDAP_NO_MEMORY );
}
( *val )->bv_len = len;
( *val )->bv_val = LDAP_MALLOC( len + 1 );
if ( ( *val )->bv_val == NULL ) {
LDAP_FREE( *val );
val->bv_len = len;
val->bv_val = LDAP_MALLOC( len + 1 );
if ( val->bv_val == NULL ) {
return( LDAP_NO_MEMORY );
}
@ -1869,10 +1844,10 @@ end_of_value:;
hexstr2bin( &startPos[ s ], &c );
( *val )->bv_val[ d ] = c;
val->bv_val[ d ] = c;
}
( *val )->bv_val[ d ] = '\0';
val->bv_val[ d ] = '\0';
return( 0 );
}
@ -2369,16 +2344,16 @@ dn2domain( LDAPDN *dn, struct berval *bv, int pos, int *iRDN )
if ( first ) {
first = 0;
AC_MEMCPY( str, ava->la_value->bv_val,
ava->la_value->bv_len + 1);
l += ava->la_value->bv_len;
AC_MEMCPY( str, ava->la_value.bv_val,
ava->la_value.bv_len + 1);
l += ava->la_value.bv_len;
} else {
AC_MEMCPY( str + ava->la_value->bv_len + 1, bv->bv_val, l);
AC_MEMCPY( str, ava->la_value->bv_val,
ava->la_value->bv_len );
str[ ava->la_value->bv_len ] = '.';
l += ava->la_value->bv_len + 1;
AC_MEMCPY( str + ava->la_value.bv_len + 1, bv->bv_val, l);
AC_MEMCPY( str, ava->la_value.bv_val,
ava->la_value.bv_len );
str[ ava->la_value.bv_len ] = '.';
l += ava->la_value.bv_len + 1;
}
}
@ -2401,17 +2376,17 @@ rdn2strlen( LDAPRDN *rdn, unsigned flags, ber_len_t *len,
LDAPAVA *ava = rdn[ iAVA ][ 0 ];
/* len(type) + '=' + '+' | ',' */
l += ava->la_attr->bv_len + 2;
l += ava->la_attr.bv_len + 2;
if ( ava->la_flags & LDAP_AVA_BINARY ) {
/* octothorpe + twice the length */
l += 1 + 2 * ava->la_value->bv_len;
l += 1 + 2 * ava->la_value.bv_len;
} else {
ber_len_t vl;
unsigned f = flags | ava->la_flags;
if ( ( *s2l )( ava->la_value, f, &vl ) ) {
if ( ( *s2l )( &ava->la_value, f, &vl ) ) {
return( -1 );
}
l += vl;
@ -2433,24 +2408,24 @@ rdn2str( LDAPRDN *rdn, char *str, unsigned flags, ber_len_t *len,
for ( iAVA = 0; rdn[ iAVA ]; iAVA++ ) {
LDAPAVA *ava = rdn[ iAVA ][ 0 ];
AC_MEMCPY( &str[ l ], ava->la_attr->bv_val,
ava->la_attr->bv_len );
l += ava->la_attr->bv_len;
AC_MEMCPY( &str[ l ], ava->la_attr.bv_val,
ava->la_attr.bv_len );
l += ava->la_attr.bv_len;
str[ l++ ] = '=';
if ( ava->la_flags & LDAP_AVA_BINARY ) {
str[ l++ ] = '#';
if ( binval2hexstr( ava->la_value, &str[ l ] ) ) {
if ( binval2hexstr( &ava->la_value, &str[ l ] ) ) {
return( -1 );
}
l += 2 * ava->la_value->bv_len;
l += 2 * ava->la_value.bv_len;
} else {
ber_len_t vl;
unsigned f = flags | ava->la_flags;
if ( ( *s2s )( ava->la_value, &str[ l ], f, &vl ) ) {
if ( ( *s2s )( &ava->la_value, &str[ l ], f, &vl ) ) {
return( -1 );
}
l += vl;
@ -2475,19 +2450,19 @@ rdn2DCEstrlen( LDAPRDN *rdn, unsigned flags, ber_len_t *len )
LDAPAVA *ava = rdn[ iAVA ][ 0 ];
/* len(type) + '=' + ',' | '/' */
l += ava->la_attr->bv_len + 2;
l += ava->la_attr.bv_len + 2;
switch ( ava->la_flags ) {
case LDAP_AVA_BINARY:
/* octothorpe + twice the length */
l += 1 + 2 * ava->la_value->bv_len;
l += 1 + 2 * ava->la_value.bv_len;
break;
case LDAP_AVA_STRING: {
ber_len_t vl;
unsigned f = flags | ava->la_flags;
if ( strval2DCEstrlen( ava->la_value, f, &vl ) ) {
if ( strval2DCEstrlen( &ava->la_value, f, &vl ) ) {
return( -1 );
}
l += vl;
@ -2519,26 +2494,26 @@ rdn2DCEstr( LDAPRDN *rdn, char *str, unsigned flags, ber_len_t *len, int first )
str[ l++ ] = ( iAVA ? ',' : '/' );
}
AC_MEMCPY( &str[ l ], ava->la_attr->bv_val,
ava->la_attr->bv_len );
l += ava->la_attr->bv_len;
AC_MEMCPY( &str[ l ], ava->la_attr.bv_val,
ava->la_attr.bv_len );
l += ava->la_attr.bv_len;
str[ l++ ] = '=';
switch ( ava->la_flags ) {
case LDAP_AVA_BINARY:
str[ l++ ] = '#';
if ( binval2hexstr( ava->la_value, &str[ l ] ) ) {
if ( binval2hexstr( &ava->la_value, &str[ l ] ) ) {
return( -1 );
}
l += 2 * ava->la_value->bv_len;
l += 2 * ava->la_value.bv_len;
break;
case LDAP_AVA_STRING: {
ber_len_t vl;
unsigned f = flags | ava->la_flags;
if ( strval2DCEstr( ava->la_value, &str[ l ], f, &vl ) ) {
if ( strval2DCEstr( &ava->la_value, &str[ l ], f, &vl ) ) {
return( -1 );
}
l += vl;
@ -2575,13 +2550,13 @@ rdn2UFNstrlen( LDAPRDN *rdn, unsigned flags, ber_len_t *len )
/* FIXME: are binary values allowed in UFN? */
if ( ava->la_flags & LDAP_AVA_BINARY ) {
/* octothorpe + twice the value */
l += 1 + 2 * ava->la_value->bv_len;
l += 1 + 2 * ava->la_value.bv_len;
} else {
ber_len_t vl;
unsigned f = flags | ava->la_flags;
if ( strval2strlen( ava->la_value, f, &vl ) ) {
if ( strval2strlen( &ava->la_value, f, &vl ) ) {
return( -1 );
}
l += vl;
@ -2604,16 +2579,16 @@ rdn2UFNstr( LDAPRDN *rdn, char *str, unsigned flags, ber_len_t *len )
if ( ava->la_flags & LDAP_AVA_BINARY ) {
str[ l++ ] = '#';
if ( binval2hexstr( ava->la_value, &str[ l ] ) ) {
if ( binval2hexstr( &ava->la_value, &str[ l ] ) ) {
return( -1 );
}
l += 2 * ava->la_value->bv_len;
l += 2 * ava->la_value.bv_len;
} else {
ber_len_t vl;
unsigned f = flags | ava->la_flags;
if ( strval2str( ava->la_value, &str[ l ], f, &vl ) ) {
if ( strval2str( &ava->la_value, &str[ l ], f, &vl ) ) {
return( -1 );
}
l += vl;
@ -2655,14 +2630,14 @@ rdn2ADstrlen( LDAPRDN *rdn, unsigned flags, ber_len_t *len )
switch ( ava->la_flags ) {
case LDAP_AVA_BINARY:
/* octothorpe + twice the value */
l += 1 + 2 * ava->la_value->bv_len;
l += 1 + 2 * ava->la_value.bv_len;
break;
case LDAP_AVA_STRING: {
ber_len_t vl;
unsigned f = flags | ava->la_flags;
if ( strval2ADstrlen( ava->la_value, f, &vl ) ) {
if ( strval2ADstrlen( &ava->la_value, f, &vl ) ) {
return( -1 );
}
l += vl;
@ -2697,17 +2672,17 @@ rdn2ADstr( LDAPRDN *rdn, char *str, unsigned flags, ber_len_t *len, int first )
switch ( ava->la_flags ) {
case LDAP_AVA_BINARY:
str[ l++ ] = '#';
if ( binval2hexstr( ava->la_value, &str[ l ] ) ) {
if ( binval2hexstr( &ava->la_value, &str[ l ] ) ) {
return( -1 );
}
l += 2 * ava->la_value->bv_len;
l += 2 * ava->la_value.bv_len;
break;
case LDAP_AVA_STRING: {
ber_len_t vl;
unsigned f = flags | ava->la_flags;
if ( strval2ADstr( ava->la_value, &str[ l ], f, &vl ) ) {
if ( strval2ADstr( &ava->la_value, &str[ l ], f, &vl ) ) {
return( -1 );
}
l += vl;

View file

@ -65,7 +65,7 @@ LDAPDN_validate( LDAPDN *dn )
if ( ( ad = AVA_PRIVATE( ava ) ) == NULL ) {
const char *text = NULL;
rc = slap_bv2ad( ava->la_attr, &ad, &text );
rc = slap_bv2ad( &ava->la_attr, &ad, &text );
if ( rc != LDAP_SUCCESS ) {
return LDAP_INVALID_SYNTAX;
}
@ -76,8 +76,8 @@ LDAPDN_validate( LDAPDN *dn )
/*
* Replace attr oid/name with the canonical name
*/
ber_bvfree( ava->la_attr );
ava->la_attr = ber_bvdup( &ad->ad_cname );
free( ava->la_attr.bv_val );
ber_dupbv( &ava->la_attr, &ad->ad_cname );
validate = ad->ad_type->sat_syntax->ssyn_validate;
@ -86,7 +86,7 @@ LDAPDN_validate( LDAPDN *dn )
* validate value by validate function
*/
rc = ( *validate )( ad->ad_type->sat_syntax,
ava->la_value );
&ava->la_value );
if ( rc != LDAP_SUCCESS ) {
return LDAP_INVALID_SYNTAX;
@ -158,7 +158,7 @@ AVA_Sort( LDAPRDN *rdn, int iAVA )
assert( ava );
a = strcmp( ava_in->la_attr->bv_val, ava->la_attr->bv_val );
a = strcmp( ava_in->la_attr.bv_val, ava->la_attr.bv_val );
if ( a > 0 ) {
break;
@ -167,12 +167,12 @@ AVA_Sort( LDAPRDN *rdn, int iAVA )
while ( a == 0 ) {
int v, d;
d = ava_in->la_value->bv_len - ava->la_value->bv_len;
d = ava_in->la_value.bv_len - ava->la_value.bv_len;
v = memcmp( ava_in->la_value->bv_val,
ava->la_value->bv_val,
d <= 0 ? ava_in->la_value->bv_len
: ava->la_value->bv_len );
v = memcmp( ava_in->la_value.bv_val,
ava->la_value.bv_val,
d <= 0 ? ava_in->la_value.bv_len
: ava->la_value.bv_len );
if ( v == 0 && d != 0 ) {
v = d;
@ -193,8 +193,8 @@ AVA_Sort( LDAPRDN *rdn, int iAVA )
}
ava = rdn[ i ][ 0 ];
a = strcmp( ava_in->la_value->bv_val,
ava->la_value->bv_val );
a = strcmp( ava_in->la_value.bv_val,
ava->la_value.bv_val );
}
/*
@ -239,7 +239,7 @@ LDAPDN_rewrite( LDAPDN *dn, unsigned flags )
if ( ( ad = AVA_PRIVATE( ava ) ) == NULL ) {
const char *text = NULL;
rc = slap_bv2ad( ava->la_attr, &ad, &text );
rc = slap_bv2ad( &ava->la_attr, &ad, &text );
if ( rc != LDAP_SUCCESS ) {
return LDAP_INVALID_SYNTAX;
}
@ -250,8 +250,8 @@ LDAPDN_rewrite( LDAPDN *dn, unsigned flags )
/*
* Replace attr oid/name with the canonical name
*/
ber_bvfree( ava->la_attr );
ava->la_attr = ber_bvdup( &ad->ad_cname );
free( ava->la_attr.bv_val );
ber_dupbv( &ava->la_attr, &ad->ad_cname );
if( flags & SLAP_LDAPDN_PRETTY ) {
transf = ad->ad_type->sat_syntax->ssyn_pretty;
@ -266,7 +266,7 @@ LDAPDN_rewrite( LDAPDN *dn, unsigned flags )
* transform value by normalize/pretty function
*/
rc = ( *transf )( ad->ad_type->sat_syntax,
ava->la_value, &bv );
&ava->la_value, &bv );
if ( rc != LDAP_SUCCESS ) {
return LDAP_INVALID_SYNTAX;
@ -276,15 +276,16 @@ LDAPDN_rewrite( LDAPDN *dn, unsigned flags )
if( mr && ( mr->smr_usage & SLAP_MR_DN_FOLD ) ) {
struct berval *s = bv;
bv = ber_bvstr( UTF8normalize( bv ? bv : ava->la_value,
bv = ber_bvstr( UTF8normalize( bv ? bv : &ava->la_value,
UTF8_CASEFOLD ) );
ber_bvfree( s );
}
if( bv ) {
ber_bvfree( ava->la_value );
ava->la_value = bv;
free( ava->la_value.bv_val );
ava->la_value = *bv;
free( bv );
}
AVA_Sort( rdn, iAVA );
@ -917,15 +918,15 @@ rdn_attrs( const char * rdn, char ***types, char ***values)
LDAPAVA *ava = tmpRDN[ iAVA ][ 0 ];
assert( ava );
assert( ava->la_attr );
assert( ava->la_value );
assert( ava->la_attr.bv_val );
assert( ava->la_value.bv_val );
if ( types ) {
charray_add_n( types, ava->la_attr->bv_val,
ava->la_attr->bv_len );
charray_add_n( types, ava->la_attr.bv_val,
ava->la_attr.bv_len );
}
charray_add_n( values, ava->la_value->bv_val,
ava->la_value->bv_len );
charray_add_n( values, ava->la_value.bv_val,
ava->la_value.bv_len );
}
ldap_rdnfree( tmpRDN );