]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapi/slapi_pblock.c
Do not return pointers into BerElement we do not own
[openldap] / servers / slapd / slapi / slapi_pblock.c
index 03edd7ce4dbd9cfc26804403dc145da6d5015d88..3441eb45923733c3987f0bc85115a64d054510b0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 /*
@@ -11,7 +11,6 @@
  */
 
 #include "portable.h"
-#include "slapi_common.h"
 #include <slap.h>
 #include <slapi.h>
 
@@ -22,6 +21,10 @@ isOkNetscapeParam( int param )
        case SLAPI_BACKEND:
        case SLAPI_CONNECTION:
        case SLAPI_OPERATION:
+       case SLAPI_OPERATION_PARAMETERS:
+       case SLAPI_OPERATION_TYPE:
+       case SLAPI_OPERATION_ID:
+       case SLAPI_OPERATION_AUTHTYPE:
        case SLAPI_REQUESTOR_ISROOT:
        case SLAPI_BE_MONITORDN:
        case SLAPI_BE_TYPE:
@@ -32,7 +35,14 @@ isOkNetscapeParam( int param )
        case SLAPI_REQUESTOR_DN:
        case SLAPI_REQUESTOR_ISUPDATEDN:
        case SLAPI_CONN_DN:
+       case SLAPI_CONN_CLIENTIP:
+       case SLAPI_CONN_SERVERIP:
        case SLAPI_CONN_AUTHTYPE:
+       case SLAPI_CONN_AUTHMETHOD:
+       case SLAPI_CONN_CERT:
+       case SLAPI_X_CONN_IS_UDP:
+       case SLAPI_X_CONN_CLIENTPATH:
+       case SLAPI_X_CONN_SERVERPATH:
        case SLAPI_IBM_CONN_DN_ALT:
        case SLAPI_IBM_CONN_DN_ORIG:
        case SLAPI_IBM_GSSAPI_CONTEXT:
@@ -185,6 +195,11 @@ isOkNetscapeParam( int param )
        case SLAPI_CHANGENUMBER:
        case SLAPI_LOG_OPERATION:
        case SLAPI_DBSIZE:
+       case SLAPI_RESULT_CODE:
+       case SLAPI_RESULT_TEXT:
+       case SLAPI_RESULT_MATCHED:
+       case SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN:
+       case SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN:
                return LDAP_SUCCESS;
        default:
                return INVALID_PARAM;
@@ -257,7 +272,7 @@ set( Slapi_PBlock *pb, int param, void *val )
 
        Lock( pb );     
 
-       if ( pb->numParams == MAX_PARAMS ) {
+       if ( pb->numParams == PBLOCK_MAX_PARAMS ) {
                unLock( pb );
                return PBLOCK_ERROR; 
        }
@@ -350,7 +365,7 @@ slapi_pblock_destroy( Slapi_PBlock* pb )
                str = NULL;
        }
 
-       get( pb, SLAPI_CONN_AUTHTYPE, (void **)&str );
+       get( pb, SLAPI_CONN_AUTHMETHOD, (void **)&str );
        if ( str != NULL ) {
                ch_free( str );
                str = NULL;
@@ -367,6 +382,18 @@ slapi_pblock_destroy( Slapi_PBlock* pb )
                ch_free( str );
        }
 
+       get( pb, SLAPI_RESULT_TEXT, (void **)&str );
+       if ( str != NULL ) {
+               ch_free( str );
+               str = NULL;
+       }
+
+       get( pb, SLAPI_RESULT_MATCHED, (void **)&str );
+       if ( str != NULL ) {
+               ch_free( str );
+               str = NULL;
+       }
+
        ldap_pvt_thread_mutex_destroy( &pb->pblockMutex );
 
        ch_free( pb ); 
@@ -390,9 +417,11 @@ slapi_pblock_set( Slapi_PBlock *pb, int arg, void *value )
 
        switch ( arg ) {
         case SLAPI_CONN_DN:
-        case SLAPI_CONN_AUTHTYPE:
+        case SLAPI_CONN_AUTHMETHOD:
         case SLAPI_IBM_CONN_DN_ALT:
         case SLAPI_IBM_CONN_DN_ORIG:
+        case SLAPI_RESULT_TEXT:
+        case SLAPI_RESULT_MATCHED:
                if ( value != NULL ) {
                        pTmp = (void *)slapi_ch_strdup((char *)value);
                        if ( pTmp == NULL ) {
@@ -434,3 +463,32 @@ slapi_pblock_check_params( Slapi_PBlock *pb, int flag )
 #endif /* LDAP_SLAPI */
 }
 
+/*
+ * OpenLDAP extension
+ */
+int
+slapi_x_pblock_get_first( Backend *be, Slapi_PBlock **pb )
+{
+#if defined(LDAP_SLAPI)
+       assert( pb );
+       *pb = (Slapi_PBlock *)be->be_pb;
+       return (*pb == NULL ? LDAP_OTHER : LDAP_SUCCESS);
+#else /* LDAP_SLAPI */
+       return LDAP_OTHER;
+#endif /* LDAP_SLAPI */
+}
+
+/*
+ * OpenLDAP extension
+ */
+int
+slapi_x_pblock_get_next( Slapi_PBlock **pb )
+{
+#if defined(LDAP_SLAPI)
+       assert( pb );
+       return slapi_pblock_get( *pb, SLAPI_IBM_PBLOCK, pb );
+#else /* LDAP_SLAPI */
+       return LDAP_OTHER;
+#endif /* LDAP_SLAPI */
+}
+