2006-12-17 02:19:56 +00:00
/*
Unix SMB / CIFS mplementation .
DSDB schema header
2007-03-14 19:10:21 +00:00
Copyright ( C ) Stefan Metzmacher < metze @ samba . org > 2006
2006-12-17 02:19:56 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-10 02:07:03 +00:00
the Free Software Foundation ; either version 3 of the License , or
2006-12-17 02:19:56 +00:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 02:07:03 +00:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2006-12-17 02:19:56 +00:00
*/
# ifndef _DSDB_SCHEMA_H
# define _DSDB_SCHEMA_H
2009-10-18 21:31:37 +03:00
# include "prefixmap.h"
2006-12-30 11:51:35 +00:00
struct dsdb_attribute ;
struct dsdb_class ;
struct dsdb_schema ;
2006-12-29 10:35:44 +00:00
struct dsdb_syntax {
const char * name ;
const char * ldap_oid ;
uint32_t oMSyntax ;
struct ldb_val oMObjectClass ;
const char * attributeSyntax_oid ;
2008-08-18 10:16:45 +10:00
const char * equality ;
const char * substring ;
const char * comment ;
2008-08-18 20:30:27 +10:00
const char * ldb_syntax ;
2006-12-30 11:51:35 +00:00
2008-12-19 15:24:36 +11:00
WERROR ( * drsuapi_to_ldb ) ( struct ldb_context * ldb ,
const struct dsdb_schema * schema ,
2006-12-30 11:51:35 +00:00
const struct dsdb_attribute * attr ,
const struct drsuapi_DsReplicaAttribute * in ,
TALLOC_CTX * mem_ctx ,
struct ldb_message_element * out ) ;
2008-12-19 15:24:36 +11:00
WERROR ( * ldb_to_drsuapi ) ( struct ldb_context * ldb ,
const struct dsdb_schema * schema ,
2006-12-30 11:51:35 +00:00
const struct dsdb_attribute * attr ,
const struct ldb_message_element * in ,
TALLOC_CTX * mem_ctx ,
struct drsuapi_DsReplicaAttribute * out ) ;
2009-09-29 18:57:01 +02:00
WERROR ( * validate_ldb ) ( struct ldb_context * ldb ,
const struct dsdb_schema * schema ,
const struct dsdb_attribute * attr ,
const struct ldb_message_element * in ) ;
2006-12-29 10:35:44 +00:00
} ;
2006-12-17 02:19:56 +00:00
struct dsdb_attribute {
struct dsdb_attribute * prev , * next ;
const char * cn ;
const char * lDAPDisplayName ;
const char * attributeID_oid ;
uint32_t attributeID_id ;
struct GUID schemaIDGUID ;
uint32_t mAPIID ;
2010-01-07 02:46:25 +02:00
uint32_t msDS_IntId ;
2006-12-17 02:19:56 +00:00
struct GUID attributeSecurityGUID ;
2009-11-16 18:40:24 +11:00
struct GUID objectGUID ;
2006-12-17 02:19:56 +00:00
uint32_t searchFlags ;
uint32_t systemFlags ;
2007-08-27 18:10:19 +00:00
bool isMemberOfPartialAttributeSet ;
2006-12-17 02:19:56 +00:00
uint32_t linkID ;
const char * attributeSyntax_oid ;
uint32_t attributeSyntax_id ;
uint32_t oMSyntax ;
struct ldb_val oMObjectClass ;
2007-08-27 18:10:19 +00:00
bool isSingleValued ;
2008-11-13 21:32:04 +01:00
uint32_t * rangeLower ;
uint32_t * rangeUpper ;
2007-08-27 18:10:19 +00:00
bool extendedCharsAllowed ;
2006-12-17 02:19:56 +00:00
uint32_t schemaFlagsEx ;
struct ldb_val msDs_Schema_Extensions ;
2007-08-27 18:10:19 +00:00
bool showInAdvancedViewOnly ;
2006-12-17 02:19:56 +00:00
const char * adminDisplayName ;
const char * adminDescription ;
const char * classDisplayName ;
2007-08-27 18:10:19 +00:00
bool isEphemeral ;
bool isDefunct ;
bool systemOnly ;
2006-12-29 10:35:44 +00:00
/* internal stuff */
const struct dsdb_syntax * syntax ;
2009-04-02 16:42:21 +11:00
const struct ldb_schema_attribute * ldb_schema_attribute ;
2006-12-17 02:19:56 +00:00
} ;
struct dsdb_class {
struct dsdb_class * prev , * next ;
const char * cn ;
const char * lDAPDisplayName ;
const char * governsID_oid ;
uint32_t governsID_id ;
struct GUID schemaIDGUID ;
2009-11-16 18:40:24 +11:00
struct GUID objectGUID ;
2006-12-17 02:19:56 +00:00
uint32_t objectClassCategory ;
const char * rDNAttID ;
const char * defaultObjectCategory ;
const char * subClassOf ;
2006-12-28 13:06:29 +00:00
const char * * systemAuxiliaryClass ;
2006-12-17 02:19:56 +00:00
const char * * systemPossSuperiors ;
const char * * systemMustContain ;
const char * * systemMayContain ;
2006-12-28 13:06:29 +00:00
const char * * auxiliaryClass ;
2006-12-17 02:19:56 +00:00
const char * * possSuperiors ;
const char * * mustContain ;
const char * * mayContain ;
2007-07-27 03:08:15 +00:00
const char * * possibleInferiors ;
2009-09-24 15:12:49 -07:00
const char * * systemPossibleInferiors ;
2006-12-17 02:19:56 +00:00
const char * defaultSecurityDescriptor ;
uint32_t schemaFlagsEx ;
struct ldb_val msDs_Schema_Extensions ;
2007-08-27 18:10:19 +00:00
bool showInAdvancedViewOnly ;
2006-12-17 02:19:56 +00:00
const char * adminDisplayName ;
const char * adminDescription ;
const char * classDisplayName ;
2007-08-27 18:10:19 +00:00
bool defaultHidingValue ;
bool isDefunct ;
bool systemOnly ;
2009-04-08 23:18:49 +10:00
2009-10-17 22:25:12 +02:00
const char * * supclasses ;
const char * * subclasses ;
const char * * subclasses_direct ;
const char * * posssuperiors ;
2009-07-02 14:49:40 +10:00
uint32_t subClassOf_id ;
uint32_t * systemAuxiliaryClass_ids ;
uint32_t * auxiliaryClass_ids ;
uint32_t * systemMayContain_ids ;
uint32_t * systemMustContain_ids ;
uint32_t * possSuperiors_ids ;
uint32_t * mustContain_ids ;
uint32_t * mayContain_ids ;
uint32_t * systemPossSuperiors_ids ;
2009-09-15 08:14:54 -07:00
/* An ordered index showing how this subClass fits into the
* subClass tree . that is , an objectclass that is not
* subClassOf anything is 0 ( just in case ) , and top is 1 , and
* subClasses of top are 2 , subclasses of those classes are
* 3 */
uint32_t subClass_order ;
2006-12-17 02:19:56 +00:00
} ;
2010-03-23 02:32:14 +02:00
/**
* data stored in schemaInfo attribute
*/
struct dsdb_schema_info {
uint32_t revision ;
struct GUID invocation_id ;
} ;
2006-12-21 20:51:50 +00:00
2006-12-17 02:19:56 +00:00
struct dsdb_schema {
2010-03-22 15:41:51 +11:00
struct ldb_dn * base_dn ;
2006-12-21 20:51:50 +00:00
2009-10-26 00:31:28 +02:00
struct dsdb_schema_prefixmap * prefixmap ;
2006-12-21 20:51:50 +00:00
/*
* the last element of the prefix mapping table isn ' t a oid ,
* it starts with 0xFF and has 21 bytes and is maybe a schema
* version number
2006-12-23 10:39:26 +00:00
*
* this is the content of the schemaInfo attribute of the
* Schema - Partition head object .
2006-12-21 20:51:50 +00:00
*/
2006-12-23 10:39:26 +00:00
const char * schema_info ;
2006-12-21 20:51:50 +00:00
2010-03-22 15:41:51 +11:00
/* We can also tell the schema version from the USN on the partition */
uint64_t loaded_usn ;
2006-12-17 02:19:56 +00:00
struct dsdb_attribute * attributes ;
struct dsdb_class * classes ;
2008-02-19 13:39:27 +01:00
2009-04-02 16:42:21 +11:00
/* lists of classes sorted by various attributes, for faster
access */
uint32_t num_classes ;
struct dsdb_class * * classes_by_lDAPDisplayName ;
struct dsdb_class * * classes_by_governsID_id ;
struct dsdb_class * * classes_by_governsID_oid ;
struct dsdb_class * * classes_by_cn ;
/* lists of attributes sorted by various fields */
uint32_t num_attributes ;
struct dsdb_attribute * * attributes_by_lDAPDisplayName ;
struct dsdb_attribute * * attributes_by_attributeID_id ;
struct dsdb_attribute * * attributes_by_attributeID_oid ;
struct dsdb_attribute * * attributes_by_linkID ;
2008-07-01 16:35:13 +02:00
struct {
bool we_are_master ;
struct ldb_dn * master_dn ;
} fsmo ;
2010-03-22 15:41:51 +11:00
/* Was this schema loaded from ldb (if so, then we will reload it when we detect a change in ldb) */
struct ldb_module * loaded_from_module ;
struct dsdb_schema * ( * refresh_fn ) ( struct ldb_module * module , struct dsdb_schema * schema , bool is_global_schema ) ;
bool refresh_in_progress ;
2010-03-22 18:44:51 +11:00
/* an 'opaque' sequence number that the reload function may also wish to use */
uint64_t reload_seq_number ;
2006-12-17 02:19:56 +00:00
} ;
2008-07-10 15:52:44 +10:00
enum dsdb_attr_list_query {
DSDB_SCHEMA_ALL_MAY ,
DSDB_SCHEMA_ALL_MUST ,
DSDB_SCHEMA_SYS_MAY ,
DSDB_SCHEMA_SYS_MUST ,
DSDB_SCHEMA_MAY ,
2008-07-11 15:11:32 +10:00
DSDB_SCHEMA_MUST ,
DSDB_SCHEMA_ALL
2008-07-10 15:52:44 +10:00
} ;
2008-08-15 20:40:57 +10:00
enum dsdb_schema_convert_target {
TARGET_OPENLDAP ,
TARGET_FEDORA_DS ,
TARGET_AD_SCHEMA_SUBENTRY
} ;
2007-12-17 04:22:44 +01:00
# include "dsdb/schema/proto.h"
2006-12-17 02:19:56 +00:00
# endif /* _DSDB_SCHEMA_H */