diff options
-rw-r--r-- | source4/dsdb/schema/schema_init.c | 17 | ||||
-rw-r--r-- | source4/torture/ldap/schema.c | 40 |
2 files changed, 54 insertions, 3 deletions
diff --git a/source4/dsdb/schema/schema_init.c b/source4/dsdb/schema/schema_init.c index 9dc87e31a9..05669f6171 100644 --- a/source4/dsdb/schema/schema_init.c +++ b/source4/dsdb/schema/schema_init.c @@ -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; diff --git a/source4/torture/ldap/schema.c b/source4/torture/ldap/schema.c index 60b27f6c72..207ca6f9a0 100644 --- a/source4/torture/ldap/schema.c +++ b/source4/torture/ldap/schema.c @@ -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))); |