]> git.sur5r.net Git - openldap/commitdiff
ITS#6652
authorQuanah Gibson-Mount <quanah@openldap.org>
Tue, 4 Jan 2011 21:02:22 +0000 (21:02 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 4 Jan 2011 21:02:22 +0000 (21:02 +0000)
CHANGES
servers/slapd/overlays/accesslog.c

diff --git a/CHANGES b/CHANGES
index d4c1abff7ae4848b3199b3fcb50a3e35bf561a20..94c74a052cb8d3423725aa4aab153b5ef45e4ac1 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -65,6 +65,7 @@ OpenLDAP 2.4.24 Engineering
        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)
index 4f4bbafafa9341e7daa34299098d4616508d1462..a277f29b95338763bd8de9a4575efa2083c9bf5d 100644 (file)
@@ -1048,6 +1048,8 @@ logSchemaControlValidate(
        /* 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 ] ) ) {
@@ -1063,6 +1065,9 @@ logSchemaControlValidate(
                        return LDAP_INVALID_SYNTAX;
                }
 
+               i++;
+               valueStart = i;
+
                for ( ; i < val.bv_len; i++ ) {
                        if ( val.bv_val[ i ] == '"' ) {
                                break;
@@ -1077,7 +1082,12 @@ logSchemaControlValidate(
                        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;
                        }
@@ -1160,25 +1170,9 @@ accesslog_ctrls(
                        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++ = '"';