2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 * Copyright 2002-2005 The OpenLDAP Foundation.
5 * Portions Copyright 1997,2002-2003 IBM Corporation.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
12 * A copy of this license is available in the file LICENSE in the
13 * top-level directory of the distribution or, alternatively, at
14 * <http://www.OpenLDAP.org/license.html>.
17 * This work was initially developed by IBM Corporation for use in
18 * IBM products and subsequently ported to OpenLDAP Software by
19 * Steve Omrani. Additional significant contributors include:
23 #ifdef LDAP_SLAPI /* SLAPI is OPTIONAL */
28 #include "ibm_pblock_params.h"
33 * Quick 'n' dirty to make struct slapi_* in slapi-plugin.h opaque
35 #define slapi_entry slap_entry
36 #define slapi_attr slap_attr
37 #define slapi_value berval
38 #define slapi_valueset berval*
39 #define slapi_filter slap_filter
43 #include <slapi-plugin.h>
54 typedef struct _Audit_record Audit_record;
56 #define SLAPI_OVERLAY_NAME "slapi"
58 #define SLAPI_CONTROL_MANAGEDSAIT_OID LDAP_CONTROL_MANAGEDSAIT
59 #define SLAPI_CONTROL_SORTEDSEARCH_OID LDAP_CONTROL_SORTREQUEST
60 #define SLAPI_CONTROL_PAGED_RESULTS_OID LDAP_CONTROL_PAGEDRESULTS
62 typedef int (*SLAPI_FUNC)( Slapi_PBlock *pb );
64 typedef struct _slapi_control {
67 unsigned long *s_ctrl_ops;
70 typedef struct _ExtendedOp {
71 struct berval ext_oid;
74 struct _ExtendedOp *ext_next;
77 /* Computed attribute support */
78 struct _computed_attr_context {
81 AccessControlState *cac_acl_state;
85 /* for slapi_attr_type_cmp() */
86 #define SLAPI_TYPE_CMP_EXACT 0
87 #define SLAPI_TYPE_CMP_BASE 1
88 #define SLAPI_TYPE_CMP_SUBTYPE 2
90 typedef enum slapi_extension_e {
91 SLAPI_X_EXT_CONNECTION = 0,
92 SLAPI_X_EXT_OPERATION = 1,
100 #ifndef NO_PBLOCK_CLASS /* where's this test from? */
102 typedef enum slapi_pblock_class_e {
103 PBLOCK_CLASS_INVALID = 0,
104 PBLOCK_CLASS_INTEGER,
105 PBLOCK_CLASS_LONG_INTEGER,
106 PBLOCK_CLASS_POINTER,
107 PBLOCK_CLASS_FUNCTION_POINTER
108 } slapi_pblock_class_t;
110 #define PBLOCK_SUCCESS (0)
111 #define PBLOCK_ERROR (-1)
112 #define PBLOCK_MAX_PARAMS 100
114 struct slapi_pblock {
115 ldap_pvt_thread_mutex_t pblockMutex;
118 int curParams[PBLOCK_MAX_PARAMS];
119 void *curVals[PBLOCK_MAX_PARAMS];
122 #endif /* !NO_PBLOCK_CLASS */
128 #define SLAPI_PLUGIN_IS_POST_FN(x) ((x) >= SLAPI_PLUGIN_POST_BIND_FN && (x) <= SLAPI_PLUGIN_POST_RESULT_FN)
131 * Attribute flags returned by slapi_attr_get_flags()
133 #define SLAPI_ATTR_FLAG_SINGLE 0x0001
134 #define SLAPI_ATTR_FLAG_OPATTR 0x0002
135 #define SLAPI_ATTR_FLAG_READONLY 0x0004
136 #define SLAPI_ATTR_FLAG_STD_ATTR SLAPI_ATTR_FLAG_READONLY
137 #define SLAPI_ATTR_FLAG_OBSOLETE 0x0040
138 #define SLAPI_ATTR_FLAG_COLLECTIVE 0x0080
139 #define SLAPI_ATTR_FLAG_NOUSERMOD 0x0100
144 #define SLAPI_ACL_COMPARE 0x01
145 #define SLAPI_ACL_SEARCH 0x02
146 #define SLAPI_ACL_READ 0x04
147 #define SLAPI_ACL_WRITE 0x08
148 #define SLAPI_ACL_DELETE 0x10
149 #define SLAPI_ACL_ADD 0x20
150 #define SLAPI_ACL_SELF 0x40
151 #define SLAPI_ACL_PROXY 0x80
152 #define SLAPI_ACL_ALL 0x7f
155 * Plugin types universally supported by SLAPI
158 #define SLAPI_PLUGIN_DATABASE 1
159 #define SLAPI_PLUGIN_EXTENDEDOP 2
160 #define SLAPI_PLUGIN_PREOPERATION 3
161 #define SLAPI_PLUGIN_POSTOPERATION 4
162 #define SLAPI_PLUGIN_MATCHINGRULE 5
163 #define SLAPI_PLUGIN_SYNTAX 6
164 /* XXX this is SLAPI_PLUGIN_ACL in SunDS */
165 #define SLAPI_PLUGIN_AUDIT 7
167 * The following plugin types are reserved for future
168 * Sun ONE DS compatability.
170 #define SLAPI_PLUGIN_BEPREOPERATION 8
171 #define SLAPI_PLUGIN_BEPOSTOPERATION 9
172 #define SLAPI_PLUGIN_ENTRY 10
173 #define SLAPI_PLUGIN_TYPE_OBJECT 11
174 #define SLAPI_PLUGIN_INTERNAL_PREOPERATION 12
175 #define SLAPI_PLUGIN_INTERNAL_POSTOPERATION 13
176 #define SLAPI_PLUGIN_PWD_STORAGE_SCHEME 14
177 #define SLAPI_PLUGIN_VATTR_SP 15
178 #define SLAPI_PLUGIN_REVER_PWD_STORAGE_SCHEME 16
180 #define SLAPI_PLUGIN_EXTENDED_SENT_RESULT -1
181 #define SLAPI_PLUGIN_EXTENDED_NOT_HANDLED -2
183 #define SLAPI_BIND_SUCCESS 0
184 #define SLAPI_BIND_FAIL 2
185 #define SLAPI_BIND_ANONYMOUS 3
187 #define SLAPI_BACKEND 130
188 #define SLAPI_CONNECTION 131
189 #define SLAPI_OPERATION 132
190 #define SLAPI_REQUESTOR_ISROOT 133
191 #define SLAPI_BE_MONITORDN 134
192 #define SLAPI_BE_TYPE 135
193 #define SLAPI_BE_READONLY 136
194 #define SLAPI_BE_LASTMOD 137
195 #define SLAPI_OPERATION_PARAMETERS 138
196 #define SLAPI_CONN_ID 139
198 #define SLAPI_OPINITIATED_TIME 140
199 #define SLAPI_REQUESTOR_DN 141
200 #define SLAPI_REQUESTOR_ISUPDATEDN 142
201 #define SLAPI_IS_REPLICATED_OPERATION SLAPI_REQUESTOR_ISUPDATEDN
202 #define SLAPI_CONN_DN 143
203 #define SLAPI_CONN_AUTHTYPE 144
204 #define SLAPI_CONN_CLIENTIP 145
205 #define SLAPI_CONN_SERVERIP 146
206 #define SLAPI_X_CONN_CLIENTPATH 1300
207 #define SLAPI_X_CONN_SERVERPATH 1301
208 #define SLAPI_X_CONN_IS_UDP 1302
209 #define SLAPI_X_CONN_SSF 1303
210 #define SLAPI_X_CONN_SASL_CONTEXT 1304
212 /* really private stuff */
213 #define SLAPI_X_CONFIG_ARGV 1400
214 #define SLAPI_X_INTOP_FLAGS 1401
215 #define SLAPI_X_INTOP_RESULT_CALLBACK 1402
216 #define SLAPI_X_INTOP_SEARCH_ENTRY_CALLBACK 1403
217 #define SLAPI_X_INTOP_REFERRAL_ENTRY_CALLBACK 1404
218 #define SLAPI_X_INTOP_CALLBACK_DATA 1405
220 #define SLAPD_AUTH_NONE "none"
221 #define SLAPD_AUTH_SIMPLE "simple"
222 #define SLAPD_AUTH_SSL "SSL"
223 #define SLAPD_AUTH_SASL "SASL "
225 #define SLAPI_PLUGIN 3
226 #define SLAPI_PLUGIN_PRIVATE 4
227 #define SLAPI_PLUGIN_TYPE 5
228 #define SLAPI_PLUGIN_ARGV 6
229 #define SLAPI_PLUGIN_ARGC 7
230 #define SLAPI_PLUGIN_VERSION 8
232 #define SLAPI_PLUGIN_OPRETURN 9
233 #define SLAPI_PLUGIN_OBJECT 10
234 #define SLAPI_PLUGIN_DESTROY_FN 11
236 #define SLAPI_PLUGIN_DESCRIPTION 12
238 #define SLAPI_PLUGIN_INTOP_RESULT 15
239 #define SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES 16
240 #define SLAPI_PLUGIN_INTOP_SEARCH_REFERRALS 17
242 #define SLAPI_PLUGIN_DB_BIND_FN 200
243 #define SLAPI_PLUGIN_DB_UNBIND_FN 201
244 #define SLAPI_PLUGIN_DB_SEARCH_FN 202
245 #define SLAPI_PLUGIN_DB_COMPARE_FN 203
246 #define SLAPI_PLUGIN_DB_MODIFY_FN 204
247 #define SLAPI_PLUGIN_DB_MODRDN_FN 205
248 #define SLAPI_PLUGIN_DB_ADD_FN 206
249 #define SLAPI_PLUGIN_DB_DELETE_FN 207
250 #define SLAPI_PLUGIN_DB_ABANDON_FN 208
251 #define SLAPI_PLUGIN_DB_CONFIG_FN 209
252 #define SLAPI_PLUGIN_CLOSE_FN 210
253 #define SLAPI_PLUGIN_DB_FLUSH_FN 211
254 #define SLAPI_PLUGIN_START_FN 212
255 #define SLAPI_PLUGIN_DB_SEQ_FN 213
256 #define SLAPI_PLUGIN_DB_ENTRY_FN 214
257 #define SLAPI_PLUGIN_DB_REFERRAL_FN 215
258 #define SLAPI_PLUGIN_DB_RESULT_FN 216
259 #define SLAPI_PLUGIN_DB_LDIF2DB_FN 217
260 #define SLAPI_PLUGIN_DB_DB2LDIF_FN 218
261 #define SLAPI_PLUGIN_DB_BEGIN_FN 219
262 #define SLAPI_PLUGIN_DB_COMMIT_FN 220
263 #define SLAPI_PLUGIN_DB_ABORT_FN 221
264 #define SLAPI_PLUGIN_DB_ARCHIVE2DB_FN 222
265 #define SLAPI_PLUGIN_DB_DB2ARCHIVE_FN 223
266 #define SLAPI_PLUGIN_DB_NEXT_SEARCH_ENTRY_FN 224
267 #define SLAPI_PLUGIN_DB_FREE_RESULT_SET_FN 225
268 #define SLAPI_PLUGIN_DB_SIZE_FN 226
269 #define SLAPI_PLUGIN_DB_TEST_FN 227
270 #define SLAPI_PLUGIN_DB_NO_ACL 250
272 #define SLAPI_PLUGIN_EXT_OP_FN 300
273 #define SLAPI_PLUGIN_EXT_OP_OIDLIST 301
274 #define SLAPI_PLUGIN_PRE_BIND_FN 401
275 #define SLAPI_PLUGIN_PRE_UNBIND_FN 402
276 #define SLAPI_PLUGIN_PRE_SEARCH_FN 403
277 #define SLAPI_PLUGIN_PRE_COMPARE_FN 404
278 #define SLAPI_PLUGIN_PRE_MODIFY_FN 405
279 #define SLAPI_PLUGIN_PRE_MODRDN_FN 406
280 #define SLAPI_PLUGIN_PRE_ADD_FN 407
281 #define SLAPI_PLUGIN_PRE_DELETE_FN 408
282 #define SLAPI_PLUGIN_PRE_ABANDON_FN 409
283 #define SLAPI_PLUGIN_PRE_ENTRY_FN 410
284 #define SLAPI_PLUGIN_PRE_REFERRAL_FN 411
285 #define SLAPI_PLUGIN_PRE_RESULT_FN 412
286 #define SLAPI_PLUGIN_POST_BIND_FN 501
287 #define SLAPI_PLUGIN_POST_UNBIND_FN 502
288 #define SLAPI_PLUGIN_POST_SEARCH_FN 503
289 #define SLAPI_PLUGIN_POST_COMPARE_FN 504
290 #define SLAPI_PLUGIN_POST_MODIFY_FN 505
291 #define SLAPI_PLUGIN_POST_MODRDN_FN 506
292 #define SLAPI_PLUGIN_POST_ADD_FN 507
293 #define SLAPI_PLUGIN_POST_DELETE_FN 508
294 #define SLAPI_PLUGIN_POST_ABANDON_FN 509
295 #define SLAPI_PLUGIN_POST_ENTRY_FN 510
296 #define SLAPI_PLUGIN_POST_REFERRAL_FN 511
297 #define SLAPI_PLUGIN_POST_RESULT_FN 512
299 #define SLAPI_OPERATION_TYPE 590
301 #define SLAPI_PLUGIN_MR_FILTER_CREATE_FN 600
302 #define SLAPI_PLUGIN_MR_INDEXER_CREATE_FN 601
303 #define SLAPI_PLUGIN_MR_FILTER_MATCH_FN 602
304 #define SLAPI_PLUGIN_MR_FILTER_INDEX_FN 603
305 #define SLAPI_PLUGIN_MR_FILTER_RESET_FN 604
306 #define SLAPI_PLUGIN_MR_INDEX_FN 605
307 #define SLAPI_PLUGIN_MR_OID 610
308 #define SLAPI_PLUGIN_MR_TYPE 611
309 #define SLAPI_PLUGIN_MR_VALUE 612
310 #define SLAPI_PLUGIN_MR_VALUES 613
311 #define SLAPI_PLUGIN_MR_KEYS 614
312 #define SLAPI_PLUGIN_MR_FILTER_REUSABLE 615
313 #define SLAPI_PLUGIN_MR_QUERY_OPERATOR 616
314 #define SLAPI_PLUGIN_MR_USAGE 617
316 #define SLAPI_OP_LESS 1
317 #define SLAPI_OP_LESS_OR_EQUAL 2
318 #define SLAPI_OP_EQUAL 3
319 #define SLAPI_OP_GREATER_OR_EQUAL 4
320 #define SLAPI_OP_GREATER 5
321 #define SLAPI_OP_SUBSTRING 6
323 #define SLAPI_PLUGIN_MR_USAGE_INDEX 0
324 #define SLAPI_PLUGIN_MR_USAGE_SORT 1
326 #define SLAPI_MATCHINGRULE_NAME 1
327 #define SLAPI_MATCHINGRULE_OID 2
328 #define SLAPI_MATCHINGRULE_DESC 3
329 #define SLAPI_MATCHINGRULE_SYNTAX 4
330 #define SLAPI_MATCHINGRULE_OBSOLETE 5
332 #define SLAPI_PLUGIN_SYNTAX_FILTER_AVA 700
333 #define SLAPI_PLUGIN_SYNTAX_FILTER_SUB 701
334 #define SLAPI_PLUGIN_SYNTAX_VALUES2KEYS 702
335 #define SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_AVA 703
336 #define SLAPI_PLUGIN_SYNTAX_ASSERTION2KEYS_SUB 704
337 #define SLAPI_PLUGIN_SYNTAX_NAMES 705
338 #define SLAPI_PLUGIN_SYNTAX_OID 706
339 #define SLAPI_PLUGIN_SYNTAX_FLAGS 707
340 #define SLAPI_PLUGIN_SYNTAX_COMPARE 708
342 #define SLAPI_PLUGIN_ACL_INIT 730
343 #define SLAPI_PLUGIN_ACL_SYNTAX_CHECK 731
344 #define SLAPI_PLUGIN_ACL_ALLOW_ACCESS 732
345 #define SLAPI_PLUGIN_ACL_MODS_ALLOWED 733
346 #define SLAPI_PLUGIN_ACL_MODS_UPDATE 734
348 #define SLAPI_OPERATION_AUTHTYPE 741
349 #define SLAPI_OPERATION_ID 742
350 #define SLAPI_CONN_CERT 743
351 #define SLAPI_CONN_AUTHMETHOD 746
353 #define SLAPI_RESULT_CODE 881
354 #define SLAPI_RESULT_TEXT 882
355 #define SLAPI_RESULT_MATCHED 883
357 #define SLAPI_PLUGIN_SYNTAX_FLAG_ORKEYS 1
358 #define SLAPI_PLUGIN_SYNTAX_FLAG_ORDERING 2
360 #define SLAPI_PLUGIN_AUDIT_DATA 1100
361 #define SLAPI_PLUGIN_AUDIT_FN 1101
363 /* DS 5.x Computed Attribute Callbacks (not exposed) */
364 #define SLAPI_PLUGIN_COMPUTE_EVALUATOR_FN 1200
365 #define SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN 1201
367 #define SLAPI_X_PLUGIN_PRE_GROUP_FN 1202
368 #define SLAPI_X_PLUGIN_POST_GROUP_FN 1203
370 /* backend_group extension */
371 #define SLAPI_X_GROUP_ENTRY 1250 /* e */
372 #define SLAPI_X_GROUP_ATTRIBUTE 1251 /* group_at */
373 #define SLAPI_X_GROUP_OPERATION_DN 1252 /* op_ndn */
374 #define SLAPI_X_GROUP_TARGET_ENTRY 1253 /* target */
376 #define SLAPI_MANAGEDSAIT 1000
378 #define SLAPI_CONFIG_FILENAME 40
379 #define SLAPI_CONFIG_LINENO 41
380 #define SLAPI_CONFIG_ARGC 42
381 #define SLAPI_CONFIG_ARGV 43
383 #define SLAPI_TARGET_ADDRESS 48
384 #define SLAPI_TARGET_UNIQUEID 49
385 #define SLAPI_TARGET_DN 50
386 #define SLAPI_REQCONTROLS 51
388 #define SLAPI_ENTRY_PRE_OP 52
389 #define SLAPI_ENTRY_POST_OP 53
391 #define SLAPI_RESCONTROLS 55
392 /* This is the spelling in the SunOne 5.2 docs */
393 #define SLAPI_RES_CONTROLS SLAPI_RESCONTROLS
394 #define SLAPI_ADD_RESCONTROL 56
396 #define SLAPI_ADD_TARGET SLAPI_TARGET_DN
397 #define SLAPI_ADD_ENTRY 60
398 #define SLAPI_ADD_EXISTING_DN_ENTRY 61
399 #define SLAPI_ADD_PARENT_ENTRY 62
400 #define SLAPI_ADD_PARENT_UNIQUEID 63
401 #define SLAPI_ADD_EXISTING_UNIQUEID_ENTRY 64
403 #define SLAPI_BIND_TARGET SLAPI_TARGET_DN
404 #define SLAPI_BIND_METHOD 70
405 #define SLAPI_BIND_CREDENTIALS 71
406 #define SLAPI_BIND_SASLMECHANISM 72
407 #define SLAPI_BIND_RET_SASLCREDS 73
409 #define SLAPI_COMPARE_TARGET SLAPI_TARGET_DN
410 #define SLAPI_COMPARE_TYPE 80
411 #define SLAPI_COMPARE_VALUE 81
413 #define SLAPI_DELETE_TARGET SLAPI_TARGET_DN
414 #define SLAPI_DELETE_EXISTING_ENTRY SLAPI_ADD_EXISTING_DN_ENTRY
416 #define SLAPI_MODIFY_TARGET SLAPI_TARGET_DN
417 #define SLAPI_MODIFY_MODS 90
418 #define SLAPI_MODIFY_EXISTING_ENTRY SLAPI_ADD_EXISTING_DN_ENTRY
420 #define SLAPI_MODRDN_TARGET SLAPI_TARGET_DN
421 #define SLAPI_MODRDN_NEWRDN 100
422 #define SLAPI_MODRDN_DELOLDRDN 101
423 #define SLAPI_MODRDN_NEWSUPERIOR 102
424 #define SLAPI_MODRDN_EXISTING_ENTRY SLAPI_ADD_EXISTING_DN_ENTRY
425 #define SLAPI_MODRDN_PARENT_ENTRY 104
426 #define SLAPI_MODRDN_NEWPARENT_ENTRY 105
427 #define SLAPI_MODRDN_TARGET_ENTRY 106
428 #define SLAPI_MODRDN_NEWSUPERIOR_ADDRESS 107
430 #define SLAPI_SEARCH_TARGET SLAPI_TARGET_DN
431 #define SLAPI_SEARCH_SCOPE 110
432 #define SLAPI_SEARCH_DEREF 111
433 #define SLAPI_SEARCH_SIZELIMIT 112
434 #define SLAPI_SEARCH_TIMELIMIT 113
435 #define SLAPI_SEARCH_FILTER 114
436 #define SLAPI_SEARCH_STRFILTER 115
437 #define SLAPI_SEARCH_ATTRS 116
438 #define SLAPI_SEARCH_ATTRSONLY 117
440 #define SLAPI_ABANDON_MSGID 120
442 #define SLAPI_SEQ_TYPE 150
443 #define SLAPI_SEQ_ATTRNAME 151
444 #define SLAPI_SEQ_VAL 152
446 #define SLAPI_EXT_OP_REQ_OID 160
447 #define SLAPI_EXT_OP_REQ_VALUE 161
448 #define SLAPI_EXT_OP_RET_OID 162
449 #define SLAPI_EXT_OP_RET_VALUE 163
451 #define SLAPI_MR_FILTER_ENTRY 170
452 #define SLAPI_MR_FILTER_TYPE 171
453 #define SLAPI_MR_FILTER_VALUE 172
454 #define SLAPI_MR_FILTER_OID 173
455 #define SLAPI_MR_FILTER_DNATTRS 174
457 #define SLAPI_LDIF2DB_FILE 180
458 #define SLAPI_LDIF2DB_REMOVEDUPVALS 185
460 #define SLAPI_DB2LDIF_PRINTKEY 183
462 #define SLAPI_PARENT_TXN 190
463 #define SLAPI_TXN 191
465 #define SLAPI_SEARCH_RESULT_SET 193
466 #define SLAPI_SEARCH_RESULT_ENTRY 194
467 #define SLAPI_NENTRIES 195
468 #define SLAPI_SEARCH_REFERRALS 196
470 #define SLAPI_CHANGENUMBER 197
471 #define SLAPI_LOG_OPERATION 198
473 #define SLAPI_DBSIZE 199
475 #define SLAPI_LOG_FATAL 0
476 #define SLAPI_LOG_TRACE 1
477 #define SLAPI_LOG_PACKETS 2
478 #define SLAPI_LOG_ARGS 3
479 #define SLAPI_LOG_CONNS 4
480 #define SLAPI_LOG_BER 5
481 #define SLAPI_LOG_FILTER 6
482 #define SLAPI_LOG_CONFIG 7
483 #define SLAPI_LOG_ACL 8
484 #define SLAPI_LOG_SHELL 9
485 #define SLAPI_LOG_PARSE 10
486 #define SLAPI_LOG_HOUSE 11
487 #define SLAPI_LOG_REPL 12
488 #define SLAPI_LOG_CACHE 13
489 #define SLAPI_LOG_PLUGIN 14
491 #define SLAPI_OPERATION_BIND 0x00000001L
492 #define SLAPI_OPERATION_UNBIND 0x00000002L
493 #define SLAPI_OPERATION_SEARCH 0x00000004L
494 #define SLAPI_OPERATION_MODIFY 0x00000008L
495 #define SLAPI_OPERATION_ADD 0x00000010L
496 #define SLAPI_OPERATION_DELETE 0x00000020L
497 #define SLAPI_OPERATION_MODDN 0x00000040L
498 #define SLAPI_OPERATION_MODRDN SLAPI_OPERATION_MODDN
499 #define SLAPI_OPERATION_COMPARE 0x00000080L
500 #define SLAPI_OPERATION_ABANDON 0x00000100L
501 #define SLAPI_OPERATION_EXTENDED 0x00000200L
502 #define SLAPI_OPERATION_ANY 0xFFFFFFFFL
503 #define SLAPI_OPERATION_NONE 0x00000000L
507 #include "proto-slapi.h"
509 #endif /* _SLAPI_H */
510 #endif /* LDAP_SLAPI */