r20405: add an array with attribute syntexes
authorStefan Metzmacher <metze@samba.org>
Fri, 29 Dec 2006 10:35:44 +0000 (10:35 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:30:24 +0000 (14:30 -0500)
metze
(This used to be commit 1a21eb700003db1d7853c9be330b2583db9bff03)

source4/dsdb/config.mk
source4/dsdb/schema/schema.h
source4/dsdb/schema/schema_syntax.c [new file with mode: 0644]

index c1beb4a67fe91dace9561890f6f01a300fa4ead7..dc7254b1e9650af8ce33e8d9f4848dea274fa0fd 100644 (file)
@@ -14,7 +14,8 @@ OBJ_FILES = \
                samdb/cracknames.o \
                common/sidmap.o \
                common/flag_mapping.o \
-               schema/schema_init.o
+               schema/schema_init.o \
+               schema/schema_syntax.o
 #
 # End SUBSYSTEM SAMDB
 ################################################
index 4911407a21dbe7a18083f1739dec00994a5e0e07..051f531a5225632d1cb1a646b42f5edc98de189e 100644 (file)
 #ifndef _DSDB_SCHEMA_H
 #define _DSDB_SCHEMA_H
 
+struct dsdb_syntax {
+       const char *name;
+       const char *ldap_oid;
+       uint32_t oMSyntax;
+       struct ldb_val oMObjectClass;
+       const char *attributeSyntax_oid;
+};
+
 struct dsdb_attribute {
        struct dsdb_attribute *prev, *next;
 
@@ -60,6 +68,9 @@ struct dsdb_attribute {
        BOOL isEphemeral;
        BOOL isDefunct;
        BOOL systemOnly;
+
+       /* internal stuff */
+       const struct dsdb_syntax *syntax;
 };
 
 struct dsdb_class {
diff --git a/source4/dsdb/schema/schema_syntax.c b/source4/dsdb/schema/schema_syntax.c
new file mode 100644 (file)
index 0000000..c14c018
--- /dev/null
@@ -0,0 +1,181 @@
+/* 
+   Unix SMB/CIFS mplementation.
+   DSDB schema syntaxes
+   
+   Copyright (C) Stefan Metzmacher 2006
+    
+   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 2 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, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   
+*/
+#include "includes.h"
+#include "dsdb/samdb/samdb.h"
+
+static const struct dsdb_syntax dsdb_syntaxes[] = {
+       {
+               .name                   = "Boolean",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.7",
+               .oMSyntax               = 1,
+               .attributeSyntax_oid    = "2.5.5.8",
+       },{
+               .name                   = "Integer",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.27",
+               .oMSyntax               = 2,
+               .attributeSyntax_oid    = "2.5.5.9",
+       },{
+               .name                   = "String(Octet)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
+               .oMSyntax               = 4,
+               .attributeSyntax_oid    = "2.5.5.10",
+       },{
+               .name                   = "String(Sid)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
+               .oMSyntax               = 4,
+               .attributeSyntax_oid    = "2.5.5.17",
+       },{
+               .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",
+       },{
+               .name                   = "Enumeration",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.27",
+               .oMSyntax               = 10,
+               .attributeSyntax_oid    = "2.5.5.9",
+       },{
+               .name                   = "String(Numeric)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.36",
+               .oMSyntax               = 18,
+               .attributeSyntax_oid    = "2.5.5.6",
+       },{
+               .name                   = "String(Printable)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.44",
+               .oMSyntax               = 19,
+               .attributeSyntax_oid    = "2.5.5.5",
+       },{
+               .name                   = "String(Teletex)",
+               .ldap_oid               = "1.2.840.113556.1.4.905",
+               .oMSyntax               = 20,
+               .attributeSyntax_oid    = "2.5.5.4",
+       },{
+               .name                   = "String(IA5)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.26",
+               .oMSyntax               = 22,
+               .attributeSyntax_oid    = "2.5.5.5",
+       },{
+               .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",
+       },{
+               .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",
+       },{
+               .name                   = "String(Case Sensitive)",
+               .ldap_oid               = "1.2.840.113556.1.4.1362",
+               .oMSyntax               = 27,
+               .attributeSyntax_oid    = "2.5.5.3",
+       },{
+               .name                   = "String(Unicode)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.15",
+               .oMSyntax               = 64,
+               .attributeSyntax_oid    = "2.5.5.12",
+       },{
+               .name                   = "Interval/LargeInteger",
+               .ldap_oid               = "1.2.840.113556.1.4.906",
+               .oMSyntax               = 65,
+               .attributeSyntax_oid    = "2.5.5.16",
+       },{
+               .name                   = "String(NT-Sec-Desc)",
+               .ldap_oid               = "1.2.840.113556.1.4.907",
+               .oMSyntax               = 66,
+               .attributeSyntax_oid    = "2.5.5.15",
+       },{
+               .name                   = "Object(DS-DN)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.12",
+               .oMSyntax               = 127,
+               .oMObjectClass.length   = 10,
+               .oMObjectClass.data     = discard_const_p(uint8_t, "\x2b\x0c\x02\x87\x73\x1c\x00\x85\x4a\x00"),
+               .attributeSyntax_oid    = "2.5.5.1",
+       },{
+               .name                   = "Object(DN-Binary)",
+               .ldap_oid               = "1.2.840.113556.1.4.903",
+               .oMSyntax               = 127,
+               .oMObjectClass.length   = 10,
+               .oMObjectClass.data     = discard_const_p(uint8_t, "\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x0b)"),
+               .attributeSyntax_oid    = "2.5.5.7",
+       },{
+               .name                   = "Object(OR-Name)",
+               .ldap_oid               = "1.2.840.113556.1.4.1221",
+               .oMSyntax               = 127,
+               .oMObjectClass.length   = 10,
+               .oMObjectClass.data     = discard_const_p(uint8_t, "\x56\x06\x01\x02\x05\x0b\x1D\x00\x00\x00"),
+               .attributeSyntax_oid    = "2.5.5.7",
+       },{
+               .name                   = "Object(Replica-Link)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.40",
+               .oMSyntax               = 127,
+               .oMObjectClass.length   = 10,
+               .oMObjectClass.data     = discard_const_p(uint8_t, "\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x06"),
+               .attributeSyntax_oid    = "2.5.5.10",
+       },{
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.43",
+               .oMSyntax               = 127,
+               .oMObjectClass.length   = 10,
+               .oMObjectClass.data     = discard_const_p(uint8_t, "\x2b\x0c\x02\x87\x73\x1c\x00\x85\x5c\x00"),
+               .attributeSyntax_oid    = "2.5.5.13",
+               .name                   = "Object(Presentation-Address)",
+       },{
+               .name                   = "Object(Access-Point)",
+               .ldap_oid               = "1.3.6.1.4.1.1466.115.121.1.2",
+               .oMSyntax               = 127,
+               .oMObjectClass.length   = 10,
+               .oMObjectClass.data     = discard_const_p(uint8_t, "\x2b\x0c\x02\x87\x73\x1c\x00\x85\x3e\x00"),
+               .attributeSyntax_oid    = "2.5.5.14",
+       },{
+               .name                   = "Object(DN-String)",
+               .ldap_oid               = "1.2.840.113556.1.4.904",
+               .oMSyntax               = 127,
+               .oMObjectClass.length   = 10,
+               .oMObjectClass.data     = discard_const_p(uint8_t, "\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x0c"),
+               .attributeSyntax_oid    = "2.5.5.14",
+       }
+};
+
+const struct dsdb_syntax *dsdb_syntax_for_attribute(const struct dsdb_attribute *attr)
+{
+       uint32_t i;
+
+       for (i=0; i < ARRAY_SIZE(dsdb_syntaxes); i++) {
+               if (attr->oMSyntax != dsdb_syntaxes[i].oMSyntax) continue;
+
+               if (attr->oMObjectClass.length != dsdb_syntaxes[i].oMObjectClass.length) continue;
+
+               if (attr->oMObjectClass.length) {
+                       int ret;
+                       ret = memcmp(attr->oMObjectClass.data,
+                                    dsdb_syntaxes[i].oMObjectClass.data,
+                                    attr->oMObjectClass.length);
+                       if (ret != 0) continue;
+               }
+
+               if (strcmp(attr->attributeSyntax_oid, dsdb_syntaxes[i].attributeSyntax_oid) != 0) continue;
+
+               return &dsdb_syntaxes[i];
+       }
+
+       return NULL;
+}