]> git.sur5r.net Git - openldap/commitdiff
Rework BER decoding with lieu of LDAPv3 controls (coming soon).
authorKurt Zeilenga <kurt@openldap.org>
Wed, 30 Jun 1999 22:43:27 +0000 (22:43 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Wed, 30 Jun 1999 22:43:27 +0000 (22:43 +0000)
Add place holder for handling LDAPv3 extended operations (coming soon).

servers/slapd/abandon.c
servers/slapd/add.c
servers/slapd/bind.c
servers/slapd/compare.c
servers/slapd/connection.c
servers/slapd/delete.c
servers/slapd/modify.c
servers/slapd/modrdn.c
servers/slapd/proto-slap.h
servers/slapd/search.c

index d6b4704d32cac7a66e3581c99f2be758749f4e91..5678589bb9658871383bc171862c78e3ce0a4252 100644 (file)
@@ -38,10 +38,17 @@ do_abandon(
         */
 
        if ( ber_scanf( op->o_ber, "i", &id ) == LBER_ERROR ) {
-               Debug( LDAP_DEBUG_ANY, "ber_scanf failed\n", 0, 0 ,0 );
+               Debug( LDAP_DEBUG_ANY, "do_abandon: ber_scanf failed\n", 0, 0 ,0 );
                return;
        }
 
+#ifdef GET_CTRLS
+       if( get_ctrls( conn, op, 0 ) == -1 ) {
+               Debug( LDAP_DEBUG_ANY, "do_abandon: get_ctrls failed\n", 0, 0 ,0 );
+               return;
+       } 
+#endif
+
        Debug( LDAP_DEBUG_ARGS, "do_abandon: id %d\n", id, 0 ,0 );
 
        /*
index 60e43f70e7677aa588d445d9c4180ff62482ad08..6293b44ebb0e1dbdf5cab8fe09b2546f3e0f4e65 100644 (file)
@@ -48,7 +48,7 @@ do_add( Connection *conn, Operation *op )
 
        /* get the name */
        if ( ber_scanf( ber, "{a", /*}*/ &dn ) == LBER_ERROR ) {
-               Debug( LDAP_DEBUG_ANY, "ber_scanf failed\n", 0, 0, 0 );
+               Debug( LDAP_DEBUG_ANY, "do_add: ber_scanf failed\n", 0, 0, 0 );
                send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL,
                    "decoding error" );
                return;
@@ -94,6 +94,22 @@ do_add( Connection *conn, Operation *op )
                ber_bvecfree( vals );
        }
 
+       if ( ber_scanf( ber, /*{*/ "}") == LBER_ERROR ) {
+               entry_free( e );
+               Debug( LDAP_DEBUG_ANY, "do_add: ber_scanf failed\n", 0, 0, 0 );
+               send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL,
+                   "decoding error" );
+               return;
+       }
+
+#ifdef GET_CTRLS
+       if( get_ctrls( conn, op, 1 ) == -1 ) {
+               entry_free( e );
+               Debug( LDAP_DEBUG_ANY, "do_add: get_ctrls failed\n", 0, 0, 0 );
+               return;
+       } 
+#endif
+
        Statslog( LDAP_DEBUG_STATS, "conn=%d op=%d ADD dn=\"%s\"\n",
            conn->c_connid, op->o_opid, e->e_ndn, 0, 0 );
 
index ee532b14444ac98a9c88e8671155bb519d367fa5..db49a320e644dd0acf402580a28476787c11a9ed 100644 (file)
@@ -60,6 +60,22 @@ do_bind(
                return;
        }
 
+#ifdef GET_CTRLS
+       if( get_ctrls( conn, op, 1 ) == -1 ) {
+               if ( cdn != NULL ) {
+                       free( cdn );
+               }
+               if ( ndn != NULL ) {
+                       free( ndn );
+               }
+               if ( cred.bv_val != NULL ) {
+                       free( cred.bv_val );
+               }
+               Debug( LDAP_DEBUG_ANY, "do_add: get_ctrls failed\n", 0, 0, 0 );
+               return;
+       } 
+#endif
+
        Debug( LDAP_DEBUG_TRACE, "do_bind: version %d dn (%s) method %d\n",
            version, cdn, method );
 
