slapi.h revision 1.1.1.6
1/*	$NetBSD: slapi.h,v 1.1.1.6 2018/02/06 01:53:18 christos Exp $	*/
2
3/* $OpenLDAP$ */
4/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 *
6 * Copyright 2002-2017 The OpenLDAP Foundation.
7 * Portions Copyright 1997,2002-2003 IBM Corporation.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted only as authorized by the OpenLDAP
12 * Public License.
13 *
14 * A copy of this license is available in the file LICENSE in the
15 * top-level directory of the distribution or, alternatively, at
16 * <http://www.OpenLDAP.org/license.html>.
17 */
18/* ACKNOWLEDGEMENTS:
19 * This work was initially developed by IBM Corporation for use in
20 * IBM products and subsequently ported to OpenLDAP Software by
21 * Steve Omrani.  Additional significant contributors include:
22 *   Luke Howard
23 */
24
25#ifdef LDAP_SLAPI /* SLAPI is OPTIONAL */
26
27#ifndef _SLAPI_H
28#define _SLAPI_H
29
30LDAP_BEGIN_DECL
31
32/*
33 * Quick 'n' dirty to make struct slapi_* in slapi-plugin.h opaque
34 */
35#define slapi_entry	Entry
36#define slapi_attr	Attribute
37#define slapi_value	berval
38#define slapi_valueset	berval *
39#define slapi_filter	Filter
40
41LDAP_END_DECL
42
43#include <slapi-plugin.h>
44
45LDAP_BEGIN_DECL
46
47#define SLAPI_OVERLAY_NAME			"slapi"
48
49#define SLAPI_OPERATION_PBLOCK(_op)		((_op)->o_callback->sc_private)
50#define SLAPI_BACKEND_PBLOCK(_be)		((_be)->be_pb)
51
52#define SLAPI_OPERATION_EXTENSIONS(_op)		((_op)->o_hdr->oh_extensions)
53#define SLAPI_CONNECTION_EXTENSIONS(_conn)	((_conn)->c_extensions)
54
55#define SLAPI_CONTROL_MANAGEDSAIT_OID		LDAP_CONTROL_MANAGEDSAIT
56#define SLAPI_CONTROL_SORTEDSEARCH_OID		LDAP_CONTROL_SORTREQUEST
57#define SLAPI_CONTROL_PAGED_RESULTS_OID		LDAP_CONTROL_PAGEDRESULTS
58
59typedef int (*SLAPI_FUNC)( Slapi_PBlock *pb );
60
61typedef struct _slapi_control {
62        int			s_ctrl_num;
63        char			**s_ctrl_oids;
64        unsigned long		*s_ctrl_ops;
65} Slapi_Control;
66
67typedef struct _ExtendedOp {
68	struct berval		ext_oid;
69        SLAPI_FUNC		ext_func;
70        Backend			*ext_be;
71        struct _ExtendedOp	*ext_next;
72} ExtendedOp;
73
74/* Computed attribute support */
75struct _computed_attr_context {
76	Slapi_PBlock	*cac_pb;
77	Operation	*cac_op;
78	void		*cac_private;
79};
80
81/* for slapi_attr_type_cmp() */
82#define SLAPI_TYPE_CMP_EXACT	0
83#define SLAPI_TYPE_CMP_BASE	1
84#define SLAPI_TYPE_CMP_SUBTYPE	2
85
86typedef enum slapi_extension_e {
87	SLAPI_X_EXT_CONNECTION = 0,
88	SLAPI_X_EXT_OPERATION = 1,
89	SLAPI_X_EXT_MAX = 2
90} slapi_extension_t;
91
92struct slapi_dn {
93	unsigned char flag;
94	struct berval dn;
95	struct berval ndn;
96};
97
98struct slapi_rdn {
99	unsigned char flag;
100	struct berval bv;
101	LDAPRDN rdn;
102};
103
104/*
105 * Was: slapi_pblock.h
106 */
107
108#ifndef NO_PBLOCK_CLASS		/* where's this test from? */
109
110typedef enum slapi_pblock_class_e {
111	PBLOCK_CLASS_INVALID = 0,
112	PBLOCK_CLASS_INTEGER,
113	PBLOCK_CLASS_LONG_INTEGER,
114	PBLOCK_CLASS_POINTER,
115	PBLOCK_CLASS_FUNCTION_POINTER
116} slapi_pblock_class_t;
117
118#define PBLOCK_SUCCESS			(0)
119#define PBLOCK_ERROR			(-1)
120#define PBLOCK_MAX_PARAMS		100
121
122union slapi_pblock_value {
123	int pv_integer;
124	long pv_long_integer;
125	void *pv_pointer;
126	int (*pv_function_pointer)();
127};
128
129struct slapi_pblock {
130	ldap_pvt_thread_mutex_t	pb_mutex;
131	int			pb_nParams;
132	int			pb_params[PBLOCK_MAX_PARAMS];
133	union slapi_pblock_value pb_values[PBLOCK_MAX_PARAMS];
134	/* native types */
135	Connection		*pb_conn;
136	Operation		*pb_op;
137	SlapReply		*pb_rs;
138	int			pb_intop;
139	char			pb_textbuf[ SLAP_TEXT_BUFLEN ];
140};
141
142#endif /* !NO_PBLOCK_CLASS */
143
144/*
145 * Was: plugin.h
146 */
147
148#define SLAPI_PLUGIN_IS_POST_FN(x) ((x) >= SLAPI_PLUGIN_POST_BIND_FN && (x) <= SLAPI_PLUGIN_BE_POST_DELETE_FN)
149
150#define SLAPI_IBM_PBLOCK			-3
151
152#define	SLAPI_ENTRY_PRE_OP			52
153#define	SLAPI_ENTRY_POST_OP			53
154
155/* This is the spelling in the SunOne 5.2 docs */
156#define	SLAPI_RES_CONTROLS	SLAPI_RESCONTROLS
157
158#define SLAPI_ABANDON_MSGID			120
159
160#define SLAPI_OPERATION_PARAMETERS		138
161
162#define SLAPI_SEQ_TYPE				150
163#define SLAPI_SEQ_ATTRNAME			151
164#define SLAPI_SEQ_VAL				152
165
166#define SLAPI_MR_FILTER_ENTRY			170
167#define SLAPI_MR_FILTER_TYPE			171
168#define SLAPI_MR_FILTER_VALUE			172
169#define SLAPI_MR_FILTER_OID			173
170#define SLAPI_MR_FILTER_DNATTRS			174
171
172#define SLAPI_LDIF2DB_FILE			180
173#define SLAPI_LDIF2DB_REMOVEDUPVALS		185
174
175#define SLAPI_DB2LDIF_PRINTKEY			183
176
177#define	SLAPI_CHANGENUMBER			197
178#define	SLAPI_LOG_OPERATION			198
179
180#define SLAPI_DBSIZE				199
181
182#define	SLAPI_PLUGIN_DB_TEST_FN			227
183#define SLAPI_PLUGIN_DB_NO_ACL        		250
184
185/* OpenLDAP private parametrs */
186#define SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN	1200
187#define SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN	1201
188
189#define SLAPI_X_CONFIG_ARGV			1400
190#define SLAPI_X_INTOP_FLAGS			1401
191#define SLAPI_X_INTOP_RESULT_CALLBACK		1402
192#define SLAPI_X_INTOP_SEARCH_ENTRY_CALLBACK	1403
193#define SLAPI_X_INTOP_REFERRAL_ENTRY_CALLBACK	1404
194#define SLAPI_X_INTOP_CALLBACK_DATA		1405
195#define SLAPI_X_OLD_RESCONTROLS			1406
196
197LDAP_SLAPI_V (ldap_pvt_thread_mutex_t)	slapi_hn_mutex;
198LDAP_SLAPI_V (ldap_pvt_thread_mutex_t)	slapi_time_mutex;
199LDAP_SLAPI_V (ldap_pvt_thread_mutex_t)	slapi_printmessage_mutex;
200LDAP_SLAPI_V (char *)			slapi_log_file;
201LDAP_SLAPI_V (int)			slapi_log_level;
202
203#include "proto-slapi.h"
204
205#endif /* _SLAPI_H */
206#endif /* LDAP_SLAPI */
207