Fixed slapd-monitor hasSubordinates generation (ITS#6712)
Fixed slapd-sql with null objectClass (ITS#6616)
Fixed slapd-sql hasSubordinates generation (ITS#6712)
+ Fixed slapo-accesslog with controls (ITS#6652)
Fixed slapo-dynlist callbacks (ITS#6752)
Fixed slapo-dynlist entry handling (ITS#6752)
Fixed slapo-memberof log messages (ITS#6748)
/* extract and check controlValue */
if ( strncasecmp( &val.bv_val[ i ], "controlValue ", STRLENOF( "controlValue " ) ) == 0 )
{
+ ber_len_t valueStart, valueLen;
+
i += STRLENOF( "controlValue " );
for ( ; i < val.bv_len; i++ ) {
if ( !ASCII_SPACE( val.bv_val[ i ] ) ) {
return LDAP_INVALID_SYNTAX;
}
+ i++;
+ valueStart = i;
+
for ( ; i < val.bv_len; i++ ) {
if ( val.bv_val[ i ] == '"' ) {
break;
return LDAP_INVALID_SYNTAX;
}
- for ( ; i < val.bv_len; i++ ) {
+ valueLen = i - valueStart;
+ if ( (valueLen/2)*2 != valueLen ) {
+ return LDAP_INVALID_SYNTAX;
+ }
+
+ for ( i++; i < val.bv_len; i++ ) {
if ( !ASCII_SPACE( val.bv_val[ i ] ) ) {
break;
}
ber_len_t j;
ptr = lutil_strcopy( ptr, " controlValue \"" );
- for ( j = 0; j < ctrls[ i ]->ldctl_value.bv_len; j++ )
- {
- unsigned char o;
-
- o = ( ( ctrls[ i ]->ldctl_value.bv_val[ j ] >> 4 ) & 0xF );
- if ( o < 10 ) {
- *ptr++ = '0' + o;
-
- } else {
- *ptr++ = 'A' + o;
- }
-
- o = ( ctrls[ i ]->ldctl_value.bv_val[ j ] & 0xF );
- if ( o < 10 ) {
- *ptr++ = '0' + o;
-
- } else {
- *ptr++ = 'A' + o;
- }
+ for ( j = 0; j < ctrls[ i ]->ldctl_value.bv_len; j++ ) {
+ *ptr++ = SLAP_ESCAPE_HI(ctrls[ i ]->ldctl_value.bv_val[ j ]);
+ *ptr++ = SLAP_ESCAPE_LO(ctrls[ i ]->ldctl_value.bv_val[ j ]);
}
*ptr++ = '"';