/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2014 The OpenLDAP Foundation.
+ * Copyright 1998-2018 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
LDAP_BEGIN_DECL
+#ifdef LDAP_DEVEL
#define LDAP_COLLECTIVE_ATTRIBUTES
#define LDAP_COMP_MATCH
#define LDAP_SYNC_TIMESTAMP
#define SLAP_CONTROL_X_WHATFAILED
+#define SLAP_CONTROL_X_LAZY_COMMIT
#define SLAP_CONFIG_DELETE
-#define SLAP_AUXPROP_DONTUSECOPY
#ifndef SLAP_SCHEMA_EXPOSE
#define SLAP_SCHEMA_EXPOSE
#endif
+#endif
+#define SLAP_AUXPROP_DONTUSECOPY
#define LDAP_DYNAMIC_OBJECTS
#define SLAP_CONTROL_X_TREE_DELETE LDAP_CONTROL_X_TREE_DELETE
#define SLAP_CONTROL_X_SESSION_TRACKING
#define SLAP_DISTPROC
+#ifndef SLAP_STATS_ETIME
+#define SLAP_STATS_ETIME 1 /* microsecond op timing */
+#endif
+
#ifdef ENABLE_REWRITE
#define SLAP_AUTH_REWRITE 1 /* use librewrite for sasl-regexp */
#endif
/* unknown config file directive */
#define SLAP_CONF_UNKNOWN (-1026)
+/* pseudo error code indicating async operation */
+#define SLAPD_ASYNCOP (-1027)
+
/* We assume "C" locale, that is US-ASCII */
#define ASCII_SPACE(c) ( (c) == ' ' )
#define ASCII_LOWER(c) ( (c) >= 'a' && (c) <= 'z' )
AttributeDescription *si_ad_description;
AttributeDescription *si_ad_seeAlso;
+ /* privateKeys */
+ AttributeDescription *si_ad_x509PrivateKey;
+
/* Undefined Attribute Type */
AttributeType *si_at_undefined;
#define SLAP_ATTR_DONT_FREE_DATA 0x4U
#define SLAP_ATTR_DONT_FREE_VALS 0x8U
#define SLAP_ATTR_SORTED_VALS 0x10U /* values are sorted */
+#define SLAP_ATTR_BIG_MULTI 0x20U /* for backends */
/* These flags persist across an attr_dup() */
#define SLAP_ATTR_PERSISTENT_FLAGS \
- SLAP_ATTR_SORTED_VALS
+ (SLAP_ATTR_SORTED_VALS|SLAP_ATTR_BIG_MULTI)
Attribute *a_next;
#ifdef LDAP_COMP_MATCH
typedef int (BI_acl_attribute) LDAP_P(( Operation *op, Entry *target,
struct berval *entry_ndn, AttributeDescription *entry_at,
BerVarray *vals, slap_access_t access ));
+#ifdef LDAP_X_TXN
+struct OpExtra;
+typedef int (BI_op_txn) LDAP_P(( Operation *op, int txnop, struct OpExtra **ptr ));
+#define SLAP_TXN_BEGIN 1
+#define SLAP_TXN_COMMIT 2
+#define SLAP_TXN_ABORT 3
+#endif
typedef int (BI_conn_func) LDAP_P(( BackendDB *bd, Connection *c ));
typedef BI_conn_func BI_connection_init;
typedef ID (BI_tool_dn2id_get) LDAP_P(( BackendDB *be, struct berval *dn ));
typedef ID (BI_tool_entry_modify) LDAP_P(( BackendDB *be, Entry *e,
struct berval *text ));
-typedef int (BI_tool_entry_delete) LDAP_P(( BackendDB *be, ID id,
+typedef int (BI_tool_entry_delete) LDAP_P(( BackendDB *be, struct berval *ndn,
struct berval *text ));
struct BackendInfo {
* bi_close() is called from backend_shutdown()
* bi_destroy: called to destroy each database, called
* once during shutdown after all bi_db_destroy calls.
- * bi_destory() is called from backend_destroy()
+ * bi_destroy() is called from backend_destroy()
*/
BI_init *bi_init;
BI_config *bi_config;
* called only by backend_shutdown()
* bi_db_destroy: called to destroy each database
* called once per database during shutdown AFTER all
- * bi_close calls but before bi_destory calls.
- * called only by backend_destory()
+ * bi_close calls but before bi_destroy calls.
+ * called only by backend_destroy()
*/
BI_db_init *bi_db_init;
BI_db_config *bi_db_config;
BI_op_extended *bi_extended;
BI_op_cancel *bi_op_cancel;
- /* Auxilary Functions */
+ /* Auxiliary Functions */
BI_operational *bi_operational;
BI_chk_referrals *bi_chk_referrals;
BI_chk_controls *bi_chk_controls;
+#ifdef LDAP_X_TXN
+ BI_op_txn *bi_op_txn;
+#endif
BI_entry_get_rw *bi_entry_get_rw;
BI_entry_release_rw *bi_entry_release_rw;
struct slap_callback *sc_next;
slap_response *sc_response;
slap_response *sc_cleanup;
- slap_writewait *sc_writewait;
void *sc_private;
+ slap_writewait *sc_writewait;
} slap_callback;
struct slap_overinfo;
op_aux_operational,
op_aux_chk_referrals,
op_aux_chk_controls,
+#ifdef LDAP_X_TXN
+ op_txn,
+#endif
op_last
} slap_operation_t;
} PagedResultsState;
struct slap_csn_entry {
+ Operation *ce_op;
struct berval ce_csn;
int ce_sid;
- unsigned long ce_opid;
- unsigned long ce_connid;
#define SLAP_CSN_PENDING 1
#define SLAP_CSN_COMMIT 2
long ce_state;
#ifdef SLAP_CONTROL_X_WHATFAILED
int sc_whatFailed;
#endif
+#ifdef LDAP_CONTROL_X_LAZY_COMMIT
+ int sc_lazyCommit;
+#endif
};
/*
ber_tag_t o_tag; /* tag of the request */
time_t o_time; /* time op was initiated */
int o_tincr; /* counter for multiple ops with same o_time */
+ int o_tusec; /* microsecond timestamp */
+ struct timeval o_qtime; /* time spent in queues before execution */
BackendDB *o_bd; /* backend DB processing this op */
struct berval o_req_dn; /* DN of target of request */
#define get_whatFailed(op) _SCM((op)->o_whatFailed)
#endif
+#ifdef SLAP_CONTROL_X_LAZY_COMMIT
+#define o_lazyCommit o_ctrlflag[slap_cids.sc_lazyCommit]
+#define get_lazyCommit(op) _SCM((op)->o_lazyCommit)
+#endif
+
#define o_sync o_ctrlflag[slap_cids.sc_LDAPsync]
AuthorizationInformation o_authz;
#define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) \
Log5( (level), ldap_syslog_level, (fmt), (connid), (opid), (arg1), (arg2), (arg3) )
+#define Statslog6( level, fmt, a1, a2, a3, a4, a5, a6 ) \
+ Log6( (level), ldap_syslog_level, (fmt), (a1), (a2), (a3), (a4), (a5), (a6) )
+#define Statslog7( level, fmt, a1, a2, a3, a4, a5, a6, a7 ) \
+ Log7( (level), ldap_syslog_level, (fmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
#define StatslogTest( level ) ((ldap_debug | ldap_syslog) & (level))
#else /* !LDAP_SYSLOG */
#define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) \
if ( ldap_debug & (level) ) \
lutil_debug( ldap_debug, (level), (fmt), (connid), (opid), (arg1), (arg2), (arg3) );\
} while (0)
+#define Statslog6( level, fmt, a1, a2, a3, a4, a5, a6 ) \
+ do { \
+ if ( ldap_debug & (level) ) \
+ lutil_debug( ldap_debug, (level), (fmt), (a1), (a2), (a3), (a4), (a5), (a6) ); \
+ } while (0)
+#define Statslog7( level, fmt, a1, a2, a3, a4, a5, a6, a7 ) \
+ do { \
+ if ( ldap_debug & (level) ) \
+ lutil_debug( ldap_debug, (level), (fmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) ); \
+ } while (0)
#define StatslogTest( level ) (ldap_debug & (level))
#endif /* !LDAP_SYSLOG */
#else /* !LDAP_DEBUG */
#define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) ((void) 0)
+#define Statslog6( level, fmt, a1, a2, a3, a4, a5, a6 ) ((void) 0)
+#define Statslog7( level, fmt, a1, a2, a3, a4, a5, a6, a7 ) ((void) 0)
#define StatslogTest( level ) (0)
#endif /* !LDAP_DEBUG */