]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slap.h
Merge remote-tracking branch 'origin/mdb.master' into OPENLDAP_REL_ENG_2_5
[openldap] / servers / slapd / slap.h
index 2e7d0b28e43594ec313a3605193c8a77a360301b..3326e3a57c5f94760b4aceeeaaea3380ef080ce4 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2010 The OpenLDAP Foundation.
+ * Copyright 1998-2013 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 LDAP_BEGIN_DECL
 
-#ifdef LDAP_DEVEL
 #define LDAP_COLLECTIVE_ATTRIBUTES
 #define LDAP_COMP_MATCH
 #define LDAP_SYNC_TIMESTAMP
-#define SLAP_CONTROL_X_SESSION_TRACKING
 #define SLAP_CONTROL_X_WHATFAILED
 #define SLAP_CONFIG_DELETE
 #define SLAP_AUXPROP_DONTUSECOPY
 #ifndef SLAP_SCHEMA_EXPOSE
 #define SLAP_SCHEMA_EXPOSE
 #endif
-#endif
 
 #define LDAP_DYNAMIC_OBJECTS
 #define SLAP_CONTROL_X_TREE_DELETE LDAP_CONTROL_X_TREE_DELETE
+#define SLAP_CONTROL_X_SESSION_TRACKING
 #define SLAP_DISTPROC
 
 #ifdef ENABLE_REWRITE
@@ -111,12 +109,25 @@ LDAP_BEGIN_DECL
 # define SLAP_STRING_UNKNOWN   "unknown"
 #endif /* ! TCP Wrappers */
 
-/* LDAPMod.mod_op value ===> Must be kept in sync with ldap.h!
- * This is a value used internally by the backends. It is needed to allow
- * adding values that already exist without getting an error as required by
- * modrdn when the new rdn was already an attribute value itself.
+/* LDAPMod.mod_op value ===> Must be kept in sync with ldap.h! */
+/* These values are used internally by the backends. */
+/* SLAP_MOD_SOFTADD allows adding values that already exist without getting
+ * an error as required by modrdn when the new rdn was already an attribute
+ * value itself.
+ */
+#define SLAP_MOD_SOFTADD               0x1000
+/* SLAP_MOD_SOFTDEL allows deleting values if they exist without getting
+ * an error otherwise.
+ */
+#define SLAP_MOD_SOFTDEL               0x1001
+/* SLAP_MOD_ADD_IF_NOT_PRESENT allows adding values unless the attribute
+ * is already present without getting an error.
+ */
+#define SLAP_MOD_ADD_IF_NOT_PRESENT    0x1002
+/* SLAP_MOD_DEL_IF_PRESENT allows deleting values if the attribute
+ * is present, without getting an error otherwise.
+ * The semantics can be obtained using SLAP_MOD_SOFTDEL with NULL values.
  */
-#define SLAP_MOD_SOFTADD       0x1000
 
 #define MAXREMATCHES (100)
 
@@ -130,10 +141,10 @@ LDAP_BEGIN_DECL
 
 #define SLAP_TEXT_BUFLEN (256)
 
-/* psuedo error code indicating abandoned operation */
+/* pseudo error code indicating abandoned operation */
 #define SLAPD_ABANDON (-1024)
 
-/* psuedo error code indicating disconnect */
+/* pseudo error code indicating disconnect */
 #define SLAPD_DISCONNECT (-1025)
 
 /* unknown config file directive */
