-/*
- * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* $OpenLDAP$ */
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 2002-2003 The OpenLDAP Foundation.
+ * Portions Copyright 1997,2002-2003 IBM Corporation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
*/
-/*
- * (C) Copyright IBM Corp. 1997,2002
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is
- * given to IBM Corporation. This software is provided ``as is''
- * without express or implied warranty.
+/* ACKNOWLEDGEMENTS:
+ * This work was initially developed by IBM Corporation for use in
+ * IBM products and subsequently ported to OpenLDAP Software by
+ * Steve Omrani. Additional significant contributors include:
+ * Luke Howard
*/
#include "portable.h"
-#include "slapi_common.h"
#include <slap.h>
#include <slapi.h>
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_X_CONN_SSF:
+ case SLAPI_X_CONN_SASL_CONTEXT:
case SLAPI_IBM_CONN_DN_ALT:
case SLAPI_IBM_CONN_DN_ORIG:
case SLAPI_IBM_GSSAPI_CONTEXT:
case SLAPI_RESULT_MATCHED:
case SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN:
case SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN:
+ case SLAPI_PLUGIN_ACL_ALLOW_ACCESS:
return LDAP_SUCCESS;
default:
return INVALID_PARAM;
set( Slapi_PBlock *pb, int param, void *val )
{
#if defined(LDAP_SLAPI)
- int i;
+ int i, freeit;
+ int addcon = 0;
if ( isValidParam( pb, param ) == INVALID_PARAM ) {
return PBLOCK_ERROR;
Lock( pb );
- if ( pb->numParams == MAX_PARAMS ) {
+ if ( pb->numParams == PBLOCK_MAX_PARAMS ) {
unLock( pb );
return PBLOCK_ERROR;
}
+ if ( param == SLAPI_ADD_RESCONTROL ) {
+ addcon = 1;
+ param = SLAPI_RES_CONTROLS;
+ }
+
+ switch ( param ) {
+ case SLAPI_CONN_DN:
+ case SLAPI_CONN_AUTHMETHOD:
+ case SLAPI_IBM_CONN_DN_ALT:
+ case SLAPI_IBM_CONN_DN_ORIG:
+ case SLAPI_RESULT_TEXT:
+ case SLAPI_RESULT_MATCHED:
+ freeit = 1; break;
+ default:
+ freeit = 0; break;
+ }
for( i = 0; i < pb->numParams; i++ ) {
if ( pb->curParams[i] == param ) {
break;
pb->curParams[i] = param;
pb->numParams++;
}
- pb->curVals[i] = val;
+ if ( addcon ) {
+ LDAPControl **ctrls = pb->curVals[i];
+ int j;
+
+ for (j=0; ctrls[j]; j++);
+ ctrls = ch_realloc( ctrls, (j+2)*sizeof(LDAPControl *) );
+ ctrls[j] = val;
+ ctrls[j+1] = NULL;
+ pb->curVals[i] = ctrls;
+ } else {
+ if ( freeit ) ch_free( pb->curVals[i] );
+ pb->curVals[i] = val;
+ }
unLock( pb );
return LDAP_SUCCESS;