]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slap.h
Precompute syn_oidlen and mr_oidlen
[openldap] / servers / slapd / slap.h
index 8994f3be6a6a98fd9c45dc0dcfe4759dcc56c065..5955aef7a0d4a182502dcd901c7756bb580e9ee1 100644 (file)
@@ -10,6 +10,7 @@
 
 #include "ldap_defaults.h"
 
+#include <stdio.h>
 #include <ac/stdlib.h>
 
 #include <sys/types.h>
@@ -129,7 +130,7 @@ LDAP_BEGIN_DECL
 
 #define SLAPD_TOP_OID                  "2.5.6.0"
 
-LDAP_SLAPD_F (int) slap_debug;
+LDAP_SLAPD_V (int) slap_debug;
 
 typedef unsigned long slap_mask_t;
 
@@ -253,6 +254,7 @@ 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
+       ber_len_t       ssyn_oidlen;
 
        unsigned        ssyn_flags;
 
@@ -325,6 +327,7 @@ typedef int slap_mr_filter_func LDAP_P((
 
 typedef struct slap_matching_rule {
        LDAPMatchingRule                smr_mrule;
+       ber_len_t                       smr_oidlen;
        slap_mask_t                             smr_usage;
 
 #define SLAP_MR_TYPE_MASK              0xFF00U
@@ -338,6 +341,7 @@ typedef struct slap_matching_rule {
 #define SLAP_MR_EXT                            0x0800U
 
 #define SLAP_MR_EQUALITY_APPROX        ( SLAP_MR_EQUALITY | 0x0010U )
+#define SLAP_MR_DN_FOLD                        0x0008U
 
 #define SLAP_MR_SUBSTR_INITIAL ( SLAP_MR_SUBSTR | 0x0010U )
 #define SLAP_MR_SUBSTR_ANY             ( SLAP_MR_SUBSTR | 0x0020U )
@@ -479,6 +483,7 @@ struct slap_internal_schema {
        AttributeDescription *si_ad_createTimestamp;
        AttributeDescription *si_ad_modifiersName;
        AttributeDescription *si_ad_modifyTimestamp;
+       AttributeDescription *si_ad_hasSubordinates;
        AttributeDescription *si_ad_subschemaSubentry;
 
        /* root DSE attribute descriptions */
@@ -540,7 +545,7 @@ typedef struct slap_ss_assertion {
 
 typedef struct slap_mr_assertion {
        MatchingRule                            *ma_rule;       /* optional */
-       char                                    *ma_rule_text;  /* optional */
+       struct berval                           ma_rule_text;  /* optional */
        AttributeDescription    *ma_desc;       /* optional */
        int                                             ma_dnattrs; /* boolean */
        struct berval                   *ma_value;      /* required */
@@ -634,8 +639,13 @@ typedef struct slap_entry {
         */
        ID              e_id;
 
-       char            *e_dn;          /* DN of this entry */
-       char            *e_ndn;         /* normalized DN of this entry */
+       struct berval e_name;   /* name (DN) of this entry */
+       struct berval e_nname;  /* normalized name (DN) of this entry */
+
+       /* for migration purposes */
+#define e_dn e_name.bv_val
+#define e_ndn e_nname.bv_val
+
        Attribute       *e_attrs;       /* list of attributes + values */
 
        /* for use by the backend for any purpose */
@@ -703,8 +713,8 @@ typedef enum slap_style_e {
 typedef struct slap_authz_info {
        ber_tag_t       sai_method;             /* LDAP_AUTH_* from <ldap.h> */
        char *          sai_mech;               /* SASL Mechanism */
-       char *          sai_dn;                 /* DN for reporting purposes */
-       char *          sai_ndn;                /* Normalized DN */
+       struct berval   sai_dn;                 /* DN for reporting purposes */
+       struct berval   sai_ndn;                /* Normalized DN */
 
        /* Security Strength Factors */
        slap_ssf_t      sai_ssf;                        /* Overall SSF */
@@ -793,7 +803,7 @@ typedef struct slap_access {
        slap_style_t a_sockurl_style;
        char            *a_sockurl_pat;
        slap_style_t a_set_style;
-       char            *a_set_pat;
+       struct berval   a_set_pat;
 
 #ifdef SLAPD_ACI_ENABLED
        AttributeDescription    *a_aci_at;
@@ -801,7 +811,7 @@ typedef struct slap_access {
 
        /* ACL Groups */
        slap_style_t a_group_style;
-       char            *a_group_pat;
+       struct berval   a_group_pat;
        ObjectClass                             *a_group_oc;
        AttributeDescription    *a_group_at;
 
@@ -814,8 +824,8 @@ typedef struct slap_acl {
        Filter          *acl_filter;
        slap_style_t acl_dn_style;
        regex_t         acl_dn_re;
-       char            *acl_dn_pat;
-       char            **acl_attrs;
+       struct berval   acl_dn_pat;
+       struct berval   **acl_attrs;
 
        /* "by" part: list of who has what access to the entries */
        Access  *acl_access;
@@ -826,10 +836,10 @@ typedef struct slap_acl {
 /*
  * replog moddn param structure
  */
-struct replog_moddn {
-       char *newrdn;
+struct slap_replog_moddn {
+       struct berval *newrdn;
        int     deloldrdn;
-       char *newsup;
+       struct berval *newsup;
 };
 
 /*
@@ -840,12 +850,12 @@ struct replog_moddn {
 typedef struct slap_backend_info BackendInfo;  /* per backend type */
 typedef struct slap_backend_db BackendDB;              /* per backend database */
 
-LDAP_SLAPD_F (int) nBackendInfo;
-LDAP_SLAPD_F (int) nBackendDB;
-LDAP_SLAPD_F (BackendInfo      *) backendInfo;
-LDAP_SLAPD_F (BackendDB *) backendDB;
+LDAP_SLAPD_V (int) nBackendInfo;
+LDAP_SLAPD_V (int) nBackendDB;
+LDAP_SLAPD_V (BackendInfo *) backendInfo;
+LDAP_SLAPD_V (BackendDB *) backendDB;
 
-LDAP_SLAPD_F (int) slapMode;   
+LDAP_SLAPD_V (int) slapMode;   
 #define SLAP_UNDEFINED_MODE    0x0000
 #define SLAP_SERVER_MODE       0x0001
 #define SLAP_TOOL_MODE         0x0002
@@ -854,8 +864,8 @@ LDAP_SLAPD_F (int) slapMode;
 #define SLAP_TRUNCATE_MODE     0x0100
 
 struct slap_replica_info {
-       char   *ri_host;        /* supersedes be_replica */
-       char  **ri_nsuffix;     /* array of suffixes this replica accepts */
+       char *ri_host;                          /* supersedes be_replica */
+       struct berval **ri_nsuffix;     /* array of suffixes this replica accepts */
 };
 
 struct slap_limits_set {
@@ -881,9 +891,13 @@ struct slap_limits {
 #define SLAP_LIMITS_ANONYMOUS  0x0006
 #define SLAP_LIMITS_USERS      0x0007
        regex_t lm_dn_regex;            /* regex data for REGEX */
-       struct berval *lm_dn_pat;       /* ndn for EXACT, BASE, ONE, SUBTREE,
-                                        * CHILDREN; pattern for REGEX; NULL
-                                        * for ANONYMOUS, USERS */
+
+       /*
+        * normalized DN for EXACT, BASE, ONE, SUBTREE, CHILDREN;
+        * pattern for REGEX; NULL for ANONYMOUS, USERS
+        */
+       struct berval *lm_dn_pat;
+
        struct slap_limits_set  lm_limits;
 };
 
@@ -914,6 +928,7 @@ struct slap_backend_db {
 #define                be_chk_referrals        bd_info->bi_chk_referrals
 #define                be_group        bd_info->bi_acl_group
 #define                be_attribute    bd_info->bi_acl_attribute
+#define                be_operational  bd_info->bi_operational
 
 #define                be_controls     bd_info->bi_controls
 
@@ -950,19 +965,16 @@ struct slap_backend_db {
        | SLAP_RESTRICT_OP_MODIFY \
        | SLAP_RESTRICT_OP_RENAME )
 
-#define SLAP_ALLOW_TLS_2_ANON  0x0001U /* StartTLS -> Anonymous */
+#define SLAP_ALLOW_BIND_V2                     0x0001U /* LDAPv2 bind */
+#define SLAP_ALLOW_BIND_ANON_CRED      0x0002U /* cred should be empty */
+#define SLAP_ALLOW_BIND_ANON_DN                0x0003U /* dn should be empty */
 
-#define SLAP_DISALLOW_BIND_V2  0x0001U /* LDAPv2 bind */
-#define SLAP_DISALLOW_BIND_ANON 0x0002U /* no anonymous */
-#define SLAP_DISALLOW_BIND_ANON_CRED \
-                                                               0x0004U /* cred should be empty */
-#define SLAP_DISALLOW_BIND_ANON_DN \
-                                                               0x0008U /* dn should be empty */
+#define SLAP_DISALLOW_BIND_ANON                0x0001U /* no anonymous */
+#define SLAP_DISALLOW_BIND_SIMPLE      0x0002U /* simple authentication */
+#define SLAP_DISALLOW_BIND_KRBV4       0x0004U /* Kerberos V4 authentication */
 
-#define SLAP_DISALLOW_BIND_SIMPLE      0x0010U /* simple authentication */
-#define SLAP_DISALLOW_BIND_KRBV4       0x0020U /* Kerberos V4 authentication */
-
-#define SLAP_DISALLOW_TLS_AUTHC        0x0100U /* TLS while authenticated */
+#define SLAP_DISALLOW_TLS_2_ANON       0x0010U /* StartTLS -> Anonymous */
+#define SLAP_DISALLOW_TLS_AUTHC                0x0020U /* TLS while authenticated */
 
        slap_mask_t     be_requires;    /* pre-operation requirements */
 #define SLAP_REQUIRE_BIND              0x0001U /* bind before op */
@@ -975,12 +987,12 @@ struct slap_backend_db {
        slap_ssf_set_t be_ssf_set;
 
        /* these should be renamed from be_ to bd_ */
-       char    **be_suffix;    /* the DN suffixes of data in this backend */
-       char    **be_nsuffix;   /* the normalized DN suffixes in this backend */
-       char    **be_suffixAlias; /* pairs of DN suffix aliases and deref values */
-       char    *be_root_dn;    /* the magic "root" dn for this db      */
-       char    *be_root_ndn;   /* the magic "root" normalized dn for this db   */
-       struct berval be_root_pw;       /* the magic "root" password for this db        */
+       struct berval **be_suffix;      /* the DN suffixes of data in this backend */
+       struct berval **be_nsuffix;     /* the normalized DN suffixes in this backend */
+       struct berval **be_suffixAlias; /* pairs of DN suffix aliases and deref values */
+       struct berval be_rootdn;        /* the magic "root" name (DN) for this db */
+       struct berval be_rootndn;       /* the magic "root" normalized name (DN) for this db */
+       struct berval be_rootpw;        /* the magic "root" password for this db        */
        unsigned int be_max_deref_depth;       /* limit for depth of an alias deref  */
 #define be_sizelimit   be_def_limit.lms_s_soft
 #define be_timelimit   be_def_limit.lms_t_soft
@@ -990,19 +1002,73 @@ struct slap_backend_db {
        slap_access_t   be_dfltaccess;  /* access given if no acl matches          */
        struct slap_replica_info **be_replica;  /* replicas of this backend (in master) */
        char    *be_replogfile; /* replication log file (in master)        */
-       char    *be_update_ndn; /* allowed to make changes (in replicas) */
+       struct berval be_update_ndn;    /* allowed to make changes (in replicas) */
        struct berval **be_update_refs; /* where to refer modifying clients to */
+       char    *be_realm;
        int     be_lastmod;     /* keep track of lastmodified{by,time}     */
 
-       char    *be_realm;
+#define        SLAP_GLUE_INSTANCE      0x01    /* a glue backend */
+#define        SLAP_GLUE_SUBORDINATE   0x02    /* child of a glue hierarchy */
+#define        SLAP_GLUE_LINKED        0x04    /* child is connected to parent */
 
+       int     be_glueflags;   /* */
        void    *be_private;    /* anything the backend database needs     */
 };
 
 struct slap_conn;
 struct slap_op;
 
-typedef int (*SLAP_EXTENDED_FN) LDAP_P((
+/* Backend function typedefs */
+typedef int (BI_init) LDAP_P((BackendInfo *bi));
+typedef int (BI_config) LDAP_P((BackendInfo *bi, const char *fname,
+       int lineno, int argc, char **argv));
+typedef int (BI_open) LDAP_P((BackendInfo *bi));
+typedef int (BI_close) LDAP_P((BackendInfo *bi));
+typedef int (BI_destroy) LDAP_P((BackendInfo *bi));
+
+typedef int (BI_db_init) LDAP_P((Backend *bd));
+typedef int (BI_db_config) LDAP_P((Backend *bd, const char *fname,
+       int lineno, int argc, char **argv));
+typedef int (BI_db_open) LDAP_P((Backend *bd));
+typedef int (BI_db_close) LDAP_P((Backend *bd));
+typedef int (BI_db_destroy) LDAP_P((Backend *bd));
+
+typedef int (BI_op_bind)  LDAP_P(( BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               struct berval *dn, struct berval *ndn, int method,
+               struct berval *cred, struct berval *edn ));
+typedef int (BI_op_unbind) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o ));
+typedef int (BI_op_search) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               const char *base, const char *nbase,
+               int scope, int deref,
+               int slimit, int tlimit,
+               Filter *f, const char *filterstr,
+               struct berval **attrs, int attrsonly));
+typedef int (BI_op_compare)LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               const char *dn, const char *ndn,
+               AttributeAssertion *ava));
+typedef int (BI_op_modify) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               const char *dn, const char *ndn, Modifications *m));
+typedef int (BI_op_modrdn) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               const char *dn, const char *ndn,
+               const char *newrdn, int deleteoldrdn,
+               const char *newSuperior));
+typedef int (BI_op_add)    LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               Entry *e));
+typedef int (BI_op_delete) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               const char *dn, const char *ndn));
+typedef int (BI_op_abandon) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               ber_int_t msgid));
+
+typedef int (BI_op_extended) LDAP_P((
     BackendDB          *be,
     struct slap_conn   *conn,
     struct slap_op             *op,
@@ -1014,6 +1080,44 @@ typedef int (*SLAP_EXTENDED_FN) LDAP_P((
        const char **   text,
        struct berval *** refs ));
 
+typedef int (BI_entry_release_rw) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               Entry *e, int rw));
+
+typedef int (BI_chk_referrals) LDAP_P((BackendDB *bd,
+               struct slap_conn *c, struct slap_op *o,
+               const char *dn, const char *ndn,
+               const char **text ));
+
+typedef int (BI_acl_group)  LDAP_P((Backend *bd,
+               struct slap_conn *c, struct slap_op *o,
+               Entry *e, const char *bdn, const char *edn,
+               ObjectClass *group_oc,
+               AttributeDescription *group_at ));
+typedef int (BI_acl_attribute)  LDAP_P((Backend *bd,
+               struct slap_conn *c, struct slap_op *o,
+               Entry *e, const char *edn,
+               AttributeDescription *entry_at,
+               struct berval ***vals ));
+
+typedef int (BI_operational)  LDAP_P((Backend *bd,
+               struct slap_conn *c, struct slap_op *o,
+               Entry *e, struct berval **attrs, int opattrs, Attribute **a ));
+
+typedef int (BI_connection_init) LDAP_P((BackendDB *bd,
+               struct slap_conn *c));
+typedef int (BI_connection_destroy) LDAP_P((BackendDB *bd,
+               struct slap_conn *c));
+
+typedef int (BI_tool_entry_open) LDAP_P(( BackendDB *be, int mode ));
+typedef int (BI_tool_entry_close) LDAP_P(( BackendDB *be ));
+typedef ID (BI_tool_entry_first) LDAP_P(( BackendDB *be ));
+typedef ID (BI_tool_entry_next) LDAP_P(( BackendDB *be ));
+typedef Entry* (BI_tool_entry_get) LDAP_P(( BackendDB *be, ID id ));
+typedef ID (BI_tool_entry_put) LDAP_P(( BackendDB *be, Entry *e ));
+typedef int (BI_tool_entry_reindex) LDAP_P(( BackendDB *be, ID id ));
+typedef int (BI_tool_sync) LDAP_P(( BackendDB *be ));
+
 struct slap_backend_info {
        char    *bi_type;       /* type of backend */
 
@@ -1037,12 +1141,11 @@ struct slap_backend_info {
         *              once during shutdown after all bi_db_destroy calls.
         *              bi_destory() is called from backend_destroy()
         */
-       int (*bi_init)  LDAP_P((BackendInfo *bi));
-       int     (*bi_config) LDAP_P((BackendInfo *bi,
-               const char *fname, int lineno, int argc, char **argv ));
-       int (*bi_open) LDAP_P((BackendInfo *bi));
-       int (*bi_close) LDAP_P((BackendInfo *bi));
-       int (*bi_destroy) LDAP_P((BackendInfo *bi));
+       BI_init *bi_init;
+       BI_config       *bi_config;
+       BI_open *bi_open;
+       BI_close        *bi_close;
+       BI_destroy      *bi_destroy;
 
        /*
         * per database routines:
@@ -1065,87 +1168,47 @@ struct slap_backend_info {
         *  bi_close calls but before bi_destory calls.
         *  called only by backend_destory()
         */
-       int (*bi_db_init) LDAP_P((Backend *bd));
-       int     (*bi_db_config) LDAP_P((Backend *bd,
-               const char *fname, int lineno, int argc, char **argv ));
-       int (*bi_db_open) LDAP_P((Backend *bd));
-       int (*bi_db_close) LDAP_P((Backend *bd));
-       int (*bi_db_destroy) LDAP_P((Backend *db));
+       BI_db_init      *bi_db_init;
+       BI_db_config    *bi_db_config;
+       BI_db_open      *bi_db_open;
+       BI_db_close     *bi_db_close;
+       BI_db_destroy   *bi_db_destroy;
 
        /* LDAP Operations Handling Routines */
-       int     (*bi_op_bind)  LDAP_P(( BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               const char *dn, const char *ndn, int method,
-               struct berval *cred, char** edn ));
-       int (*bi_op_unbind) LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o ));
-       int     (*bi_op_search) LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               const char *base, const char *nbase,
-               int scope, int deref,
-               int slimit, int tlimit,
-               Filter *f, const char *filterstr,
-               char **attrs, int attrsonly));
-       int     (*bi_op_compare)LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               const char *dn, const char *ndn,
-               AttributeAssertion *ava));
-       int     (*bi_op_modify) LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               const char *dn, const char *ndn, Modifications *m));
-       int     (*bi_op_modrdn) LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               const char *dn, const char *ndn,
-               const char *newrdn, int deleteoldrdn,
-               const char *newSuperior));
-       int     (*bi_op_add)    LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               Entry *e));
-       int     (*bi_op_delete) LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               const char *dn, const char *ndn));
-       int     (*bi_op_abandon) LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               ber_int_t msgid));
+       BI_op_bind      *bi_op_bind;
+       BI_op_unbind    *bi_op_unbind;
+       BI_op_search    *bi_op_search;
+       BI_op_compare   *bi_op_compare;
+       BI_op_modify    *bi_op_modify;
+       BI_op_modrdn    *bi_op_modrdn;
+       BI_op_add       *bi_op_add;
+       BI_op_delete    *bi_op_delete;
+       BI_op_abandon   *bi_op_abandon;
 
        /* Extended Operations Helper */
