openldap/servers/slapd/slapi/slapi.h
Luke Howard 48d1046a35 Make slapi_pblock directly overlaid on operation/connection/slapreply
structures

This removes a lot of copying. It's still a bit tricky where the internal
slapd data types are different to those exposed via SLAPI (eg. modifications)
or the internal values are not allocated on the heap (eg. controls). Some
copying is necessary in these cases.
2005-07-25 04:19:33 +00:00

191 lines
4.9 KiB
C

/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
* Copyright 2002-2005 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>.
*/
/* 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
*/
#ifdef LDAP_SLAPI /* SLAPI is OPTIONAL */
#ifndef _SLAPI_H
#define _SLAPI_H
LDAP_BEGIN_DECL
/*
* Quick 'n' dirty to make struct slapi_* in slapi-plugin.h opaque
*/
#define slapi_entry slap_entry
#define slapi_attr slap_attr
#define slapi_value berval
#define slapi_valueset berval *
#define slapi_filter slap_filter
LDAP_END_DECL
#include <slapi-plugin.h>
LDAP_BEGIN_DECL
#define SLAPI_OVERLAY_NAME "slapi"
#define SLAPI_OPERATION_PBLOCK(_op) ((_op)->o_callback->sc_private)
#define SLAPI_CONNECTION_PBLOCK(_conn) ((_conn)->c_pb);
#define SLAPI_BACKEND_PBLOCK(_be) ((_be)->be_pb)
#define SLAPI_OPERATION_EXTENSIONS(_op) ((_op)->o_hdr->oh_extensions)
#define SLAPI_CONNECTION_EXTENSIONS(_conn) ((_conn)->c_extensions)
#define SLAPI_CONTROL_MANAGEDSAIT_OID LDAP_CONTROL_MANAGEDSAIT
#define SLAPI_CONTROL_SORTEDSEARCH_OID LDAP_CONTROL_SORTREQUEST
#define SLAPI_CONTROL_PAGED_RESULTS_OID LDAP_CONTROL_PAGEDRESULTS
typedef int (*SLAPI_FUNC)( Slapi_PBlock *pb );
typedef struct _slapi_control {
int s_ctrl_num;
char **s_ctrl_oids;
unsigned long *s_ctrl_ops;
} Slapi_Control;
typedef struct _ExtendedOp {
struct berval ext_oid;
SLAPI_FUNC ext_func;
Backend *ext_be;
struct _ExtendedOp *ext_next;
} ExtendedOp;
/* Computed attribute support */
struct _computed_attr_context {
Slapi_PBlock *cac_pb;
Operation *cac_op;
void *cac_private;
};
/* for slapi_attr_type_cmp() */
#define SLAPI_TYPE_CMP_EXACT 0
#define SLAPI_TYPE_CMP_BASE 1
#define SLAPI_TYPE_CMP_SUBTYPE 2
typedef enum slapi_extension_e {
SLAPI_X_EXT_CONNECTION = 0,
SLAPI_X_EXT_OPERATION = 1,
SLAPI_X_EXT_MAX = 2
} slapi_extension_t;
/*
* Was: slapi_pblock.h
*/
#ifndef NO_PBLOCK_CLASS /* where's this test from? */
typedef enum slapi_pblock_class_e {
PBLOCK_CLASS_INVALID = 0,
PBLOCK_CLASS_INTEGER,
PBLOCK_CLASS_LONG_INTEGER,
PBLOCK_CLASS_POINTER,
PBLOCK_CLASS_FUNCTION_POINTER
} slapi_pblock_class_t;
#define PBLOCK_SUCCESS (0)
#define PBLOCK_ERROR (-1)
#define PBLOCK_MAX_PARAMS 100
struct slapi_pblock {
ldap_pvt_thread_mutex_t pblockMutex;
int ckParams;
int numParams;
int curParams[PBLOCK_MAX_PARAMS];
void *curVals[PBLOCK_MAX_PARAMS];
/* native types */
Connection *pconn;
Operation *pop;
SlapReply rs;
int internal_op;
char textbuf[ SLAP_TEXT_BUFLEN ];
};
#endif /* !NO_PBLOCK_CLASS */
/*
* Was: plugin.h
*/
#define SLAPI_PLUGIN_IS_POST_FN(x) ((x) >= SLAPI_PLUGIN_POST_BIND_FN && (x) <= SLAPI_PLUGIN_BE_POST_DELETE_FN)
#define SLAPI_OPERATION_PARAMETERS 138
#define SLAPI_PLUGIN_DB_TEST_FN 227
#define SLAPI_PLUGIN_DB_NO_ACL 250
/* DS 5.x Computed Attribute Callbacks (not exposed) */
#define SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN 1200
#define SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN 1201
#define SLAPI_ENTRY_PRE_OP 52
#define SLAPI_ENTRY_POST_OP 53
/* This is the spelling in the SunOne 5.2 docs */
#define SLAPI_RES_CONTROLS SLAPI_RESCONTROLS
#define SLAPI_ABANDON_MSGID 120
#define SLAPI_SEQ_TYPE 150
#define SLAPI_SEQ_ATTRNAME 151
#define SLAPI_SEQ_VAL 152
#define SLAPI_MR_FILTER_ENTRY 170
#define SLAPI_MR_FILTER_TYPE 171
#define SLAPI_MR_FILTER_VALUE 172
#define SLAPI_MR_FILTER_OID 173
#define SLAPI_MR_FILTER_DNATTRS 174
#define SLAPI_LDIF2DB_FILE 180
#define SLAPI_LDIF2DB_REMOVEDUPVALS 185
#define SLAPI_DB2LDIF_PRINTKEY 183
#define SLAPI_PARENT_TXN 190
#define SLAPI_TXN 191
#define SLAPI_CHANGENUMBER 197
#define SLAPI_LOG_OPERATION 198
#define SLAPI_DBSIZE 199
/* really private stuff */
#define SLAPI_X_CONFIG_ARGV 1400
#define SLAPI_X_INTOP_FLAGS 1401
#define SLAPI_X_INTOP_RESULT_CALLBACK 1402
#define SLAPI_X_INTOP_SEARCH_ENTRY_CALLBACK 1403
#define SLAPI_X_INTOP_REFERRAL_ENTRY_CALLBACK 1404
#define SLAPI_X_INTOP_CALLBACK_DATA 1405
#define SLAPI_X_OLD_RESCONTROLS 1406
#define SLAPI_IBM_PBLOCK -3
LDAP_SLAPI_V (ldap_pvt_thread_mutex_t) slapi_hn_mutex;
LDAP_SLAPI_V (ldap_pvt_thread_mutex_t) slapi_time_mutex;
LDAP_SLAPI_V (ldap_pvt_thread_mutex_t) slapi_printmessage_mutex;
LDAP_SLAPI_V (char *) slapi_log_file;
LDAP_SLAPI_V (int) slapi_log_level;
#include "proto-slapi.h"
#endif /* _SLAPI_H */
#endif /* LDAP_SLAPI */