]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slap.h
Extend checks to substrings rules. Need to kludge around
[openldap] / servers / slapd / slap.h
index fadc1a84319eb5f0d8e88d2c02ad2f28cb23e315..a672e1ea86301fd7e7b062bcec3d4173fb1c074f 100644 (file)
@@ -224,19 +224,20 @@ typedef struct slap_ssf_set {
 #define SLAP_SCHERR_CLASS_BAD_SUP              4
 #define SLAP_SCHERR_CLASS_DUP                  5
 #define SLAP_SCHERR_ATTR_NOT_FOUND             6
-#define SLAP_SCHERR_ATTR_BAD_USAGE             7
-#define SLAP_SCHERR_ATTR_BAD_SUP               8
-#define SLAP_SCHERR_ATTR_INCOMPLETE            9
-#define SLAP_SCHERR_ATTR_DUP                   10
-#define SLAP_SCHERR_MR_NOT_FOUND               11
-#define SLAP_SCHERR_MR_INCOMPLETE              12
-#define SLAP_SCHERR_MR_DUP                             13
-#define SLAP_SCHERR_SYN_NOT_FOUND              14
-#define SLAP_SCHERR_SYN_DUP                            15
-#define SLAP_SCHERR_NO_NAME                            16
-#define SLAP_SCHERR_NOT_SUPPORTED              17
-#define SLAP_SCHERR_BAD_DESCR                  18
-#define SLAP_SCHERR_OIDM                               19
+#define SLAP_SCHERR_ATTR_BAD_MR                        7
+#define SLAP_SCHERR_ATTR_BAD_USAGE             8
+#define SLAP_SCHERR_ATTR_BAD_SUP               9
+#define SLAP_SCHERR_ATTR_INCOMPLETE            10
+#define SLAP_SCHERR_ATTR_DUP                   11
+#define SLAP_SCHERR_MR_NOT_FOUND               12
+#define SLAP_SCHERR_MR_INCOMPLETE              13
+#define SLAP_SCHERR_MR_DUP                             14
+#define SLAP_SCHERR_SYN_NOT_FOUND              15
+#define SLAP_SCHERR_SYN_DUP                            16
+#define SLAP_SCHERR_NO_NAME                            17
+#define SLAP_SCHERR_NOT_SUPPORTED              18
+#define SLAP_SCHERR_BAD_DESCR                  19
+#define SLAP_SCHERR_OIDM                               20
 #define SLAP_SCHERR_LAST                               SLAP_SCHERR_OIDM
 
 typedef union slap_sockaddr {
@@ -278,7 +279,16 @@ typedef struct slap_syntax {
 #define ssyn_oid               ssyn_syn.syn_oid
 #define ssyn_desc              ssyn_syn.syn_desc
 #define ssyn_extensions                ssyn_syn.syn_extensions
+       /*
+        * Note: the former
        ber_len_t       ssyn_oidlen;
+        * has been replaced by a struct berval that uses the value
+        * provided by ssyn_syn.syn_oid; a macro that expands to
+        * the bv_len field of the berval is provided for backward
+        * compatibility.  CAUTION: NEVER FREE THE BERVAL
+        */
+       struct berval   ssyn_bvoid;
+#define        ssyn_oidlen     ssyn_bvoid.bv_len
 
        unsigned int ssyn_flags;
 
@@ -307,6 +317,18 @@ typedef struct slap_syntax {
 #define slap_syntax_is_ber(s)          slap_syntax_is_flag((s),SLAP_SYNTAX_BER)
 #define slap_syntax_is_hidden(s)       slap_syntax_is_flag((s),SLAP_SYNTAX_HIDE)
 
+typedef struct slap_syntax_defs_rec {
+       char *sd_desc;
+       int sd_flags;
+       slap_syntax_validate_func *sd_validate;
+       slap_syntax_transform_func *sd_normalize;
+       slap_syntax_transform_func *sd_pretty;
+#ifdef SLAPD_BINARY_CONVERSION
+       slap_syntax_transform_func *sd_ber2str;
+       slap_syntax_transform_func *sd_str2ber;
+#endif
+} slap_syntax_defs_rec;
+
 /* X -> Y Converter */
 typedef int slap_mr_convert_func LDAP_P((
        struct berval * in,
@@ -349,9 +371,24 @@ typedef int slap_mr_filter_func LDAP_P((
        void * assertValue,
        BerVarray *keys ));
 
+typedef struct slap_matching_rule_use MatchingRuleUse;
+
 typedef struct slap_matching_rule {
        LDAPMatchingRule                smr_mrule;
-       ber_len_t                               smr_oidlen;
+       MatchingRuleUse                 *smr_mru;
+       /* RFC2252 string representation */
+       struct berval                   smr_str;
+       /*
+        * Note: the former
+       ber_len_t       smr_oidlen;
+        * has been replaced by a struct berval that uses the value
+        * provided by smr_mrule.mr_oid; a macro that expands to
+        * the bv_len field of the berval is provided for backward
+        * compatibility.  CAUTION: NEVER FREE THE BERVAL
+        */
+       struct berval                   smr_bvoid;
+#define        smr_oidlen                      smr_bvoid.bv_len
+
        slap_mask_t                             smr_usage;
 
 #define SLAP_MR_HIDE                   0x8000U
@@ -364,7 +401,7 @@ typedef struct slap_matching_rule {
 #define SLAP_MR_EQUALITY               0x0100U
 #define SLAP_MR_ORDERING               0x0200U
 #define SLAP_MR_SUBSTR                 0x0400U
-#define SLAP_MR_EXT                            0x0800U
+#define SLAP_MR_EXT                            0x0800U /* implicitly extensible */
 
 #define SLAP_MR_EQUALITY_APPROX        ( SLAP_MR_EQUALITY | 0x0010U )
 #define SLAP_MR_DN_FOLD                        0x0008U
@@ -403,6 +440,13 @@ typedef struct slap_matching_rule {
        slap_mr_indexer_func    *smr_indexer;
        slap_mr_filter_func             *smr_filter;
 
+       /*
+        * null terminated list of syntaxes compatible with this syntax
+        * note: when MS_EXT is set, this MUST NOT contain the assertion
+     * syntax of the rule.  When MS_EXT is not set, it MAY.
+        */
+       Syntax                                  **smr_compat_syntaxes;
+
        struct slap_matching_rule       *smr_associated;
        struct slap_matching_rule       *smr_next;
 
@@ -414,6 +458,36 @@ typedef struct slap_matching_rule {
 #define smr_extensions         smr_mrule.mr_extensions
 } MatchingRule;
 
+struct slap_matching_rule_use {
+       LDAPMatchingRuleUse             smru_mruleuse;
+       MatchingRule                    *smru_mr;
+       /* RFC2252 string representation */
+       struct berval                   smru_str;
+
+       struct slap_matching_rule_use   *smru_next;
+
+#define smru_oid                       smru_mruleuse.mru_oid
+#define smru_names                     smru_mruleuse.mru_names
+#define smru_desc                      smru_mruleuse.mru_desc
+#define smru_obsolete                  smru_mruleuse.mru_obsolete
+#define smru_applies_oids              smru_mruleuse.mru_applies_oids
+
+#define smru_usage                     smru_mr->smr_usage
+} /* MatchingRuleUse */ ;
+
+typedef struct slap_mrule_defs_rec {
+       char *                                          mrd_desc;
+       slap_mask_t                                     mrd_usage;
+       char **                                         mrd_compat_syntaxes;
+       slap_mr_convert_func *          mrd_convert;
+       slap_mr_normalize_func *        mrd_normalize;
+       slap_mr_match_func *            mrd_match;
+       slap_mr_indexer_func *          mrd_indexer;
+       slap_mr_filter_func *           mrd_filter;
+
+       char *                                          mrd_associated;
+} slap_mrule_defs_rec;
+
 struct slap_backend_db;
 struct slap_entry;
 struct slap_attr;
@@ -481,7 +555,8 @@ typedef int (ObjectClassSchemaCheckFN)(
        char *textbuf, size_t textlen );
 
 typedef struct slap_object_class {
-       LDAPObjectClass         soc_oclass;
+       LDAPObjectClass                 soc_oclass;
+       struct berval                   soc_cname;
        struct slap_object_class        **soc_sups;
        AttributeType                           **soc_required;
        AttributeType                           **soc_allowed;
@@ -1484,6 +1559,7 @@ typedef struct slap_paged_state {
 typedef struct slap_op {
        unsigned long o_opid;   /* id of this operation */
        unsigned long o_connid; /* id of conn initiating this op */
+       struct slap_conn *o_conn;       /* connection spawning this op */
 
        ber_int_t       o_msgid;        /* msgid of the request */
        ber_int_t       o_protocol;     /* version of the LDAP protocol used by client */
@@ -1518,6 +1594,7 @@ typedef struct slap_op {
        slap_callback   *o_callback;    /* callback pointers */
        LDAPControl     **o_ctrls;       /* controls */
 
+       void    *o_threadctx;           /* thread pool thread context */
        void    *o_private;     /* anything the backend needs */
 
        LDAP_STAILQ_ENTRY(slap_op)      o_next; /* next operation in list         */
@@ -1593,6 +1670,7 @@ typedef struct slap_conn {
        int             c_sasl_layers;   /* true if we need to install SASL i/o handlers */
        void    *c_sasl_context;        /* SASL session context */
        void    *c_sasl_extra;          /* SASL session extra stuff */
+       struct slap_op  *c_sasl_bindop; /* set to current op if it's a bind */
 
        PagedResultsState c_pagedresults_state; /* paged result state */
 
@@ -1655,6 +1733,12 @@ enum {
 };
 #endif /* SLAPD_MONITOR */
 
+/*
+ * Better know these all around slapd
+ */
+#define SLAP_LDAPDN_PRETTY 0x1
+#define SLAP_LDAPDN_MAXLEN 8192
+
 LDAP_END_DECL
 
 #include "proto-slap.h"