-       SLAP_EXTENDED_FN bi_extended;
+       BI_op_extended  *bi_extended;
 
        /* Auxilary Functions */
-       int     (*bi_entry_release_rw) LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               Entry *e, int rw));
+       BI_entry_release_rw     *bi_entry_release_rw;
+       BI_chk_referrals        *bi_chk_referrals;
 
-       int     (*bi_chk_referrals) LDAP_P((BackendDB *bd,
-               struct slap_conn *c, struct slap_op *o,
-               const char *dn, const char *ndn,
-               const char **text ));
+       BI_acl_group    *bi_acl_group;
+       BI_acl_attribute        *bi_acl_attribute;
 
-       int     (*bi_acl_group)  LDAP_P((Backend *bd,
-               struct slap_conn *c, struct slap_op *o,
-               Entry *e, const char *bdn, const char *edn,
-               ObjectClass *group_oc,
-               AttributeDescription *group_at ));
-       int     (*bi_acl_attribute)  LDAP_P((Backend *bd,
-               struct slap_conn *c, struct slap_op *o,
-               Entry *e, const char *edn,
-               AttributeDescription *entry_at,
-               struct berval ***vals ));
+       BI_operational  *bi_operational;
 
-       int     (*bi_connection_init) LDAP_P((BackendDB *bd,
-               struct slap_conn *c));
-       int     (*bi_connection_destroy) LDAP_P((BackendDB *bd,
-               struct slap_conn *c));
+       BI_connection_init      *bi_connection_init;
+       BI_connection_destroy   *bi_connection_destroy;
 
        /* hooks for slap tools */
