r20420: create infrastructure to convert attribute values from drsuapi to ldb
authorStefan Metzmacher <metze@samba.org>
Sat, 30 Dec 2006 11:51:35 +0000 (11:51 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:30:34 +0000 (14:30 -0500)
metze
(This used to be commit 17c52ed27613051beecd5bbf72c6e6e749a21d27)

source4/dsdb/samdb/samdb.h
source4/dsdb/schema/schema.h
source4/dsdb/schema/schema_syntax.c

index 40e269f35f4eac27eef7fdc24f0ad0243e5a7aee..8ff44f7554b8f55688e0f39b6a55389c67e8522c 100644 (file)
@@ -27,6 +27,7 @@ struct auth_session_info;
 struct drsuapi_DsNameInfo1;
 struct drsuapi_DsReplicaObject;
 struct drsuapi_DsReplicaOIDMapping_Ctr;
+struct drsuapi_DsReplicaAttribute;
 
 #include "librpc/gen_ndr/security.h"
 #include "lib/ldb/include/ldb.h"
index 051f531a5225632d1cb1a646b42f5edc98de189e..b267c6c74ec4ae308215a01198b5e58bc137f203 100644 (file)
 #ifndef _DSDB_SCHEMA_H
 #define _DSDB_SCHEMA_H
 
+struct dsdb_attribute;
+struct dsdb_class;
+struct dsdb_schema;
+
 struct dsdb_syntax {
        const char *name;
        const char *ldap_oid;
        uint32_t oMSyntax;
        struct ldb_val oMObjectClass;
        const char *attributeSyntax_oid;
+
+       WERROR (*drsuapi_to_ldb)(const struct dsdb_schema *schema,
+                                const struct dsdb_attribute *attr,
+                                const struct drsuapi_DsReplicaAttribute *in,
+                                TALLOC_CTX *mem_ctx,
+                                struct ldb_message_element *out);
+       WERROR (*ldb_to_drsuapi)(const struct dsdb_schema *schema,
+                                const struct dsdb_attribute *attr,
+                                const struct ldb_message_element *in,
+                                TALLOC_CTX *mem_ctx,
+                                struct drsuapi_DsReplicaAttribute *out);
 };
 
 struct dsdb_attribute {
index 06ac51e417bbc0ee0d3d42edbdd3883750f1a69c..65aed2ce0b683549e723c293b1c28020b37bc05d 100644 (file)
 */
 #include "includes.h"
 #include "dsdb/samdb/samdb.h"
+#include "librpc/gen_ndr/drsuapi.h"
+
+static WERROR dsdb_syntax_FOOBAR_drsuapi_to_ldb(const struct dsdb_schema *schema,
+                                               const struct dsdb_attribute *attr,
+                                               const struct drsuapi_DsReplicaAttribute *in,
+                                               TALLOC_CTX *mem_ctx,
+                                               struct ldb_message_element *out)
+{
+       return WERR_FOOBAR;
+}
+
+static WERROR dsdb_syntax_FOOBAR_ldb_to_drsuapi(const struct dsdb_schema *schema,
+                                               const struct dsdb_attribute *attr,
+                                               const struct ldb_message_element *in,
+                                               TALLOC_CTX *mem_ctx,
+                                               struct drsuapi_DsReplicaAttribute *out)
+{
+       return WERR_FOOBAR;
+}
 
 #define OMOBJECTCLASS(val) { .length = sizeof(val) - 1, .data = discard_const_p(uint8_t, val) }
 
@@ -30,123 +49,169 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.7",
                .oMSyntax               = 1,
                .attributeSyntax_oid    = "2.5.5.8",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Integer",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.27",
                .oMSyntax               = 2,
                .attributeSyntax_oid    = "2.5.5.9",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Octet)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
                .oMSyntax               = 4,
                .attributeSyntax_oid    = "2.5.5.10",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Sid)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
                .oMSyntax               = 4,
                .attributeSyntax_oid    = "2.5.5.17",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Object-Identifier)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.38",
                .oMSyntax               = 6,
                .attributeSyntax_oid    = "2.5.5.2",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Enumeration",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.27",
                .oMSyntax               = 10,
                .attributeSyntax_oid    = "2.5.5.9",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Numeric)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.36",
                .oMSyntax               = 18,
                .attributeSyntax_oid    = "2.5.5.6",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Printable)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.44",
                .oMSyntax               = 19,
                .attributeSyntax_oid    = "2.5.5.5",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Teletex)",
                .ldap_oid               = "1.2.840.113556.1.4.905",
                .oMSyntax               = 20,
                .attributeSyntax_oid    = "2.5.5.4",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(IA5)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.26",
                .oMSyntax               = 22,
                .attributeSyntax_oid    = "2.5.5.5",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(UTC-Time)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.53",
                .oMSyntax               = 23,
                .attributeSyntax_oid    = "2.5.5.11",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Generalized-Time)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.24",
                .oMSyntax               = 24,
                .attributeSyntax_oid    = "2.5.5.11",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Case Sensitive)",
                .ldap_oid               = "1.2.840.113556.1.4.1362",
                .oMSyntax               = 27,
                .attributeSyntax_oid    = "2.5.5.3",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(Unicode)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.15",
                .oMSyntax               = 64,
                .attributeSyntax_oid    = "2.5.5.12",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Interval/LargeInteger",
                .ldap_oid               = "1.2.840.113556.1.4.906",
                .oMSyntax               = 65,
                .attributeSyntax_oid    = "2.5.5.16",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "String(NT-Sec-Desc)",
                .ldap_oid               = "1.2.840.113556.1.4.907",
                .oMSyntax               = 66,
                .attributeSyntax_oid    = "2.5.5.15",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Object(DS-DN)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.12",
                .oMSyntax               = 127,
                .oMObjectClass          = OMOBJECTCLASS("\x2b\x0c\x02\x87\x73\x1c\x00\x85\x4a"),
                .attributeSyntax_oid    = "2.5.5.1",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Object(DN-Binary)",
                .ldap_oid               = "1.2.840.113556.1.4.903",
                .oMSyntax               = 127,
                .oMObjectClass          = OMOBJECTCLASS("\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x0b"),
                .attributeSyntax_oid    = "2.5.5.7",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Object(OR-Name)",
                .ldap_oid               = "1.2.840.113556.1.4.1221",
                .oMSyntax               = 127,
                .oMObjectClass          = OMOBJECTCLASS("\x56\x06\x01\x02\x05\x0b\x1D"),
                .attributeSyntax_oid    = "2.5.5.7",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Object(Replica-Link)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
                .oMSyntax               = 127,
                .oMObjectClass          = OMOBJECTCLASS("\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x06"),
                .attributeSyntax_oid    = "2.5.5.10",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.43",
                .oMSyntax               = 127,
                .oMObjectClass          = OMOBJECTCLASS("\x2b\x0c\x02\x87\x73\x1c\x00\x85\x5c"),
                .attributeSyntax_oid    = "2.5.5.13",
                .name                   = "Object(Presentation-Address)",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Object(Access-Point)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.2",
                .oMSyntax               = 127,
                .oMObjectClass          = OMOBJECTCLASS("\x2b\x0c\x02\x87\x73\x1c\x00\x85\x3e"),
                .attributeSyntax_oid    = "2.5.5.14",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        },{
                .name                   = "Object(DN-String)",
                .ldap_oid               = "1.2.840.113556.1.4.904",
                .oMSyntax               = 127,
                .oMObjectClass          = OMOBJECTCLASS("\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x0c"),
                .attributeSyntax_oid    = "2.5.5.14",
+               .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
+               .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
        }
 };
 