index 0d1c50abdbc02cc6fc7e704dde993b5c152316a1..2709e00c29e4d6ed5006e1d32ec3f8b64b6402db 100644 (file)
@@ -48,6 +48,16 @@ do_compare(
                send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL, "" );
                return;
        }
+
+#ifdef GET_CTRLS
+       if( get_ctrls( conn, op, 1 ) == -1 ) {
+               free( ndn );
+               ava_free( &ava, 0 );
+               Debug( LDAP_DEBUG_ANY, "do_compare: get_ctrls failed\n", 0, 0, 0 );
+               return;
+       } 
+#endif
+
        value_normalize( ava.ava_value.bv_val, attr_syntax( ava.ava_type ) );
 
        Debug( LDAP_DEBUG_ARGS, "do_compare: dn (%s) attr (%s) value (%s)\n",
index dd561602328a963f69f04a9721c31202894e5966..bd3f1848ace0e4b2f37c514ec8ba78f3eff3f382 100644 (file)
@@ -647,6 +647,12 @@ connection_operation( void *arg_v )
                do_abandon( conn, arg->co_op );
                break;
 
+#if 0
+       case LDAP_REQ_EXTENDED:
+               do_extended( conn, arg->co_op );
+               break;
+#endif
+
        default:
                Debug( LDAP_DEBUG_ANY, "unknown request 0x%lx\n",
                    arg->co_op->o_tag, 0, 0 );
index be9b1179eaf69e6ce34c5d3ede57f9e2bf03d70a..3774ca8db057bbafe2154b1d0f104011bdfec068 100644 (file)
@@ -42,6 +42,14 @@ do_delete(
                return;
        }
 
+#ifdef GET_CTRLS
+       if( get_ctrls( conn, op, 1 ) == -1 ) {
+               free( ndn );
+               Debug( LDAP_DEBUG_ANY, "do_add: get_ctrls failed\n", 0, 0, 0 );
+               return;
+       } 
+#endif
+
        Debug( LDAP_DEBUG_ARGS, "do_delete: dn (%s)\n", ndn, 0, 0 );
 
        dn_normalize_case( ndn );
index 345dc5f36b7146e8669c2c7ac1e8af27e0b8a3ec..5722c82ced80dd59395abbacbd51b101865b0b14 100644 (file)
@@ -133,6 +133,15 @@ do_modify(
        }
 #endif
 
+#ifdef  GET_CTRLS
+       if( get_ctrls( conn, op, 1 ) == -1 ) {
+               free( ndn );
+               modlist_free( modlist );
+               Debug( LDAP_DEBUG_ANY, "do_modify: get_ctrls failed\n", 0, 0, 0 );
+               return;
+       } 
+#endif
+
        Statslog( LDAP_DEBUG_STATS, "conn=%d op=%d MOD dn=\"%s\"\n",
            conn->c_connid, op->o_opid, ndn, 0, 0 );
 
index 33a4bc35b7627739ec9d5830cd4b2dac37855926..27e7a100f2f691b439931fc8ac9d000b4aee2e3c 100644 (file)
@@ -67,11 +67,6 @@ do_modrdn(
                return;
        }
 
-       Debug( LDAP_DEBUG_ARGS,
-           "do_modrdn: dn (%s) newrdn (%s) deloldrdn (%d)\n", ndn, newrdn,
-           deloldrdn );
-
-
        /* Check for newSuperior parameter, if present scan it */
 
        if ( ber_peek_tag( op->o_ber, &length ) == LDAP_TAG_NEWSUPERIOR ) {
@@ -97,7 +92,7 @@ do_modrdn(
                        return;
                }
 
-               if ( ber_scanf( op->o_ber, /*{*/ "a}", &newSuperior ) 
+               if ( ber_scanf( op->o_ber, "a", &newSuperior ) 
                     == LBER_ERROR ) {
 
                    Debug( LDAP_DEBUG_ANY, "ber_scanf(\"a\"}) failed\n",
@@ -108,10 +103,34 @@ do_modrdn(
 
                }
 
+       }
 
-               Debug( LDAP_DEBUG_ARGS, "do_modrdn: newSuperior=(%s)\n",
-                      newSuperior, 0, 0 );
+       Debug( LDAP_DEBUG_ARGS,
+           "do_modrdn: dn (%s) newrdn (%s) newsuperior (%s)\n",
+               ndn, newrdn,
+               newSuperior != NULL ? newSuperior : "" );
 
+       if ( ber_scanf( op->o_ber, /*{*/ "}") == LBER_ERROR ) {
+               free( ndn );
+               free( newrdn ); 
+               free( newSuperior );
+               Debug( LDAP_DEBUG_ANY, "do_modrdn: ber_scanf failed\n", 0, 0, 0 );
+               send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL,
+                   "decoding error" );
+               return;
+       }
+
+#ifdef  GET_CTRLS
+       if( get_ctrls( conn, op, 1 ) == -1 ) {
+               free( ndn );
+               free( newrdn ); 
+               free( newSuperior );
+               Debug( LDAP_DEBUG_ANY, "do_modrdn: get_ctrls failed\n", 0, 0, 0 );
+               return;
+       } 
+#endif
+
+       if( newSuperior != NULL ) {
                /* GET BACKEND FOR NEW SUPERIOR */
 
                nnewSuperior = strdup( newSuperior );
@@ -125,7 +144,6 @@ do_modrdn(
                         * XXX: We may need to do something else here, not sure
                         * what though.
                         */
-               
 
                        Debug( LDAP_DEBUG_ARGS,
                               "do_modrdn: cant find backend for=(%s)\n",
@@ -138,9 +156,7 @@ do_modrdn(
                        send_ldap_result( conn, op, LDAP_PARTIAL_RESULTS, NULL,
                                          default_referral );
                        return;
-                       
                }
-
        }
 
        dn_normalize_case( ndn );
index 3f7da34a9a51ab5ec617b1f98e73f6e7c724ed6a..6c60096a47eec21744ded9b3dbbc33a87b1e6838 100644 (file)
@@ -120,6 +120,14 @@ int charray_inlist LDAP_P(( char **a, char *s ));
 char ** charray_dup LDAP_P(( char **a ));
 char ** str2charray LDAP_P(( char *str, char *brkstr ));
 
+/*
+ * controls.c
+ */
+int get_ctrls LDAP_P((
+       Connection *co,
+       Operation *op,
+       int senderrors ));
+
 /*
  * config.c
  */
index 584a7b8882834578f1b4346d9166461d3bab1ff3..c0fef8bf6fbeedb053a8c4dff2f24c3789f537dd 100644 (file)
@@ -93,13 +93,22 @@ do_search(
                goto return_results;
        }
 
+#ifdef GET_CTRLS
+       if( get_ctrls( conn, op, 1 ) == -1 ) {
+               Debug( LDAP_DEBUG_ANY, "do_search: get_ctrls failed\n", 0, 0, 0 );
+               goto return_results;
+       } 
+#endif
+
        Debug( LDAP_DEBUG_ARGS, "    attrs:", 0, 0, 0 );
+
        if ( attrs != NULL ) {
                for ( i = 0; attrs[i] != NULL; i++ ) {
                        attr_normalize( attrs[i] );
                        Debug( LDAP_DEBUG_ARGS, " %s", attrs[i], 0, 0 );
                }
        }
+
        Debug( LDAP_DEBUG_ARGS, "\n", 0, 0, 0 );
 
        Statslog( LDAP_DEBUG_STATS,