-       int (*bi_tool_entry_open) LDAP_P(( BackendDB *be, int mode ));
-       int (*bi_tool_entry_close) LDAP_P(( BackendDB *be ));
-       ID (*bi_tool_entry_first) LDAP_P(( BackendDB *be ));
-       ID (*bi_tool_entry_next) LDAP_P(( BackendDB *be ));
-       Entry* (*bi_tool_entry_get) LDAP_P(( BackendDB *be, ID id ));
-       ID (*bi_tool_entry_put) LDAP_P(( BackendDB *be, Entry *e ));
-       int (*bi_tool_entry_reindex) LDAP_P(( BackendDB *be, ID id ));
-       int (*bi_tool_sync) LDAP_P(( BackendDB *be ));
+       BI_tool_entry_open      *bi_tool_entry_open;
+       BI_tool_entry_close     *bi_tool_entry_close;
+       BI_tool_entry_first     *bi_tool_entry_first;
+       BI_tool_entry_next      *bi_tool_entry_next;
+       BI_tool_entry_get       *bi_tool_entry_get;
+       BI_tool_entry_put       *bi_tool_entry_put;
+       BI_tool_entry_reindex   *bi_tool_entry_reindex;
+       BI_tool_sync            *bi_tool_sync;
 
 #define SLAP_INDEX_ADD_OP              0x0001
 #define SLAP_INDEX_DELETE_OP   0x0002