@@ -422,6 +433,7 @@ struct Syntax {
 #define SLAP_SYNTAX_HIDE       0x8000U /* hide (do not publish) */
 #endif
 #define        SLAP_SYNTAX_HARDCODE    0x10000U        /* This is hardcoded schema */
+#define        SLAP_SYNTAX_DN          0x20000U        /* Treat like a DN */
 
        Syntax                          **ssyn_sups;
 
@@ -837,6 +849,7 @@ struct AttributeDescription {
 #define SLAP_DESC_BINARY       0x01U
 #define SLAP_DESC_TAG_RANGE    0x80U
 #define SLAP_DESC_TEMPORARY    0x1000U
+       unsigned ad_index;
 };
 
 /* flags to slap_*2undef_ad to register undefined (0, the default)
@@ -1543,6 +1556,7 @@ typedef struct AccessControlState {
 
        /* Value dependent acl where processing can restart */
        AccessControl  *as_vd_acl;
+       int as_vd_acl_present;
        int as_vd_acl_count;
        slap_mask_t             as_vd_mask;
 
@@ -1553,7 +1567,7 @@ typedef struct AccessControlState {
        /* True if started to process frontend ACLs */
        int as_fe_done;
 } AccessControlState;
-#define ACL_STATE_INIT { NULL, ACL_NONE, NULL, 0, ACL_PRIV_NONE, -1, 0 }
+#define ACL_STATE_INIT { NULL, ACL_NONE, NULL, 0, 0, ACL_PRIV_NONE, -1, 0 }
 
 typedef struct AclRegexMatches {        
        int dn_count;
@@ -1587,6 +1601,9 @@ LDAP_SLAPD_V (int) slapMode;
 #define        SLAP_TOOL_READONLY      0x0400
 #define        SLAP_TOOL_QUICK         0x0800
 #define SLAP_TOOL_NO_SCHEMA_CHECK      0x1000
+#define SLAP_TOOL_VALUE_CHECK  0x2000
+
+#define SLAP_SERVER_RUNNING    0x8000
 
 #define SB_TLS_DEFAULT         (-1)
 #define SB_TLS_OFF             0
@@ -1734,12 +1751,12 @@ struct syncinfo_s;
 #define SLAP_SYNCUUID_SET_SIZE 256
 
 struct sync_cookie {
-       struct berval *ctxcsn;
-       struct berval octet_str;
+       BerVarray ctxcsn;
+       int *sids;
+       int numcsns;
        int rid;
+       struct berval octet_str;
        int sid;
-       int numcsns;
-       int *sids;
        LDAP_STAILQ_ENTRY(sync_cookie) sc_next;
 };
 
@@ -1834,11 +1851,14 @@ struct BackendDB {
 #define SLAP_DBFLAG_CLEAN              0x10000U /* was cleanly shutdown */
 #define SLAP_DBFLAG_ACL_ADD            0x20000U /* check attr ACLs on adds */
 #define SLAP_DBFLAG_SYNC_SUBENTRY      0x40000U /* use subentry for context */
+#define SLAP_DBFLAG_MULTI_SHADOW       0x80000U /* uses mirrorMode/multi-master */
+#define SLAP_DBFLAG_DISABLED   0x100000U
        slap_mask_t     be_flags;
 #define SLAP_DBFLAGS(be)                       ((be)->be_flags)
 #define SLAP_NOLASTMOD(be)                     (SLAP_DBFLAGS(be) & SLAP_DBFLAG_NOLASTMOD)
 #define SLAP_LASTMOD(be)                       (!SLAP_NOLASTMOD(be))
 #define SLAP_DBHIDDEN(be)                      (SLAP_DBFLAGS(be) & SLAP_DBFLAG_HIDDEN)
+#define SLAP_DBDISABLED(be)                    (SLAP_DBFLAGS(be) & SLAP_DBFLAG_DISABLED)
 #define SLAP_DB_ONE_SUFFIX(be)         (SLAP_DBFLAGS(be) & SLAP_DBFLAG_ONE_SUFFIX)
 #define SLAP_ISOVERLAY(be)                     (SLAP_DBFLAGS(be) & SLAP_DBFLAG_OVERLAY)
 #define SLAP_ISGLOBALOVERLAY(be)               (SLAP_DBFLAGS(be) & SLAP_DBFLAG_GLOBAL_OVERLAY)
@@ -1857,7 +1877,7 @@ struct BackendDB {
 #define SLAP_SYNC_SHADOW(be)                   (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SYNC_SHADOW)
 #define SLAP_SLURP_SHADOW(be)                  (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SLURP_SHADOW)
 #define SLAP_SINGLE_SHADOW(be)                 (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SINGLE_SHADOW)
-#define SLAP_MULTIMASTER(be)                   (!SLAP_SINGLE_SHADOW(be))
+#define SLAP_MULTIMASTER(be)                   (SLAP_DBFLAGS(be) & SLAP_DBFLAG_MULTI_SHADOW)
 #define SLAP_DBCLEAN(be)                       (SLAP_DBFLAGS(be) & SLAP_DBFLAG_CLEAN)
 #define SLAP_DBACL_ADD(be)                     (SLAP_DBFLAGS(be) & SLAP_DBFLAG_ACL_ADD)
 #define SLAP_SYNC_SUBENTRY(be)                 (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SYNC_SUBENTRY)
@@ -2101,23 +2121,23 @@ struct SlapReply {
                rep_extended_s sru_extended;
        } sr_un;
        slap_mask_t sr_flags;
-#define REP_ENTRY_MODIFIABLE   0x0001U
-#define REP_ENTRY_MUSTBEFREED  0x0002U
-#define REP_ENTRY_MUSTRELEASE  0x0004U
-#define        REP_ENTRY_MASK          (REP_ENTRY_MODIFIABLE|REP_ENTRY_MUSTBEFREED|REP_ENTRY_MUSTRELEASE)
+#define        REP_ENTRY_MODIFIABLE    ((slap_mask_t) 0x0001U)
+#define        REP_ENTRY_MUSTBEFREED   ((slap_mask_t) 0x0002U)
+#define        REP_ENTRY_MUSTRELEASE   ((slap_mask_t) 0x0004U)
+#define        REP_ENTRY_MASK          (REP_ENTRY_MODIFIABLE|REP_ENTRY_MUSTFLUSH)
 #define        REP_ENTRY_MUSTFLUSH     (REP_ENTRY_MUSTBEFREED|REP_ENTRY_MUSTRELEASE)
 
-#define REP_MATCHED_MUSTBEFREED        0x0010U
+#define        REP_MATCHED_MUSTBEFREED ((slap_mask_t) 0x0010U)
 #define        REP_MATCHED_MASK        (REP_MATCHED_MUSTBEFREED)
 
-#define REP_REF_MUSTBEFREED    0x0020U
+#define REP_REF_MUSTBEFREED    ((slap_mask_t) 0x0020U)
 #define REP_REF_MASK           (REP_REF_MUSTBEFREED)
 
-#define REP_CTRLS_MUSTBEFREED  0x0040U
+#define REP_CTRLS_MUSTBEFREED  ((slap_mask_t) 0x0040U)
 #define REP_CTRLS_MASK         (REP_CTRLS_MUSTBEFREED)
 
-#define        REP_NO_ENTRYDN          0x1000U
-#define        REP_NO_SUBSCHEMA        0x2000U
+#define        REP_NO_ENTRYDN          ((slap_mask_t) 0x1000U)
+#define        REP_NO_SUBSCHEMA        ((slap_mask_t) 0x2000U)
 #define        REP_NO_OPERATIONALS     (REP_NO_ENTRYDN|REP_NO_SUBSCHEMA)
 };
 
@@ -2298,6 +2318,7 @@ struct BackendInfo {
 #define        SLAPO_BFLAG_SINGLE              0x01000000U
 #define        SLAPO_BFLAG_DBONLY              0x02000000U
 #define        SLAPO_BFLAG_GLOBONLY            0x04000000U
+#define        SLAPO_BFLAG_DISABLED            0x08000000U
 #define        SLAPO_BFLAG_MASK                0xFF000000U
 
 #define SLAP_BFLAGS(be)                ((be)->bd_info->bi_flags)
@@ -2316,6 +2337,7 @@ struct BackendInfo {
 #define SLAPO_SINGLE(be)       (SLAP_BFLAGS(be) & SLAPO_BFLAG_SINGLE)
 #define SLAPO_DBONLY(be)       (SLAP_BFLAGS(be) & SLAPO_BFLAG_DBONLY)
 #define SLAPO_GLOBONLY(be)     (SLAP_BFLAGS(be) & SLAPO_BFLAG_GLOBONLY)
+#define SLAPO_DISABLED(be)     (SLAP_BFLAGS(be) & SLAPO_BFLAG_DISABLED)
 
        char    **bi_controls;          /* supported controls */
        char    bi_ctrls[SLAP_MAX_CIDS + 1];
@@ -2886,6 +2908,7 @@ struct Connection {
        void    *c_sasl_authctx;        /* SASL authentication context */
        void    *c_sasl_sockctx;        /* SASL security layer context */
        void    *c_sasl_extra;          /* SASL session extra stuff */
+       void    *c_sasl_cbind;          /* SASL channel binding */
        Operation       *c_sasl_bindop; /* set to current op if it's a bind */
 
 #ifdef LDAP_X_TXN
@@ -2969,9 +2992,7 @@ struct Listener {
        ber_socket_t sl_sd;
        Sockaddr sl_sa;
 #define sl_addr        sl_sa.sa_in_addr
-#ifdef LDAP_DEVEL
 #define LDAP_TCP_BUFFER
-#endif
 #ifdef LDAP_TCP_BUFFER
        int     sl_tcp_rmem;    /* custom TCP read buffer size */
        int     sl_tcp_wmem;    /* custom TCP write buffer size */