]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slap.h
Added overlay objects
[openldap] / servers / slapd / slap.h
index 380ee9a53ef1e0e2b8a519151e26cff79f3c30b4..58745a592e857d7dd25dad709840c64c6532972a 100644 (file)
 
 LDAP_BEGIN_DECL
 
+#ifdef LDAP_DEVEL
+#define SLAP_ACL_HONOR_DISCLOSE        /* partially implemented */
+#define SLAP_DYNACL
+#define LDAP_COMP_MATCH                        /* experimental */
+#define LDAP_DYNAMIC_OBJECTS
+#define LDAP_SYNC_TIMESTAMP
+#define LDAP_COLLECTIVE_ATTRIBUTES
+#define SLAP_CONTROL_X_TREE_DELETE LDAP_CONTROL_X_TREE_DELETE
+#endif
+
+#if defined(LDAP_DEVEL) && defined(ENABLE_REWRITE)
+/* use librewrite for sasl-regexp */
+#define SLAP_AUTH_REWRITE      1
+#endif /* LDAP_DEVEL && ENABLE_REWRITE */
+
 /*
  * SLAPD Memory allocation macros
  *
@@ -94,8 +109,6 @@ LDAP_BEGIN_DECL
 
 #define SLAP_MAX_WORKER_THREADS                (16)
 
-#define SLAP_MAX_SYNCREPL_THREADS      (8)
-
 #define SLAP_SB_MAX_INCOMING_DEFAULT ((1<<18) - 1)
 #define SLAP_SB_MAX_INCOMING_AUTH ((1<<24) - 1)
 
@@ -324,10 +337,6 @@ typedef int slap_syntax_transform_func LDAP_P((
        struct berval * out,
        void *memctx));
 
-#ifdef LDAP_DEVEL
-#define LDAP_COMP_MATCH
-#endif
-
 #ifdef LDAP_COMP_MATCH
 typedef void* slap_component_transform_func LDAP_P((
        struct berval * in ));
@@ -894,6 +903,9 @@ struct slap_internal_schema {
 typedef struct slap_attr_assertion {
        AttributeDescription    *aa_desc;
        struct berval aa_value;
+#ifdef LDAP_COMP_MATCH
+       struct slap_component_filter *aa_cf;/* for attribute aliasing */
+#endif
 } AttributeAssertion;
 
 typedef struct slap_ss_assertion {
@@ -1168,10 +1180,6 @@ typedef struct slap_authz_info {
 } AuthorizationInformation;
 
 
-#ifdef LDAP_DEVEL
-#define SLAP_DYNACL
-#endif /* LDAP_DEVEL */
-
 #ifdef SLAP_DYNACL
 struct slap_op;
 
@@ -1382,6 +1390,7 @@ LDAP_SLAPD_V (int) slapMode;
 #define SLAP_TRUNCATE_MODE     0x0100
 #define        SLAP_TOOL_READMAIN      0x0200
 #define        SLAP_TOOL_READONLY      0x0400
+#define        SLAP_TOOL_QUICK         0x0800
 
 struct slap_replica_info {
        char *ri_host;                          /* supersedes be_replica */
@@ -1457,6 +1466,8 @@ typedef BackendDB Backend;
 #define SLAP_SYNC_RID_SIZE     3
 #define SLAP_SYNCUUID_SET_SIZE 256
 
+#define        SLAP_SYNC_UPDATE_MSGID  2
+
 struct nonpresent_entry {
        struct berval *npe_name;
        struct berval *npe_nname;
@@ -1464,8 +1475,8 @@ struct nonpresent_entry {
 };
 
 struct sync_cookie {
-       struct berval *ctxcsn;
-       struct berval *octet_str;
+       struct berval ctxcsn;
+       struct berval octet_str;
        long rid;
        LDAP_STAILQ_ENTRY(sync_cookie) sc_next;
 };
@@ -1475,8 +1486,7 @@ LDAP_STAILQ_HEAD( slap_sync_cookie_s, sync_cookie );
 typedef struct syncinfo_s {
         struct slap_backend_db *si_be;
         long                           si_rid;
-        char                           *si_provideruri;
-        BerVarray                      si_provideruri_bv;
+        struct berval                  si_provideruri;
 #define SYNCINFO_TLS_OFF               0
 #define SYNCINFO_TLS_ON                        1
 #define SYNCINFO_TLS_CRITICAL  2
@@ -1514,11 +1524,15 @@ typedef struct syncinfo_s {
         Avlnode                                *si_presentlist;
                LDAP                            *si_ld;
                LDAP_LIST_HEAD(np, nonpresent_entry) si_nonpresentlist;
-               LDAP_STAILQ_ENTRY( syncinfo_s ) si_next;
+               ldap_pvt_thread_mutex_t si_mutex;
 } syncinfo_t;
 
 LDAP_TAILQ_HEAD( be_pcl, slap_csn_entry );
 
+#ifndef SLAP_MAX_CIDS
+#define        SLAP_MAX_CIDS   32      /* Maximum number of supported controls */
+#endif
+
 struct slap_backend_db {
        BackendInfo     *bd_info;       /* pointer to shared backend info */
 
@@ -1543,6 +1557,7 @@ struct slap_backend_db {
 #define                be_extended     bd_info->bi_extended
 
 #define                be_chk_referrals        bd_info->bi_chk_referrals
+#define                be_chk_controls         bd_info->bi_chk_controls
 #define                be_fetch        bd_info->bi_entry_get_rw
 #define                be_release      bd_info->bi_entry_release_rw
 #define                be_group        bd_info->bi_acl_group
@@ -1556,8 +1571,6 @@ struct slap_backend_db {
  */
 #define                be_has_subordinates bd_info->bi_has_subordinates
 
-#define                be_controls     bd_info->bi_controls
-
 #define                be_connection_init      bd_info->bi_connection_init
 #define                be_connection_destroy   bd_info->bi_connection_destroy
 
@@ -1575,13 +1588,20 @@ struct slap_backend_db {
 #define                be_entry_modify bd_info->bi_tool_entry_modify
 #endif
 
+       /* supported controls */
+       /* note: set to 0 if the database does not support the control;
+        * be_ctrls[SLAP_MAX_CIDS] is set to 1 if initialized */
+       char            be_ctrls[SLAP_MAX_CIDS + 1];
+
 /* Database flags */
 #define SLAP_DBFLAG_NOLASTMOD          0x0001U
 #define SLAP_DBFLAG_NO_SCHEMA_CHECK    0x0002U
 #define        SLAP_DBFLAG_GLUE_INSTANCE       0x0010U /* a glue backend */
 #define        SLAP_DBFLAG_GLUE_SUBORDINATE    0x0020U /* child of a glue hierarchy */
 #define        SLAP_DBFLAG_GLUE_LINKED         0x0040U /* child is connected to parent */
-#define SLAP_DBFLAG_OVERLAY                    0x0080U /* this db struct is an overlay */
+#define SLAP_DBFLAG_GLUE_ADVERTISE     0x0080U /* advertise in rootDSE */
+#define SLAP_DBFLAG_OVERLAY            0x0100U /* this db struct is an overlay */
+#define        SLAP_DBFLAG_GLOBAL_OVERLAY      0x0200U /* this db struct is a global overlay */
 #define SLAP_DBFLAG_SHADOW             0x8000U /* a shadow */
 #define SLAP_DBFLAG_SYNC_SHADOW                0x1000U /* a sync shadow */
 #define SLAP_DBFLAG_SLURP_SHADOW       0x2000U /* a slurp shadow */
@@ -1598,6 +1618,8 @@ struct slap_backend_db {
        (SLAP_DBFLAGS(be) & SLAP_DBFLAG_GLUE_SUBORDINATE)
 #define        SLAP_GLUE_LINKED(be)            \
        (SLAP_DBFLAGS(be) & SLAP_DBFLAG_GLUE_LINKED)
+#define        SLAP_GLUE_ADVERTISE(be) \
+       (SLAP_DBFLAGS(be) & SLAP_DBFLAG_GLUE_ADVERTISE)
 #define SLAP_SHADOW(be)                                (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SHADOW)
 #define SLAP_SYNC_SHADOW(be)                   (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SYNC_SHADOW)
 #define SLAP_SLURP_SHADOW(be)                  (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SLURP_SHADOW)
@@ -1678,10 +1700,11 @@ struct slap_backend_db {
        struct          be_pcl  *be_pending_csn_list;
        ldap_pvt_thread_mutex_t                                 be_pcl_mutex;
        ldap_pvt_thread_mutex_t                                 *be_pcl_mutexp;
-       LDAP_STAILQ_HEAD( be_si, syncinfo_s )   be_syncinfo; /* For syncrepl */
+       syncinfo_t                                                              *be_syncinfo; /* For syncrepl */
 
        char    *be_realm;
        void    *be_pb;         /* Netscape plugin */
+       struct ConfigTable *be_cf_table;
 
        void    *be_private;    /* anything the backend database needs     */
 };
@@ -1860,6 +1883,8 @@ typedef int (BI_op_extended) LDAP_P((
        struct slap_op *op, struct slap_rep *rs ));
 typedef int (BI_chk_referrals) LDAP_P((
        struct slap_op *op, struct slap_rep *rs ));
+typedef int (BI_chk_controls) LDAP_P((
+       struct slap_op *op, struct slap_rep *rs ));
 typedef int (BI_entry_release_rw)
        LDAP_P(( struct slap_op *op, Entry *e, int rw ));
 typedef int (BI_entry_get_rw) LDAP_P(( struct slap_op *op, struct berval *ndn,
@@ -1887,6 +1912,8 @@ typedef int (BI_tool_id2entry_get) LDAP_P(( BackendDB *be, ID id, Entry **e ));
 typedef ID (BI_tool_entry_modify) LDAP_P(( BackendDB *be, Entry *e, 
        struct berval *text ));
 
+struct ConfigTable;    /* config.h */
+
 struct slap_backend_info {
        char    *bi_type; /* type of backend */
 
@@ -1961,6 +1988,7 @@ struct slap_backend_info {
        /* Auxilary Functions */
        BI_operational          *bi_operational;
        BI_chk_referrals        *bi_chk_referrals;
+       BI_chk_controls         *bi_chk_controls;
        BI_entry_get_rw         *bi_entry_get_rw;
        BI_entry_release_rw     *bi_entry_release_rw;
 
@@ -2004,9 +2032,11 @@ struct slap_backend_info {
 #define SLAP_NOLASTMODCMD(be)  (SLAP_BFLAGS(be) & SLAP_BFLAG_NOLASTMODCMD)
 #define SLAP_LASTMODCMD(be)    (!SLAP_NOLASTMODCMD(be))
 
-       char **bi_controls;             /* supported controls */
+       char    **bi_controls;          /* supported controls */
+       char    bi_ctrls[SLAP_MAX_CIDS + 1];
 
        unsigned int bi_nDB;    /* number of databases of this type */
+       struct ConfigTable *bi_cf_table;
        void    *bi_private;    /* anything the backend type needs */
 };
 
@@ -2067,35 +2097,6 @@ typedef struct slap_paged_state {
        int ps_count;
 } PagedResultsState;
 
-#define LDAP_PSEARCH_BY_ADD                    0x01
-#define LDAP_PSEARCH_BY_DELETE         0x02
-#define LDAP_PSEARCH_BY_PREMODIFY      0x03
-#define LDAP_PSEARCH_BY_MODIFY         0x04
-#define LDAP_PSEARCH_BY_SCOPEOUT       0x05
-#define LDAP_PSEARCH_BY_PREDELETE      0x06
-
-struct psid_entry {            /* DELETE ME */
-       struct slap_op *ps_op;
-       LDAP_LIST_ENTRY(psid_entry) ps_link;
-};
-
-#if 0  /* DELETE ME */
-struct slog_entry {
-       struct berval sl_uuid;
-       struct berval sl_name;
-       struct berval sl_csn;
-       LDAP_STAILQ_ENTRY(slog_entry) sl_link;
-};
-
-/* session lists */
-struct slap_session_entry {
-       int se_id;
-       int se_size;
-       struct berval se_spec;
-       LDAP_LIST_ENTRY( slap_session_entry ) se_link;
-};
-#endif
-
 struct slap_csn_entry {
        struct berval ce_csn;
        unsigned long ce_opid;
@@ -2106,16 +2107,6 @@ struct slap_csn_entry {
        LDAP_TAILQ_ENTRY (slap_csn_entry) ce_csn_link;
 };
 
-struct pc_entry {
-       ID pc_id;
-       int pc_sent;
-       struct berval pc_csn;
-       struct berval pc_entryUUID;
-       struct berval pc_ename;
-       struct berval pc_enname;
-       LDAP_TAILQ_ENTRY( pc_entry ) pc_link;
-};
-
 /*
  * Caches the result of a backend_group check for ACL evaluation
  */
@@ -2129,10 +2120,6 @@ typedef struct slap_gacl {
        char ga_ndn[1];
 } GroupAssertion;
 
-#ifndef SLAP_MAX_CIDS
-#define        SLAP_MAX_CIDS   32      /* Maximum number of supported controls */
-#endif
-
 struct slap_control_ids {
        int sc_assert;
        int sc_preRead;
@@ -2352,29 +2339,6 @@ typedef struct slap_op {
 
 #define get_pagedresults(op)                   ((int)(op)->o_pagedresults)
 
-#ifdef BDB_PSEARCH
-       struct sync_cookie      o_sync_state;
-       int                                     o_sync_rhint;
-       struct berval           o_sync_cid;
-       int                                     o_sync_slog_size;
-       struct berval           o_sync_csn;
-       struct berval           o_sync_slog_omitcsn;
-       int                                     o_sync_slog_len;
-       LDAP_STAILQ_HEAD(sl, slog_entry) o_sync_slog_list;
-
-       int o_ps_entries;
-       int     o_no_psearch;
-       LDAP_LIST_ENTRY(slap_op) o_ps_link;
-       LDAP_LIST_HEAD(pe, psid_entry) o_pm_list;
-
-       int o_refresh_in_progress;
-       LDAP_TAILQ_HEAD(pc_pre, pc_entry) o_ps_pre_candidates;
-       LDAP_TAILQ_HEAD(pc_post, pc_entry) o_ps_post_candidates;
-       Avlnode *o_psearch_finished;
-       struct pc_entry *o_ps_send_wait;
-       ldap_pvt_thread_mutex_t o_pcmutex;
-#endif
-
        AuthorizationInformation o_authz;
 
        BerElement      *o_ber;         /* ber of the request */
@@ -2612,8 +2576,8 @@ typedef struct slap_counters_t {
 #define SLAP_CTRL_HIDE                         0x80000000U
 #endif
 
-#define SLAP_CTRL_FRONTEND                     0x00800000U
-#define SLAP_CTRL_FRONTEND_SEARCH      0x00010000U     /* for NOOP */
+#define SLAP_CTRL_GLOBAL                       0x00800000U
+#define SLAP_CTRL_GLOBAL_SEARCH                0x00010000U     /* for NOOP */
 
 #define SLAP_CTRL_OPFLAGS                      0x0000FFFFU
 #define SLAP_CTRL_ABANDON                      0x00000001U
@@ -2643,11 +2607,6 @@ typedef int (SLAP_CTRL_PARSE_FN) LDAP_P((
 #define SLAP_ZONE_ALLOC 1
 #undef SLAP_ZONE_ALLOC
 
-#if defined(LDAP_DEVEL) && defined(ENABLE_REWRITE)
-/* use librewrite for sasl-regexp */
-#define SLAP_AUTH_REWRITE      1
-#endif /* LDAP_DEVEL && ENABLE_REWRITE */
-
 #ifdef LDAP_COMP_MATCH
 /*
  * Extensible Filter Definition