@@ -1159,6 +1222,7 @@ struct slap_backend_info {
 #define c_authtype     c_authz.sai_method
 #define c_authmech     c_authz.sai_mech
 #define c_dn           c_authz.sai_dn
+#define c_ndn          c_authz.sai_ndn
 #define c_ssf                  c_authz.sai_ssf
 #define c_transport_ssf        c_authz.sai_transport_ssf
 #define c_tls_ssf              c_authz.sai_tls_ssf
@@ -1173,6 +1237,17 @@ struct slap_backend_info {
 #define o_tls_ssf              o_authz.sai_tls_ssf
 #define o_sasl_ssf             o_authz.sai_sasl_ssf
 
+struct slap_op;
+struct slap_conn;
+
+typedef void (slap_response)(struct slap_conn *, struct slap_op *, ber_tag_t,
+       ber_int_t, ber_int_t, const char *, const char *, struct berval **,
+       const char *, struct berval *, struct berval *, LDAPControl **);
+
+typedef void (slap_sresult)(struct slap_conn *, struct slap_op *, ber_int_t,
+       const char *, const char *, struct berval **, LDAPControl **,
+       int nentries);
+
 /*
  * represents an operation pending from an ldap client
  */
@@ -1200,9 +1275,12 @@ typedef struct slap_op {
 
        ldap_pvt_thread_mutex_t o_abandonmutex; /* protects o_abandon  */
        int             o_abandon;      /* abandon flag */
+       slap_response   *o_response;    /* callback function */
+       slap_sresult    *o_sresult;     /* search result callback */
 
        struct slap_op  *o_next;        /* next operation in list         */
        void    *o_private;     /* anything the backend needs     */
+       void    *o_glue;        /* for the glue backend */
 } Operation;
 
 /*
@@ -1214,7 +1292,7 @@ typedef struct slap_gacl {
        ObjectClass *oc;
        AttributeDescription *at;
        int res;
-       int len;
+       ber_len_t len;
        char ndn[1];
 } GroupAssertion;