summaryrefslogtreecommitdiffstats
path: root/servers/slapd/slapi/slapi.h
blob: 1bb849921e07c27cf79cfee5de162dbdd4c67201 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
 *
 * Copyright 2002-2018 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	Entry
#define slapi_attr	Attribute
#define slapi_value	berval
#define slapi_valueset	berval *
#define slapi_filter	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_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;

struct slapi_dn {
	unsigned char flag;
	struct berval dn;
	struct berval ndn;
};

struct slapi_rdn {
	unsigned char flag;
	struct berval bv;
	LDAPRDN rdn;
};

/*
 * 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

union slapi_pblock_value {
	int pv_integer;
	long pv_long_integer;
	void *pv_pointer;
	int (*pv_function_pointer)();
};

struct slapi_pblock {
	ldap_pvt_thread_mutex_t	pb_mutex;
	int			pb_nParams;
	int			pb_params[PBLOCK_MAX_PARAMS];
	union slapi_pblock_value pb_values[PBLOCK_MAX_PARAMS];
	/* native types */
	Connection		*pb_conn;
	Operation		*pb_op;
	SlapReply		*pb_rs;
	int			pb_intop;
	char			pb_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_IBM_PBLOCK			-3

#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_OPERATION_PARAMETERS		138

#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_CHANGENUMBER			197
#define	SLAPI_LOG_OPERATION			198

#define SLAPI_DBSIZE				199

#define	SLAPI_PLUGIN_DB_TEST_FN			227
#define SLAPI_PLUGIN_DB_NO_ACL        		250

/* OpenLDAP private parametrs */
#define SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN	1200
#define SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN	1201

#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

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 */