@@ -174,3 +239,33 @@ const struct dsdb_syntax *dsdb_syntax_for_attribute(const struct dsdb_attribute
 
        return NULL;
 }
+
+WERROR dsdb_attribute_drsuapi_to_ldb(const struct dsdb_schema *schema,
+                                    const struct drsuapi_DsReplicaAttribute *in,
+                                    TALLOC_CTX *mem_ctx,
+                                    struct ldb_message_element *out)
+{
+       const struct dsdb_attribute *sa;
+
+       sa = dsdb_attribute_by_attributeID_id(schema, in->attid);
+       if (!sa) {
+               return WERR_FOOBAR;
+       }
+
+       return sa->syntax->drsuapi_to_ldb(schema, sa, in, mem_ctx, out);
+}
+
+WERROR dsdb_attribute_ldb_to_drsuapi(const struct dsdb_schema *schema,
+                                    const struct ldb_message_element *in,
+                                    TALLOC_CTX *mem_ctx,
+                                    struct drsuapi_DsReplicaAttribute *out)
+{
+       const struct dsdb_attribute *sa;
+
+       sa = dsdb_attribute_by_lDAPDisplayName(schema, in->name);
+       if (!sa) {
+               return WERR_FOOBAR;
+       }
+
+       return sa->syntax->ldb_to_drsuapi(schema, sa, in, mem_ctx, out);
+}