X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fslap.h;h=b51b5571b652e508aed5b31eee5b2ce9e930cc24;hb=HEAD;hp=9c2fe0eedcb165133762a024326f8de9910bf310;hpb=2d731f88767860dbb3c8bd20583e60900461fc94;p=openldap diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index 9c2fe0eedc..b51b5571b6 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * 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 @@ -58,21 +58,28 @@ 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 @@ -150,6 +157,9 @@ LDAP_BEGIN_DECL /* 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' ) @@ -974,6 +984,9 @@ struct slap_internal_schema { AttributeDescription *si_ad_description; AttributeDescription *si_ad_seeAlso; + /* privateKeys */ + AttributeDescription *si_ad_x509PrivateKey; + /* Undefined Attribute Type */ AttributeType *si_at_undefined; @@ -1162,10 +1175,11 @@ struct Attribute { #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 @@ -2183,6 +2197,13 @@ typedef int (BI_acl_group) LDAP_P(( Operation *op, Entry *target, 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; @@ -2201,7 +2222,7 @@ typedef int (BI_tool_sync) LDAP_P(( BackendDB *be )); 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 { @@ -2225,7 +2246,7 @@ 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; @@ -2251,8 +2272,8 @@ struct BackendInfo { * 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; @@ -2275,10 +2296,13 @@ struct BackendInfo { 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; @@ -2381,8 +2405,8 @@ typedef struct slap_callback { 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; @@ -2402,6 +2426,9 @@ typedef enum slap_operation_e { op_aux_operational, op_aux_chk_referrals, op_aux_chk_controls, +#ifdef LDAP_X_TXN + op_txn, +#endif op_last } slap_operation_t; @@ -2436,10 +2463,9 @@ typedef struct PagedResultsState { } 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; @@ -2491,6 +2517,9 @@ struct slap_control_ids { #ifdef SLAP_CONTROL_X_WHATFAILED int sc_whatFailed; #endif +#ifdef LDAP_CONTROL_X_LAZY_COMMIT + int sc_lazyCommit; +#endif }; /* @@ -2603,6 +2632,8 @@ struct Operation { 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 */ @@ -2766,6 +2797,11 @@ struct Operation { #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; @@ -2968,6 +3004,10 @@ struct Connection { #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 ) \ @@ -2975,10 +3015,22 @@ struct Connection { 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 */