Merge the two attribute syntax tables.
authorAndrew Bartlett <abartlet@samba.org>
Mon, 18 Aug 2008 00:16:45 +0000 (10:16 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 18 Aug 2008 00:16:45 +0000 (10:16 +1000)
This merges the table once found in the oLschema2ldif tool (and moved
many times) with the table used for DRSUAPI.

The OpenLDAP schema map has been updated, to ensure that despite a
number of attributes being declared as OIDs, they are actually used as
strings (as they are actually LDAP class/attribute names).

Andrew Bartlett

source/dsdb/config.mk
source/dsdb/schema/schema.h
source/dsdb/schema/schema_convert.c [deleted file]
source/dsdb/schema/schema_convert.h [deleted file]
source/dsdb/schema/schema_description.c
source/dsdb/schema/schema_syntax.c
source/setup/schema-map-openldap-2.3
source/utils/ad2oLschema.c
source/utils/oLschema2ldif.c

index d430c3f9575da496e29b1f9866b1e597505f959d..ae35078537242f87af56769367884fb5741ad42c 100644 (file)
@@ -35,8 +35,7 @@ PRIVATE_DEPENDENCIES = SAMDB_COMMON NDR_DRSUAPI NDR_DRSBLOBS
 SAMDB_SCHEMA_OBJ_FILES = $(addprefix $(dsdbsrcdir)/schema/, \
                schema_init.o \
                schema_syntax.o \
-               schema_description.o \
-               schema_convert.o)
+               schema_description.o)
 
 $(eval $(call proto_header_template,$(dsdbsrcdir)/schema/proto.h,$(SAMDB_SCHEMA_OBJ_FILES:.o=.c)))
 # PUBLIC_HEADERS += dsdb/schema/schema.h
