r20231: - add more oid => uint32 id mappings
authorStefan Metzmacher <metze@samba.org>
Sun, 17 Dec 2006 20:11:40 +0000 (20:11 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:29:26 +0000 (14:29 -0500)
- handle the case where mappings for 1.2.3.4. and 1.2.3.4.5. prefixes
  exist
- extend test suite for the mappings

metze
(This used to be commit 3af0a9b2c490ed1e4cd0af7faf814823bc60c264)

source4/dsdb/schema/schema_init.c
source4/torture/ldap/schema.c

index 9dc87e31a998e980e2bd3f5583b89e45d51c5325..05669f6171cd1585dec0164f5d30f7d7cf7cab74 100644 (file)
@@ -41,9 +41,13 @@ static const struct {
        _PREFIX(0x00150000, "0.9.2342.19200300.100.1."),
        _PREFIX(0x00160000, "2.16.840.1.113730.3.1."),
        _PREFIX(0x00170000, "1.2.840.113556.1.5.7000."),
+       _PREFIX(0x00180000, "2.5.21."),
+       _PREFIX(0x00190000, "2.5.18."),
        _PREFIX(0x001A0000, "2.5.20."),
+       _PREFIX(0x001B0000, "1.3.6.1.4.1.1466.101.119."),
        _PREFIX(0x001C0000, "2.16.840.1.113730.3.2."),
        _PREFIX(0x001D0000, "1.3.6.1.4.1.250.1."),
+       _PREFIX(0x001E0000, "1.2.840.113549.1.9."),
        _PREFIX(0x001F0000, "0.9.2342.19200300.100.4."),
 };
 
@@ -68,8 +72,19 @@ WERROR dsdb_map_oid2int(const char *in, uint32_t *out)
                        return WERR_INVALID_PARAM;
                }
 
+               /* two '.' chars are invalid */
+               if (val_str[0] == '.') {
+                       return WERR_INVALID_PARAM;
+               }
+
                val = strtoul(val_str, &end_str, 10);
-               if (end_str[0] != '\0') {
+               if (end_str[0] == '.' && end_str[1] != '\0') {
+                       /*
+                        * if it's a '.' and not the last char
+                        * then maybe an other mapping apply
+                        */
+                       continue;
+               } else if (end_str[0] != '\0') {
                        return WERR_INVALID_PARAM;
                } else if (val > 0xFFFF) {
                        return WERR_INVALID_PARAM;
index 60b27f6c7243f1bfe3bcbc1f09424e88e536fc46..207ca6f9a0a3c814896874b1a32756164b7212c5 100644 (file)
@@ -393,6 +393,24 @@ static BOOL test_dsdb_map(struct torture_context *torture)
                DEBUG(0,("0x%08X => %s\n", id, oid));
        }
 
+       oid = "1.2.840.113556.1.5.7000";
+       status = dsdb_map_oid2int(oid, &id);
+       if (!W_ERROR_IS_OK(status)) {
+               DEBUG(0,("%s => %s\n", oid, win_errstr(status)));
+               ret = False;
+       } else {
+               DEBUG(0,("%s => 0x%08X\n", oid, id));
+       }
+
+       oid = "1.2.840.113556.1.5.7000.5";
+       status = dsdb_map_oid2int(oid, &id);
+       if (!W_ERROR_IS_OK(status)) {
+               DEBUG(0,("%s => %s\n", oid, win_errstr(status)));
+               ret = False;
+       } else {
+               DEBUG(0,("%s => 0x%08X\n", oid, id));
+       }
+
        oid = "1.2.840.113556.1.4.1716.";
        status = dsdb_map_oid2int(oid, &id);
        if (!W_ERROR_EQUAL(status, WERR_INVALID_PARAM)) {
@@ -402,7 +420,25 @@ static BOOL test_dsdb_map(struct torture_context *torture)
                DEBUG(0,("%s => %s (ok!)\n", oid, win_errstr(status)));
        }
 
-       oid = "1.2.840.113556.1.4.1716.65536";
+       oid = "1.2.840.113556.1.4.65535.34";
+       status = dsdb_map_oid2int(oid, &id);
+       if (!W_ERROR_EQUAL(status, WERR_DS_NO_MSDS_INTID)) {
+               DEBUG(0,("%s => %s\n", oid, win_errstr(status)));
+               ret = False;
+       } else {
+               DEBUG(0,("%s => %s (ok!)\n", oid, win_errstr(status)));
+       }
+
+       oid = "1.2.840.113556.1.4..";
+       status = dsdb_map_oid2int(oid, &id);
+       if (!W_ERROR_EQUAL(status, WERR_INVALID_PARAM)) {
+               DEBUG(0,("%s => %s\n", oid, win_errstr(status)));
+               ret = False;
+       } else {
+               DEBUG(0,("%s => %s (ok!)\n", oid, win_errstr(status)));
+       }
+
+       oid = "1.2.840.113556.1.4.65536";
        status = dsdb_map_oid2int(oid, &id);
        if (!W_ERROR_EQUAL(status, WERR_INVALID_PARAM)) {
                DEBUG(0,("%s => %s\n", oid, win_errstr(status)));
@@ -411,7 +447,7 @@ static BOOL test_dsdb_map(struct torture_context *torture)
                DEBUG(0,("%s => %s (ok!)\n", oid, win_errstr(status)));
        }
 
-       oid = "5435.1.2.840.113556.1.4.1716.";
+       oid = "5435.1.2.840.113556.1.4.";
        status = dsdb_map_oid2int(oid, &id);
        if (!W_ERROR_EQUAL(status, WERR_DS_NO_MSDS_INTID)) {
                DEBUG(0,("%s => %s\n", oid, win_errstr(status)));