X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fslap.h;h=a7c28fc0106668e69d8d946019797bd09c2f33de;hb=17f95a3fd30247a0735a3526d85b46178304748d;hp=af09fec6d601aa9b1806eb41f5414b7f6161d5eb;hpb=da76c1951e4176398b603daff550cb7a2dd7607b;p=openldap diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index af09fec6d6..a7c28fc010 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -1,7 +1,7 @@ /* slap.h - stand alone ldap server include file */ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -206,7 +206,7 @@ typedef struct slap_ssf_set { #define SLAP_INDEX_FLAGS 0xF000UL #define SLAP_INDEX_NOSUBTYPES 0x1000UL /* don't use index w/ subtypes */ -#define SLAP_INDEX_NOLANG 0x2000UL /* don't use index w/ lang */ +#define SLAP_INDEX_NOTAGS 0x2000UL /* don't use index w/ tags */ /* * there is a single index for each attribute. these prefixes ensure @@ -439,6 +439,7 @@ typedef struct slap_matching_rule { #define SLAP_MR_ASSERTION_SYNTAX_MATCH 0x0000U #define SLAP_MR_VALUE_SYNTAX_MATCH 0x0001U #define SLAP_MR_VALUE_SYNTAX_CONVERTED_MATCH 0x0003U +#define SLAP_MR_VALUE_NORMALIZED_MATCH 0x0004U #define SLAP_IS_MR_ASSERTION_SYNTAX_MATCH( usage ) \ (!((usage) & SLAP_MR_VALUE_SYNTAX_MATCH)) @@ -626,18 +627,16 @@ typedef struct slap_content_rule { struct slap_content_rule *scr_next; } ContentRule; -/* - * represents a recognized attribute description ( type + options ) - */ +/* Represents a recognized attribute description ( type + options ). */ typedef struct slap_attr_desc { struct slap_attr_desc *ad_next; AttributeType *ad_type; /* attribute type, must be specified */ struct berval ad_cname; /* canonical name, must be specified */ - struct berval ad_lang; /* empty if no language tags */ + struct berval ad_tags; /* empty if no tagging options */ unsigned ad_flags; #define SLAP_DESC_NONE 0x00U #define SLAP_DESC_BINARY 0x01U -#define SLAP_DESC_LANG_RANGE 0x80U +#define SLAP_DESC_TAG_RANGE 0x80U } AttributeDescription; typedef struct slap_attr_name { @@ -646,9 +645,9 @@ typedef struct slap_attr_name { ObjectClass *an_oc; } AttributeName; -#define slap_ad_is_lang(ad) ( (ad)->ad_lang.bv_len != 0 ) -#define slap_ad_is_lang_range(ad) \ - ( ((ad)->ad_flags & SLAP_DESC_LANG_RANGE) ? 1 : 0 ) +#define slap_ad_is_tagged(ad) ( (ad)->ad_tags.bv_len != 0 ) +#define slap_ad_is_tag_range(ad) \ + ( ((ad)->ad_flags & SLAP_DESC_TAG_RANGE) ? 1 : 0 ) #define slap_ad_is_binary(ad) \ ( ((ad)->ad_flags & SLAP_DESC_BINARY) ? 1 : 0 ) @@ -1102,6 +1101,7 @@ typedef struct slap_acl_state { /* Access state */ AccessControl *as_vd_acl; + AccessControl *as_vi_acl; slap_mask_t as_vd_acl_mask; regmatch_t as_vd_acl_matches[MAXREMATCHES]; int as_vd_acl_count; @@ -1110,8 +1110,9 @@ typedef struct slap_acl_state { int as_vd_access_count; int as_result; + AttributeDescription *as_vd_ad; } AccessControlState; -#define ACL_STATE_INIT { ACL_STATE_NOT_RECORDED, NULL, 0UL, { { 0, 0 } }, 0, NULL, 0, 0 } +#define ACL_STATE_INIT { ACL_STATE_NOT_RECORDED, NULL, NULL, 0UL, { { 0, 0 } }, 0, NULL, 0, 0, NULL } /* * replog moddn param structure @@ -1324,6 +1325,8 @@ struct slap_backend_db { BerVarray be_update_refs; /* where to refer modifying clients to */ char *be_realm; void *be_private; /* anything the backend database needs */ + + void *be_pb; /* Netscape plugin */ }; struct slap_conn; @@ -1686,6 +1689,9 @@ typedef struct slap_op { LDAP_STAILQ_ENTRY(slap_op) o_next; /* next operation in list */ ValuesReturnFilter *vrFilter; /* Structure represents ValuesReturnFilter */ + + void *o_pb; /* Netscape plugin */ + } Operation; #define get_manageDSAit(op) ((int)(op)->o_managedsait) @@ -1694,6 +1700,80 @@ typedef struct slap_op { #define get_pagedresults(op) ((int)(op)->o_pagedresults) + +typedef void (*SEND_LDAP_RESULT)( + struct slap_conn *conn, + struct slap_op *op, + ber_int_t err, + const char *matched, + const char *text, + BerVarray ref, + LDAPControl **ctrls + ); + +#define send_ldap_result( conn, op, err, matched, text, ref, ctrls ) \ +(*conn->c_send_ldap_result)( conn, op, err, matched, text, ref, ctrls ) + + +typedef int (*SEND_SEARCH_ENTRY)( + struct slap_backend_db *be, + struct slap_conn *conn, + struct slap_op *op, + struct slap_entry *e, + AttributeName *attrs, + int attrsonly, + LDAPControl **ctrls + ); + +#define send_search_entry( be, conn, op, e, attrs, attrsonly, ctrls) \ +(*conn->c_send_search_entry)( be, conn, op, e, attrs, attrsonly, ctrls) + + +typedef void (*SEND_SEARCH_RESULT)( + struct slap_conn *conn, + struct slap_op *op, + ber_int_t err, + const char *matched, + const char *text, + BerVarray refs, + LDAPControl **ctrls, + int nentries + ); + +#define send_search_result( conn, op, err, matched, text, refs, ctrls, nentries ) \ +(*conn->c_send_search_result)( conn, op, err, matched, text, refs, ctrls, nentries ) + + +typedef int (*SEND_SEARCH_REFERENCE)( + struct slap_backend_db *be, + struct slap_conn *conn, + struct slap_op *op, + struct slap_entry *e, + BerVarray refs, + LDAPControl **ctrls, + BerVarray *v2refs + ); + +#define send_search_reference( be, conn, op, e, refs, ctrls, v2refs ) \ +(*conn->c_send_search_reference)( be, conn, op, e, refs, ctrls, v2refs ) + + +typedef void (*SEND_LDAP_EXTENDED)( + struct slap_conn *conn, + struct slap_op *op, + ber_int_t err, + const char *matched, + const char *text, + BerVarray refs, + const char *rspoid, + struct berval *rspdata, + LDAPControl **ctrls + ); + +#define send_ldap_extended( conn, op, err, matched, text, refs, rspoid, rspdata, ctrls) \ +(*conn->c_send_ldap_extended)( conn, op, err, matched, text, refs, rspoid, rspdata, ctrls ) + + /* * Caches the result of a backend_group check for ACL evaluation */ @@ -1774,6 +1854,20 @@ typedef struct slap_conn { long c_n_get; /* num of get calls */ long c_n_read; /* num of read calls */ long c_n_write; /* num of write calls */ + + void *c_pb; /* Netscape plugin */ + + /* + * These are the "callbacks" that are available for back-ends to + * supply data back to connected clients that are connected + * through the "front-end". + */ + SEND_LDAP_RESULT c_send_ldap_result; + SEND_SEARCH_ENTRY c_send_search_entry; + SEND_SEARCH_RESULT c_send_search_result; + SEND_SEARCH_REFERENCE c_send_search_reference; + SEND_LDAP_EXTENDED c_send_ldap_extended; + } Connection; #if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG) @@ -1785,8 +1879,25 @@ typedef struct slap_conn { syslog( ldap_syslog_level, (fmt), (connid), (opid), (arg1), \ (arg2), (arg3) ); \ } while (0) +#define StatslogTest( level ) ((ldap_debug | ldap_syslog) & (level)) +#elif defined(LDAP_DEBUG) +#define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) \ + do { \ + if ( ldap_debug & (level) ) \ + fprintf( stderr, (fmt), (connid), (opid), (arg1), (arg2), (arg3) );\ + } while (0) +#define StatslogTest( level ) (ldap_debug & (level)) +#elif defined(LDAP_SYSLOG) +#define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) \ + do { \ + if ( ldap_syslog & (level) ) \ + syslog( ldap_syslog_level, (fmt), (connid), (opid), (arg1), \ + (arg2), (arg3) ); \ + } while (0) +#define StatslogTest( level ) (ldap_syslog & (level)) #else #define Statslog( level, fmt, connid, opid, arg1, arg2, arg3 ) +#define StatslogTest( level ) (0) #endif /*