summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/dsdb/schema/schema_init.c17
-rw-r--r--source4/torture/ldap/schema.c40
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)));