X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fslap.h;h=6dcef2c184de99f47eb1c84fe5ecce28d30b5f69;hb=a5ee438c9394a19a241716d3d922299c20b0365d;hp=b300852ba288962d5132a6b2e7215e6edd365c60;hpb=bf3a2294231de245cd5d76d0f90473521a0f1fbf;p=openldap diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index b300852ba2..6dcef2c184 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -93,24 +93,58 @@ LDAP_BEGIN_DECL #define AD_LEADCHAR(c) ( ATTR_CHAR(c) ) #define AD_CHAR(c) ( ATTR_CHAR(c) || (c) == ';' ) -#define SLAPD_ACI_DEFAULT_ATTR "aci" +/* must match in schema_init.c */ +#define SLAPD_DN_SYNTAX "1.3.6.1.4.1.1466.115.121.1.12" +#define SLAPD_GROUP_ATTR "member" +#define SLAPD_GROUP_CLASS "groupOfNames" +#define SLAPD_ROLE_ATTR "roleOccupant" +#define SLAPD_ROLE_CLASS "organizationalRole" -/* schema needed by slapd */ -#define SLAPD_OID_DN_SYNTAX "1.3.6.1.4.1.1466.115.121.1.12" -#define SLAPD_OID_ACI_SYNTAX "1.3.6.1.4.1.4203.666.2.1" /* experimental */ +#define SLAPD_ACI_SYNTAX "1.3.6.1.4.1.4203.666.2.1" +#define SLAPD_ACI_ATTR "OpenLDAPaci" LIBSLAPD_F (int) slap_debug; /* * Index types */ -#define SLAP_INDEX_PRESENCE 0x0001U -#define SLAP_INDEX_EQUALITY 0x0002U -#define SLAP_INDEX_APPROX 0x0004U -#define SLAP_INDEX_SUBSTR 0x0008U -#define SLAP_INDEX_EXTENDED 0x0010U -#define SLAP_INDEX_UNDEFINED 0x1000U -#define SLAP_INDEX_FROMINIT 0x8000U /* psuedo type */ +#define SLAP_INDEX_TYPE 0x00FFUL +#define SLAP_INDEX_UNDEFINED 0x0001UL +#define SLAP_INDEX_PRESENT 0x0002UL +#define SLAP_INDEX_EQUALITY 0x0004UL +#define SLAP_INDEX_APPROX 0x0008UL +#define SLAP_INDEX_SUBSTR 0x0010UL +#define SLAP_INDEX_EXTENDED 0x0020UL + +#define SLAP_INDEX_DEFAULT SLAP_INDEX_EQUALITY + +#define IS_SLAP_INDEX(mask, type) (((mask) & (type)) == (type) ) + +#define SLAP_INDEX_SUBSTR_TYPE 0x0F00UL + +#define SLAP_INDEX_SUBSTR_INITIAL ( SLAP_INDEX_SUBSTR | 0x0100UL ) +#define SLAP_INDEX_SUBSTR_ANY ( SLAP_INDEX_SUBSTR | 0x0200UL ) +#define SLAP_INDEX_SUBSTR_FINAL ( SLAP_INDEX_SUBSTR | 0x0400UL ) +#define SLAP_INDEX_SUBSTR_DEFAULT ( SLAP_INDEX_SUBSTR \ + | SLAP_INDEX_SUBSTR_INITIAL | SLAP_INDEX_SUBSTR_FINAL ) + +#define SLAP_INDEX_FLAGS 0xF000UL +#define SLAP_INDEX_SUBTYPES 0x1000UL /* use index with subtypes */ +#define SLAP_INDEX_AUTO_SUBTYPES 0x2000UL /* use mask with subtypes */ +#define SLAP_INDEX_LANG 0x4000UL /* use index with lang subtypes */ +#define SLAP_INDEX_AUTO_LANG 0x8000UL /* use mask with lang subtypes */ + +typedef long slap_index; + +/* + * there is a single index for each attribute. these prefixes ensure + * that there is no collision among keys. + */ +#define SLAP_INDEX_EQUALITY_PREFIX '=' /* prefix for equality keys */ +#define SLAP_INDEX_APPROX_PREFIX '~' /* prefix for approx keys */ +#define SLAP_INDEX_SUBSTR_PREFIX '*' /* prefix for substring keys */ +#define SLAP_INDEX_CONT_PREFIX '.' /* prefix for continuation keys */ +#define SLAP_INDEX_UNKNOWN_PREFIX '?' /* prefix for unknown keys */ /* * represents schema information for a database @@ -155,12 +189,15 @@ typedef struct slap_syntax { unsigned ssyn_flags; -#define SLAP_SYNTAX_NONE 0x0U -#define SLAP_SYNTAX_BLOB 0x1U /* syntax treated as blob (audio) */ -#define SLAP_SYNTAX_BINARY 0x2U /* binary transfer required (certificate) */ -#define SLAP_SYNTAX_BER 0x4U /* stored using BER encoding (binary,certificate) */ +#define SLAP_SYNTAX_NONE 0x00U +#define SLAP_SYNTAX_BLOB 0x01U /* syntax treated as blob (audio) */ +#define SLAP_SYNTAX_BINARY 0x02U /* binary transfer required (certificate) */ +#define SLAP_SYNTAX_BER 0x04U /* stored using BER encoding (binary,certificate) */ +#define SLAP_SYNTAX_HIDE 0x80U /* hide (do not publish) */ slap_syntax_validate_func *ssyn_validate; + slap_syntax_transform_func *ssyn_normalize; + slap_syntax_transform_func *ssyn_pretty; #ifdef SLAPD_BINARY_CONVERSION /* convert to and from binary */ @@ -175,6 +212,7 @@ typedef struct slap_syntax { #define slap_syntax_is_blob(s) slap_syntax_is_flag((s),SLAP_SYNTAX_BLOB) #define slap_syntax_is_binary(s) slap_syntax_is_flag((s),SLAP_SYNTAX_BINARY) #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) /* XXX -> UCS-2 Converter */ typedef int slap_mr_convert_func LDAP_P(( @@ -191,6 +229,7 @@ typedef int slap_mr_normalize_func LDAP_P(( /* Match (compare) function */ typedef int slap_mr_match_func LDAP_P(( + int *match, unsigned use, struct slap_syntax *syntax, /* syntax of stored value */ struct slap_matching_rule *mr, @@ -202,18 +241,18 @@ typedef int slap_mr_indexer_func LDAP_P(( unsigned use, struct slap_syntax *syntax, /* syntax of stored value */ struct slap_matching_rule *mr, + struct berval *prefix, struct berval **values, - struct berval **keys )); - -struct slap_filter; /* forward declaration */ + struct berval ***keys )); /* Filter index function */ typedef int slap_mr_filter_func LDAP_P(( unsigned use, struct slap_syntax *syntax, /* syntax of stored value */ struct slap_matching_rule *mr, - struct slap_filter *filter, - struct berval **keys )); + struct berval *prefix, + void * assertValue, + struct berval ***keys )); typedef struct slap_matching_rule { LDAP_MATCHING_RULE smr_mrule; @@ -257,6 +296,7 @@ typedef struct slap_attribute_type { struct slap_attribute_type *sat_sup; struct slap_attribute_type **sat_subtypes; MatchingRule *sat_equality; + MatchingRule *sat_approx; MatchingRule *sat_ordering; MatchingRule *sat_substr; Syntax *sat_syntax; @@ -317,6 +357,7 @@ typedef struct slap_attr_desc { #define SLAP_DESC_BINARY 0x1U } AttributeDescription; +#define slap_ad_is_lang(ad) ( (ad)->ad_lang != NULL ) #define slap_ad_is_binary(ad) ( (int)((ad)->ad_flags & SLAP_DESC_BINARY) ? 1 : 0 ) /* @@ -324,8 +365,13 @@ typedef struct slap_attr_desc { */ struct slap_internal_schema { /* objectClass */ + ObjectClass *si_oc_top; + ObjectClass *si_oc_extensibleObject; ObjectClass *si_oc_alias; ObjectClass *si_oc_referral; + ObjectClass *si_oc_subentry; + ObjectClass *si_oc_subschema; + ObjectClass *si_oc_rootdse; /* objectClass attribute */ AttributeDescription *si_ad_objectClass; @@ -342,9 +388,6 @@ struct slap_internal_schema { AttributeDescription *si_ad_supportedControl; AttributeDescription *si_ad_supportedExtension; AttributeDescription *si_ad_supportedLDAPVersion; -#ifdef SLAPD_ACI_ENABLED - AttributeDescription *si_ad_supportedACIMechanisms; -#endif AttributeDescription *si_ad_supportedSASLMechanisms; /* subschema subentry attributes */ @@ -358,9 +401,12 @@ struct slap_internal_schema { AttributeDescription *si_ad_aliasedObjectName; AttributeDescription *si_ad_ref; - /* ACL Internals */ + /* Access Control Internals */ AttributeDescription *si_ad_entry; AttributeDescription *si_ad_children; +#ifdef SLAPD_ACI_ENABLED + AttributeDescription *si_ad_aci; +#endif /* Other */ AttributeDescription *si_ad_userPassword; @@ -380,7 +426,7 @@ typedef struct slap_ss_assertion { struct berval *sa_initial; struct berval **sa_any; struct berval *sa_final; -} SubstringAssertion; +} SubstringsAssertion; typedef struct slap_mr_assertion { char *ma_rule; /* optional */ @@ -437,7 +483,7 @@ typedef struct slap_filter { AttributeAssertion *f_un_ava; /* substring assertion */ - SubstringAssertion *f_un_ssa; + SubstringsAssertion *f_un_ssa; /* matching rule assertion */ MatchingRuleAssertion *f_un_mra; @@ -478,6 +524,7 @@ typedef struct slap_filter { #define f_dn f_un.f_un_type /* used for DN indices */ #define f_type f_un.f_un_type +#define f_desc f_type #define f_ava f_un.f_un_ava #define f_avtype f_un.f_un_ava.ava_type #define f_avvalue f_un.f_un_ava.ava_value @@ -487,6 +534,7 @@ typedef struct slap_filter { #define f_mrdnaddrs f_un.f_un_mra.mra_dnattrs #define f_sub f_un.f_un_sub #define f_sub_type f_un.f_un_sub.f_un_sub_type +#define f_sub_desc f_sub_type #define f_sub_initial f_un.f_un_sub.f_un_sub_initial #define f_sub_any f_un.f_un_sub.f_un_sub_any #define f_sub_final f_un.f_un_sub.f_un_sub_final @@ -715,10 +763,11 @@ typedef struct slap_access { /* ACL Groups */ char *a_group_pat; - char *a_group_oc; #ifdef SLAPD_SCHEMA_NOT_COMPAT + ObjectClass *a_group_oc; AttributeDescription *a_group_at; #else + char *a_group_oc; char *a_group_at; #endif @@ -970,12 +1019,12 @@ struct slap_backend_info { #ifdef SLAPD_SCHEMA_NOT_COMPAT int (*bi_acl_group) LDAP_P((Backend *bd, Entry *e, const char *bdn, const char *edn, - const char *objectclassValue, + ObjectClass *group_oc, AttributeDescription *group_at )); #else int (*bi_acl_group) LDAP_P((Backend *bd, Entry *e, const char *bdn, const char *edn, - const char *objectclassValue, + const char *group_oc, const char *group_at )); #endif