]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#8845 sc_extendedops is read-only
authorOndřej Kuzník <ondra@openldap.org>
Tue, 18 Dec 2018 16:40:14 +0000 (17:40 +0100)
committerOndřej Kuzník <ondra@openldap.org>
Tue, 18 Dec 2018 17:34:23 +0000 (18:34 +0100)
servers/slapd/controls.c

index 73f3acf9fddc286404ebaee6c45d6b2eba8a83af..c3cf6a732ef38ea87085fa330b8daddaded68307 100644 (file)
@@ -405,27 +405,18 @@ register_control_exop( const char *controloid, char *exopoid )
                return LDAP_PARAM_ERROR;
        }
 
-       for ( i = 0; sc->sc_extendedops && sc->sc_extendedops[ i ]; i++ ) {
-               if ( strcmp( exopoid, sc->sc_extendedops[ i ] ) == 0 ) {
+       for ( i = 0; sc->sc_extendedopsbv && !BER_BVISNULL( &sc->sc_extendedopsbv[ i ] ); i++ ) {
+               if ( strcmp( exopoid, sc->sc_extendedopsbv[ i ].bv_val ) == 0 ) {
                        return LDAP_SUCCESS;
                }
        }
 
-       extendedops = ber_memrealloc( sc->sc_extendedops, (i + 2) * sizeof( char * ) );
-       if ( extendedops == NULL ) {
-               return LDAP_NO_MEMORY;
-       }
-       sc->sc_extendedops = extendedops;
-
        extendedopsbv = ber_memrealloc( sc->sc_extendedopsbv, (i + 2) * sizeof( struct berval ) );
        if ( extendedopsbv == NULL ) {
                return LDAP_NO_MEMORY;
        }
        sc->sc_extendedopsbv = extendedopsbv;
 
-       extendedops[ i ] = exopoid;
-       extendedops[ i+1 ] = NULL;
-
        ber_str2bv( exopoid, 0, 1, &extendedopsbv[ i ] );
        BER_BVZERO( &extendedopsbv[ i+1 ] );