index cd714e9c6189d096db4fde6ec755c7545289b368..df7826d61d7df4b01e56b8938bb6f8231df45e23 100644 (file)
@@ -32,6 +32,9 @@ struct dsdb_syntax {
        uint32_t oMSyntax;
        struct ldb_val oMObjectClass;
        const char *attributeSyntax_oid;
+       const char *equality;
+       const char *substring;
+       const char *comment;
 
        WERROR (*drsuapi_to_ldb)(const struct dsdb_schema *schema,
                                 const struct dsdb_attribute *attr,
@@ -174,14 +177,6 @@ enum dsdb_schema_convert_target {
        TARGET_AD_SCHEMA_SUBENTRY
 };
 
-struct dsdb_syntax_map {
-       const char *Standard_OID;
-       const char *AD_OID;
-       const char *equality;
-       const char *substring;
-       const char *comment;
-};
-
 #include "dsdb/schema/proto.h"
 
 #endif /* _DSDB_SCHEMA_H */
diff --git a/source/dsdb/schema/schema_convert.c b/source/dsdb/schema/schema_convert.c
deleted file mode 100644 (file)
index 673e7a3..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/* 
-   ldb database library
-
-   Copyright (C) Simo Sorce 2005
-   
-   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
-   the Free Software Foundation; either version 3 of the License, or
-   (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
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "dsdb/samdb/samdb.h"
-
-/* Shared map for converting syntax between formats */
-static const struct dsdb_syntax_map syntax_map[] = {
-       { 
-               .Standard_OID = "1.3.6.1.4.1.1466.115.121.1.12", 
-               .AD_OID = "2.5.5.1", 
-               .equality = "distinguishedNameMatch",
-               .comment = "Object(DS-DN) == a DN" 
-       },
-       {
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.38",
-               .AD_OID =  "2.5.5.2",
-               .equality = "objectIdentifierMatch",
-               .comment =  "OID String"
-       },
-       { 
-               .Standard_OID =  "1.2.840.113556.1.4.905", 
-               .AD_OID =  "2.5.5.4",
-               .equality = "caseIgnoreMatch",
-               .substring = "caseIgnoreSubstringsMatch",
-               .comment =   "Case Insensitive String" 
-       },
-       {
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.26",
-               .AD_OID =   "2.5.5.5",
-               .equality = "caseExactIA5Match",
-               .comment = "Printable String"
-       },
-       {
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.36",
-               .AD_OID =   "2.5.5.6", 
-               .equality = "numericStringMatch",
-               .substring = "numericStringSubstringsMatch",
-               .comment = "Numeric String" 
-       },
-       { 
-               .Standard_OID =  "1.2.840.113556.1.4.903", 
-               .AD_OID =  "2.5.5.7", 
-               .equality = "distinguishedNameMatch",
-               .comment = "OctetString: Binary+DN" 
-       },
-       { 
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.7",
-               .AD_OID =   "2.5.5.8", 
-               .equality = "booleanMatch",
-               .comment = "Boolean" 
-       },
-       { 
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.27",
-               .AD_OID =   "2.5.5.9", 
-               .equality = "integerMatch",
-               .comment = "Integer" 
-       },
-       { 
-               .Standard_OID = "1.3.6.1.4.1.1466.115.121.1.40",
-               .AD_OID       = "2.5.5.10",
-               .equality     = "octetStringMatch",
-               .comment      =  "Octet String"
-       },
-       {
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.24",
-               .AD_OID =   "2.5.5.11", 
-               .equality = "generalizedTimeMatch",
-               .comment = "Generalized Time"
-       },
-       { 
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.53",
-               .AD_OID =   "2.5.5.11", 
-               .equality = "generalizedTimeMatch",
-               .comment = "UTC Time" 
-       },
-       { 
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.15",
-               .AD_OID =   "2.5.5.12", 
-               .equality = "caseIgnoreMatch",
-               .substring = "caseIgnoreSubstringsMatch",
-               .comment = "Directory String"
-       },
-       {
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.43",
-               .AD_OID =   "2.5.5.13", 
-               .comment = "Presentation Address" 
-       },
-       {
-               .Standard_OID =   "Not Found Yet", 
-               .AD_OID =  "2.5.5.14", 
-               .equality = "distinguishedNameMatch",
-               .comment = "OctetString: String+DN" 
-       },
-       {
-               .Standard_OID =  "1.2.840.113556.1.4.907",
-               .AD_OID =   "2.5.5.15", 
-               .equality     = "octetStringMatch",
-               .comment = "NT Security Descriptor"
-       },
-       { 
-               .Standard_OID =  "1.2.840.113556.1.4.906", 
-               .AD_OID =  "2.5.5.16", 
-               .equality = "integerMatch",
-               .comment = "Large Integer" 
-       },
-       {
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.40",
-               .AD_OID =   "2.5.5.17",
-               .equality     = "octetStringMatch",
-               .comment =  "Octet String - Security Identifier (SID)" 
-       },
-       { 
-               .Standard_OID =  "1.3.6.1.4.1.1466.115.121.1.26", 
-               .AD_OID =  "2.5.5.5", 
-               .equality = "caseExactIA5Match",
-               .comment = "IA5 String" 
-       },
-       {       .Standard_OID = NULL
-       }
-};
-
-
-const struct dsdb_syntax_map *find_syntax_map_by_ad_oid(const char *ad_oid) 
-{
-       int i;
-       for (i=0; syntax_map[i].Standard_OID; i++) {
-               if (strcasecmp(ad_oid, syntax_map[i].AD_OID) == 0) {
-                       return &syntax_map[i];
-               }
-       }
-       return NULL;
-}
-
-const struct dsdb_syntax_map *find_syntax_map_by_standard_oid(const char *standard_oid) 
-{
-       int i;
-       for (i=0; syntax_map[i].Standard_OID; i++) {
-               if (strcasecmp(standard_oid, syntax_map[i].Standard_OID) == 0) {
-                       return &syntax_map[i];
-               }
-       }
-       return NULL;
-}
diff --git a/source/dsdb/schema/schema_convert.h b/source/dsdb/schema/schema_convert.h
deleted file mode 100644 (file)
index de37934..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-struct syntax_map {
-       const char *Standard_OID;
-       const char *AD_OID;
-       const char *equality;
-       const char *substring;
-       const char *comment;
-};
-
-const struct syntax_map *find_syntax_map_by_ad_oid(const char *ad_oid); 
-const struct syntax_map *find_syntax_map_by_standard_oid(const char *standard_oid);
index 2f3acd1336ef96bd3b92577224c1f32533744779..9d93af9260a87ccfbfe5b4bb0257441cec35fe62 100644 (file)
@@ -90,8 +90,8 @@ char *schema_attribute_description(TALLOC_CTX *mem_ctx,
 char *schema_attribute_to_description(TALLOC_CTX *mem_ctx, const struct dsdb_attribute *attribute) 
 {
        char *schema_description;
-       const struct dsdb_syntax_map *map = find_syntax_map_by_ad_oid(attribute->attributeSyntax_oid);
-       const char *syntax = map ? map->Standard_OID : attribute->attributeSyntax_oid;
+       const struct dsdb_syntax *map = find_syntax_map_by_ad_oid(attribute->attributeSyntax_oid);
+       const char *syntax = map ? map->ldap_oid : attribute->attributeSyntax_oid;
        TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
        if (!tmp_ctx) {
                return NULL;
index beacfc49c2621694a8c7a073da8c8a52d3848665..b1ca256e6299c235ea7c75f5f92c58e891714013 100644 (file)
@@ -3,7 +3,9 @@
    DSDB schema syntaxes
    
    Copyright (C) Stefan Metzmacher <metze@samba.org> 2006
-    
+   Copyright (C) Simo Sorce 2005
+   Copyright (C) Andrew Bartlett <abartlet@samba.org> 2008
+
    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
    the Free Software Foundation; either version 3 of the License, or
@@ -1120,6 +1122,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.8",
                .drsuapi_to_ldb         = dsdb_syntax_BOOL_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_BOOL_ldb_to_drsuapi,
+               .equality               = "booleanMatch",
+               .comment                = "Boolean" 
        },{
                .name                   = "Integer",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.27",
@@ -1127,6 +1131,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.9",
                .drsuapi_to_ldb         = dsdb_syntax_INT32_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_INT32_ldb_to_drsuapi,
+               .equality               = "integerMatch",
+               .comment                = "Integer"
        },{
                .name                   = "String(Octet)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
@@ -1134,6 +1140,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.10",
                .drsuapi_to_ldb         = dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
+               .equality               = "octetStringMatch",
+               .comment                =  "Octet String"
        },{
                .name                   = "String(Sid)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
@@ -1141,6 +1149,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.17",
                .drsuapi_to_ldb         = dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
+               .equality               = "octetStringMatch",
+               .comment                = "Octet String - Security Identifier (SID)" 
        },{
                .name                   = "String(Object-Identifier)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.38",
@@ -1148,6 +1158,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.2",
                .drsuapi_to_ldb         = dsdb_syntax_OID_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_OID_ldb_to_drsuapi,
+               .equality               = "caseIgnoreMatch", /* Would use "objectIdentifierMatch" but most are ldap attribute/class names */
+               .comment                = "OID String"
        },{
                .name                   = "Enumeration",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.27",
@@ -1163,6 +1175,9 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.6",
                .drsuapi_to_ldb         = dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
+               .equality               = "numericStringMatch",
+               .substring              = "numericStringSubstringsMatch",
+               .comment                = "Numeric String" 
        },{
                .name                   = "String(Printable)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.44",
@@ -1177,6 +1192,9 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.4",
                .drsuapi_to_ldb         = dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
+               .equality               = "caseIgnoreMatch",
+               .substring              = "caseIgnoreSubstringsMatch",
+               .comment                = "Case Insensitive String" 
        },{
                .name                   = "String(IA5)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.26",
@@ -1184,6 +1202,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.5",
                .drsuapi_to_ldb         = dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,
+               .equality               = "caseExactIA5Match",
+               .comment                = "Printable String"
        },{
                .name                   = "String(UTC-Time)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.53",
@@ -1191,6 +1211,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.11",
                .drsuapi_to_ldb         = dsdb_syntax_NTTIME_UTC_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_NTTIME_UTC_ldb_to_drsuapi,
+               .equality               = "generalizedTimeMatch",
+               .comment                = "UTC Time" 
        },{
                .name                   = "String(Generalized-Time)",
                .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.24",
@@ -1198,6 +1220,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.11",
                .drsuapi_to_ldb         = dsdb_syntax_NTTIME_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_NTTIME_ldb_to_drsuapi,
+               .equality               = "generalizedTimeMatch",
+               .comment                = "Generalized Time"
        },{
        /* not used in w2k3 schema */
                .name                   = "String(Case Sensitive)",
@@ -1213,6 +1237,9 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.12",
                .drsuapi_to_ldb         = dsdb_syntax_UNICODE_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_UNICODE_ldb_to_drsuapi,
+               .equality               = "caseIgnoreMatch",
+               .substring              = "caseIgnoreSubstringsMatch",
+               .comment                = "Directory String"
        },{
                .name                   = "Interval/LargeInteger",
                .ldap_oid               = "1.2.840.113556.1.4.906",
@@ -1220,6 +1247,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.16",
                .drsuapi_to_ldb         = dsdb_syntax_INT64_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_INT64_ldb_to_drsuapi,
+               .equality               = "integerMatch",
+               .comment                = "Large Integer" 
        },{
                .name                   = "String(NT-Sec-Desc)",
                .ldap_oid               = "1.2.840.113556.1.4.907",
@@ -1235,6 +1264,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.1",
                .drsuapi_to_ldb         = dsdb_syntax_DN_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DN_ldb_to_drsuapi,
+               .equality               = "distinguishedNameMatch",
+               .comment                = "Object(DS-DN) == a DN" 
        },{
                .name                   = "Object(DN-Binary)",
                .ldap_oid               = "1.2.840.113556.1.4.903",
@@ -1243,6 +1274,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.7",
                .drsuapi_to_ldb         = dsdb_syntax_DN_BINARY_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_DN_BINARY_ldb_to_drsuapi,
+               .equality               = "distinguishedNameMatch",
+               .comment                = "OctetString: Binary+DN" 
        },{
        /* not used in w2k3 schema */
                .name                   = "Object(OR-Name)",
@@ -1274,6 +1307,7 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.13",
                .drsuapi_to_ldb         = dsdb_syntax_PRESENTATION_ADDRESS_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_PRESENTATION_ADDRESS_ldb_to_drsuapi,
+               .comment                = "Presentation Address" 
        },{
        /* not used in w2k3 schema */
                .name                   = "Object(Access-Point)",
@@ -1283,6 +1317,8 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
                .attributeSyntax_oid    = "2.5.5.14",
                .drsuapi_to_ldb         = dsdb_syntax_FOOBAR_drsuapi_to_ldb,
                .ldb_to_drsuapi         = dsdb_syntax_FOOBAR_ldb_to_drsuapi,
+               .equality               = "distinguishedNameMatch",
+               .comment                = "OctetString: String+DN" 
        },{
        /* not used in w2k3 schema */
                .name                   = "Object(DN-String)",
@@ -1295,6 +1331,38 @@ static const struct dsdb_syntax dsdb_syntaxes[] = {
        }
 };
 
+const struct dsdb_syntax *find_syntax_map_by_ad_oid(const char *ad_oid) 
+{
+       int i;
+       for (i=0; dsdb_syntaxes[i].ldap_oid; i++) {
+               if (strcasecmp(ad_oid, dsdb_syntaxes[i].attributeSyntax_oid) == 0) {
+                       return &dsdb_syntaxes[i];
+               }
+       }
+       return NULL;
+}
+
+const struct dsdb_syntax *find_syntax_map_by_ad_syntax(int oMSyntax) 
+{
+       int i;
+       for (i=0; dsdb_syntaxes[i].ldap_oid; i++) {
+               if (oMSyntax == dsdb_syntaxes[i].oMSyntax) {
+                       return &dsdb_syntaxes[i];
+               }
+       }
+       return NULL;
+}
+
+const struct dsdb_syntax *find_syntax_map_by_standard_oid(const char *standard_oid) 
+{
+       int i;
+       for (i=0; dsdb_syntaxes[i].ldap_oid; i++) {
+               if (strcasecmp(standard_oid, dsdb_syntaxes[i].ldap_oid) == 0) {
+                       return &dsdb_syntaxes[i];
+               }
+       }
+       return NULL;
+}
 const struct dsdb_syntax *dsdb_syntax_for_attribute(const struct dsdb_attribute *attr)
 {
        uint32_t i;
index f5279616d17d3d020cb2f3ae35a2bc6024d89f49..7de2e67b5e20a0864b09129e0df05237a38b865b 100644 (file)
@@ -39,3 +39,6 @@ modifyTimeStamp:samba4ModifyTimestamp
 1.2.840.113556.1.4.903:1.3.6.1.4.1.1466.115.121.1.12
 #Treat Security Descriptors as binary
 1.2.840.113556.1.4.907:1.3.6.1.4.1.1466.115.121.1.40
+#Treat OIDs as case insensitive strings (as otherwise ldap class and
+#attribute names, declared at OIDs fail 
+1.3.6.1.4.1.1466.115.121.1.38:1.3.6.1.4.1.1466.115.121.1.44
index ea5b813e8a49bfb1be9b34b7c03f92ea3e815b3a..e229bd104b0a20168e531cf26d4a67f7809210c2 100644 (file)
@@ -229,7 +229,7 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum dsdb_sch
                const char *equality = NULL, *substring = NULL;
                bool single_value = attribute->isSingleValued;
 
-               const struct dsdb_syntax_map *map = find_syntax_map_by_ad_oid(syntax);
+               const struct dsdb_syntax *map = find_syntax_map_by_ad_syntax(attribute->oMSyntax);
                char *schema_entry = NULL;
                int j;
 
@@ -251,7 +251,7 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum dsdb_sch
                        /* We might have been asked to remap this oid,
                         * due to a conflict, or lack of
                         * implementation */
-                       syntax = map->Standard_OID;
+                       syntax = map->ldap_oid;
                        /* We might have been asked to remap this oid, due to a conflict */
                        for (j=0; syntax && oid_map && oid_map[j].old_oid; j++) {
                                if (strcasecmp(syntax, oid_map[j].old_oid) == 0) {
index d045b084b5896d6ba4c587f9461c137bdad336b7..6c4e6a9c80afd8f2a9f48ff2075fc090ead39a2f 100644 (file)
@@ -433,12 +433,12 @@ static struct ldb_message *process_entry(TALLOC_CTX *mem_ctx, const char *entry)
 
                case SCHEMA_SYNTAX:
                {
-                       const struct dsdb_syntax_map *map = 
+                       const struct dsdb_syntax *map = 
                                find_syntax_map_by_standard_oid(token->value);
                        if (!map) {
                                break;
                        }
-                       MSG_ADD_STRING("attributeSyntax", map->AD_OID);
+                       MSG_ADD_STRING("attributeSyntax", map->attributeSyntax_oid);
                        break;
                }
                case SCHEMA_DESC: