[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Fri Nov 6 06:07:28 MST 2009
The branch, master has been updated
via 0f531e3... s4/drs: Refactor to be more SAMBA.Coding style compliant
via c236bb5... s4/drs: Remove unused structures and functions
via db82023... s4/drs: remove unused num_prefixes and prefixes from dsdb_schema
via 2fa4c4d... s4/drs(tort): _torture_drs_pfm_compare_same() should not fail tctx by itself
via ef959b4... s4/drs(tort): Test case for dsdb_create_prefix_mapping() implemented
via b9dd44e... s4/drs: dsdb_create_prefix_mapping() refactored
via 9405377... s4/drs: prefixMap lookup by full_OID implementation
via 009361e... s4/drs(tort): refactor - SCHEMA_INFO_DEFAULT defined on file scope
via 1aae751... s4/drs: dsdb_write_prefixes_from_schema_to_ldb() refactored
via 82539b7... s4/drs: dsdb_read_prefixes_from_ldb() refactored
via b50df3b... s4/drs(tort): prefixMap read/write in LDB test case
via 6a32200... s4/drs(tort): Create temporary LDB for testing purposes
via 9da3343... s4/drs: refactor dsdb_load_oid_mappings_ldb() to use _dsdb_prefixmap_from_ldb_val()
via 5381d8d... s4/drs: Load prefixMap from ldb_val moved in separate function
via 20622de... s4/drs(tort): prefixMap to/from ldb_val serialization test case
via fc05386... s4/drs: dsdb_schema_pfm_from_drsuapi_pfm() to accept partial drsuapi_prefixMap
via ba4d87f... s4/drs: dsdb_map_int2oid() replaced by dsdb_schema_pfm_oid_from_attid()
via 01302b8... s4/drs: dsdb_map_oid2int() replaced by dsdb_schema_pfm_make_attid()
via ddab9d1... s4/drs: dsdb_verify_oid_mappings_drsuapi() replaced by dsdb_schema_pfm_contains_drsuapi_pfm()
via 28b6eb9... s4/drs: dsdb_get_oid_mappings_drsuapi() to use new prefixMap interface
via a833853... s4/drs: dsdb_load_oid_mappings_drsuapi() -> dsdb_load_prefixmap_from_drsuapi()
via 3729272... s4/drs: dsdb_schema uses dsdb_schema_prefixmap definition
via 3abe0ad... s4: DRS-RPC tests added to RPC group of tests
via 7a51b3a... s4: Add DRS-UNIT test suite to LOCAL group of tests to be executed
via b54ec12... s4/drs: Move schema_prefixMap allocation in separate function
via 6210237... s4/drs: schema_prefixMap to/from drsuapi_prefixMap conversion implementation
via 5446123... s4/drs(tort): test for schema_prefixMap to/from drsuapi_prefixMap conversion
via 3d91c8e... s4/drs(tort): implement prefixMap comparison function
via 3fe4310... s4/drs: Implement binary-oid-lookup into prefixMap
via f447536... s4/drs: Move making of partial-binary-oid to a separate function
via 39ab7b8... s4/drs: Fix memory leek in prefixMap
via 716eb62... s4/ldb: Fix double allocation for "ldb_url"
via be06d5c... s4:torture/drs: move intern/ => unit/
from 440db5a... Revert "s3-kerberos: add smb_krb5_parse_name_flags()."
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 0f531e3a2a94594ad5a68bbf8bae85555b8f644e
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Thu Oct 29 18:18:54 2009 +0200
s4/drs: Refactor to be more SAMBA.Coding style compliant
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit c236bb537f1ee8c287c9dbbbc1cbe47fabbeb688
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Thu Oct 29 16:28:38 2009 +0200
s4/drs: Remove unused structures and functions
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit db82023af24ef89afe1559422ac5899646afff32
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Thu Oct 29 16:24:00 2009 +0200
s4/drs: remove unused num_prefixes and prefixes from dsdb_schema
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 2fa4c4dceec67a85c40f37c992f5a603aada47c0
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Thu Oct 29 03:56:50 2009 +0200
s4/drs(tort): _torture_drs_pfm_compare_same() should not fail tctx by itself
The responsibility for failing torture_context sould be for the
caller.
This gives better control in for test case driver function.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit ef959b42cac81ba372fac25e4da797aec02747bc
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Thu Oct 29 03:17:33 2009 +0200
s4/drs(tort): Test case for dsdb_create_prefix_mapping() implemented
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit b9dd44ee3971a9dea5d6221938e41e18cdf03443
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Thu Oct 29 03:54:12 2009 +0200
s4/drs: dsdb_create_prefix_mapping() refactored
TODO: this function may be refactored further.
Actually we don't need to look up for the OID supplied,
but just call sdb_schema_pfm_make_attid() - it will
search for the OID anyway and add it if necessary
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 9405377a7027ea1d8ea98942efeb69de672d38e4
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Thu Oct 29 03:16:30 2009 +0200
s4/drs: prefixMap lookup by full_OID implementation
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 009361e1ffc6bd51205985153e441001c650fc1a
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Wed Oct 28 18:33:13 2009 +0200
s4/drs(tort): refactor - SCHEMA_INFO_DEFAULT defined on file scope
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 1aae751a68ea352f81e00d5c54023c844cd373cd
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Tue Oct 27 18:35:29 2009 +0200
s4/drs: dsdb_write_prefixes_from_schema_to_ldb() refactored
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 82539b7d6615c2ac671a0a347d86a6850a238b28
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Tue Oct 27 18:06:58 2009 +0200
s4/drs: dsdb_read_prefixes_from_ldb() refactored
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit b50df3bd7ff8823839d261e5b5985163b3f953af
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Tue Oct 27 18:03:47 2009 +0200
s4/drs(tort): prefixMap read/write in LDB test case
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 6a322006671d929db77f99401634aa9aefa264dd
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Tue Oct 27 16:27:28 2009 +0200
s4/drs(tort): Create temporary LDB for testing purposes
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 9da33436e4de8c092905b3a98584c480592bddc6
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Tue Oct 27 00:16:02 2009 +0200
s4/drs: refactor dsdb_load_oid_mappings_ldb() to use _dsdb_prefixmap_from_ldb_val()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 5381d8d157e90ae0e6058a19c2486377221ef3f6
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Mon Oct 26 23:50:50 2009 +0200
s4/drs: Load prefixMap from ldb_val moved in separate function
It is to be used later in several places when we need such conversion.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 20622de49f8a876ef91db329348d0827126f11c2
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Mon Oct 26 21:04:28 2009 +0200
s4/drs(tort): prefixMap to/from ldb_val serialization test case
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit fc05386c0d9bf2cf39223e05d3a633a8559c5973
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Tue Nov 3 07:49:36 2009 +0100
s4/drs: dsdb_schema_pfm_from_drsuapi_pfm() to accept partial drsuapi_prefixMap
"partial drsuapi_prefixMap" is a prefix map without last entry
being special - i.e. map that does not contains schema_info entry.
Test for dsdb_schema_pfm_from_drsuapi_pfm() were also extended to
cover both 'full' and 'partial' map conversion.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit ba4d87f81790d5773c033a79ea0b9cd37debd19d
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Mon Oct 26 03:47:41 2009 +0200
s4/drs: dsdb_map_int2oid() replaced by dsdb_schema_pfm_oid_from_attid()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 01302b8202cadcacf245b9f68ca765f03bf38a0b
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Mon Oct 26 03:35:29 2009 +0200
s4/drs: dsdb_map_oid2int() replaced by dsdb_schema_pfm_make_attid()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit ddab9d1fe74c90b2b05cd1712931930e82380913
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Mon Oct 26 03:06:16 2009 +0200
s4/drs: dsdb_verify_oid_mappings_drsuapi() replaced by dsdb_schema_pfm_contains_drsuapi_pfm()
dsdb_schema_pfm_contains_drsuapi_pfm() is part of reimplemented
prefixMap interface.
This name was choosen to clearly show, that this a week verification
in case we want to determine if remote schema is changed.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 28b6eb94944e5bca0fff4aeef181e61926df3568
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Mon Oct 26 02:41:46 2009 +0200
s4/drs: dsdb_get_oid_mappings_drsuapi() to use new prefixMap interface
dsdb_get_oid_mappings_drsuapi() just need to call
dsdb_drsuapi_pfm_from_schema_pfm() to get filled-in DRSUAPI
prefixMap.
Perhaps it won't be bad to rename this function to have
more expressive name in the future
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit a83385303b3d0cae61d3ace412f58ca49a01f9dc
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Tue Nov 3 09:05:51 2009 +0100
s4/drs: dsdb_load_oid_mappings_drsuapi() -> dsdb_load_prefixmap_from_drsuapi()
Also, dsdb_load_oid_mappings_drsuapi() was reimplemented to use
dsdb_schema_pfm_from_drsuapi_pfm() function to load
drsuapi_prefixMap into schema->prefixmap
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 3729272f0a43889b5cf2af4157219dc3962e393b
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Mon Oct 26 00:31:28 2009 +0200
s4/drs: dsdb_schema uses dsdb_schema_prefixmap definition
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 3abe0ad7de11f22c7f4f3ddd8b6ffe8c06b9264f
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sun Oct 25 22:43:04 2009 +0200
s4: DRS-RPC tests added to RPC group of tests
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 7a51b3adc2d1b69eb3f461959cadd392857d51d6
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sun Oct 25 22:07:18 2009 +0200
s4: Add DRS-UNIT test suite to LOCAL group of tests to be executed
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit b54ec122b2f75fe74356ee73c18e3a76e28c7294
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sun Oct 25 20:57:18 2009 +0200
s4/drs: Move schema_prefixMap allocation in separate function
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 6210237b5aebce71e210dbe39cdf71593e6c03af
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sun Oct 25 20:34:17 2009 +0200
s4/drs: schema_prefixMap to/from drsuapi_prefixMap conversion implementation
Along with this, dsdb_schema_pfm_contains_drsuapi_pfm()
function is implemented to replace previous implementation
for dsdb_verify_oid_mappings_drsuapi().
Name of the function clearly implies how week this verification is,
as currently it is used to indicate "Schema modified on remote"
condition.
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 5446123190a6db8a563289e902ed375771e29942
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sun Oct 25 20:31:39 2009 +0200
s4/drs(tort): test for schema_prefixMap to/from drsuapi_prefixMap conversion
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 3d91c8ef5a115171f96d33606879ab7d871f3e3d
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sat Oct 24 03:01:01 2009 +0300
s4/drs(tort): implement prefixMap comparison function
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 3fe4310df73cf2a314982fe62793ea33d44c5499
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sat Oct 24 00:48:55 2009 +0300
s4/drs: Implement binary-oid-lookup into prefixMap
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit f4475368f07f2de07f3f9d7c68de027dfb8e7284
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sat Oct 24 00:48:14 2009 +0300
s4/drs: Move making of partial-binary-oid to a separate function
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 39ab7b8ebdefd13fb586d65da76173c0a3fa5fa5
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sat Oct 24 00:02:24 2009 +0300
s4/drs: Fix memory leek in prefixMap
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 716eb62b5dab37c203b306047b65280ddf34844a
Author: Kamen Mazdrashki <kamen.mazdrashki at postpath.com>
Date: Sat Oct 24 00:02:02 2009 +0300
s4/ldb: Fix double allocation for "ldb_url"
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit be06d5ccb4120190571dd5eb91a6dcaae7e27561
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Nov 4 11:12:17 2009 +0100
s4:torture/drs: move intern/ => unit/
metze
-----------------------------------------------------------------------
Summary of changes:
source4/dsdb/repl/replicated_objects.c | 2 +-
source4/dsdb/samdb/ldb_modules/rootdse.c | 2 +-
source4/dsdb/samdb/ldb_modules/schema_data.c | 4 +-
source4/dsdb/schema/schema.h | 9 +-
source4/dsdb/schema/schema_init.c | 579 +++++-------------
source4/dsdb/schema/schema_prefixmap.c | 418 ++++++++++++--
source4/dsdb/schema/schema_syntax.c | 20 +-
source4/lib/ldb/common/ldb.c | 4 +-
source4/libnet/libnet_vampire.c | 7 +-
source4/selftest/tests.sh | 7 +-
source4/torture/drs/config.mk | 2 +-
source4/torture/drs/internal/prefixmap_tests.c | 400 -------------
source4/torture/drs/unit/prefixmap_tests.c | 746 ++++++++++++++++++++++++
source4/torture/libnet/libnet_BecomeDC.c | 7 +-
14 files changed, 1310 insertions(+), 897 deletions(-)
delete mode 100644 source4/torture/drs/internal/prefixmap_tests.c
create mode 100644 source4/torture/drs/unit/prefixmap_tests.c
Changeset truncated at 500 lines:
diff --git a/source4/dsdb/repl/replicated_objects.c b/source4/dsdb/repl/replicated_objects.c
index ec5dcd4..47291b6 100644
--- a/source4/dsdb/repl/replicated_objects.c
+++ b/source4/dsdb/repl/replicated_objects.c
@@ -229,7 +229,7 @@ WERROR dsdb_extended_replicated_objects_commit(struct ldb_context *ldb,
return WERR_DS_SCHEMA_NOT_LOADED;
}
- status = dsdb_verify_oid_mappings_drsuapi(schema, mapping_ctr);
+ status = dsdb_schema_pfm_contains_drsuapi_pfm(schema->prefixmap, mapping_ctr);
W_ERROR_NOT_OK_RETURN(status);
out = talloc_zero(mem_ctx, struct dsdb_extended_replicated_objects);
diff --git a/source4/dsdb/samdb/ldb_modules/rootdse.c b/source4/dsdb/samdb/ldb_modules/rootdse.c
index 5af951a..661060d 100644
--- a/source4/dsdb/samdb/ldb_modules/rootdse.c
+++ b/source4/dsdb/samdb/ldb_modules/rootdse.c
@@ -273,7 +273,7 @@ static int rootdse_add_dynamic(struct ldb_module *module, struct ldb_message *ms
if (schema && do_attribute_explicit(attrs, "dsSchemaPrefixCount")) {
if (ldb_msg_add_fmt(msg, "dsSchemaPrefixCount",
- "%u", schema->num_prefixes) != 0) {
+ "%u", schema->prefixmap->length) != 0) {
goto failed;
}
}
diff --git a/source4/dsdb/samdb/ldb_modules/schema_data.c b/source4/dsdb/samdb/ldb_modules/schema_data.c
index bf80c01..9951bd6 100644
--- a/source4/dsdb/samdb/ldb_modules/schema_data.c
+++ b/source4/dsdb/samdb/ldb_modules/schema_data.c
@@ -140,7 +140,7 @@ static int schema_data_add(struct ldb_module *module, struct ldb_request *req)
const struct ldb_val *governsID = NULL;
const char *oid_attr = NULL;
const char *oid = NULL;
- uint32_t id32;
+ uint32_t attid;
WERROR status;
ldb = ldb_module_get_ctx(module);
@@ -184,7 +184,7 @@ static int schema_data_add(struct ldb_module *module, struct ldb_request *req)
return LDB_ERR_OPERATIONS_ERROR;
}
- status = dsdb_map_oid2int(schema, oid, &id32);
+ status = dsdb_schema_pfm_make_attid(schema->prefixmap, oid, &attid);
if (W_ERROR_IS_OK(status)) {
return ldb_next_request(module, req);
} else if (!W_ERROR_EQUAL(WERR_DS_NO_MSDS_INTID, status)) {
diff --git a/source4/dsdb/schema/schema.h b/source4/dsdb/schema/schema.h
index 175e999..033dc6e 100644
--- a/source4/dsdb/schema/schema.h
+++ b/source4/dsdb/schema/schema.h
@@ -158,15 +158,10 @@ struct dsdb_class {
uint32_t subClass_order;
};
-struct dsdb_schema_oid_prefix {
- uint32_t id;
- const char *oid;
- size_t oid_len;
-};
struct dsdb_schema {
- uint32_t num_prefixes;
- struct dsdb_schema_oid_prefix *prefixes;
+
+ struct dsdb_schema_prefixmap *prefixmap;
/*
* the last element of the prefix mapping table isn't a oid,
diff --git a/source4/dsdb/schema/schema_init.c b/source4/dsdb/schema/schema_init.c
index f8b7d5d..de370e0 100644
--- a/source4/dsdb/schema/schema_init.c
+++ b/source4/dsdb/schema/schema_init.c
@@ -31,7 +31,6 @@
#include "lib/ldb/include/ldb_module.h"
#include "../lib/util/asn1.h"
-static WERROR dsdb_read_prefixes_from_ldb(TALLOC_CTX *mem_ctx, struct ldb_context *ldb, uint32_t* num_prefixes, struct dsdb_schema_oid_prefix **prefixes);
struct dsdb_schema *dsdb_new_schema(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience)
{
@@ -45,158 +44,119 @@ struct dsdb_schema *dsdb_new_schema(TALLOC_CTX *mem_ctx, struct smb_iconv_conven
}
-WERROR dsdb_load_oid_mappings_drsuapi(struct dsdb_schema *schema, const struct drsuapi_DsReplicaOIDMapping_Ctr *ctr)
+WERROR dsdb_load_prefixmap_from_drsuapi(struct dsdb_schema *schema,
+ const struct drsuapi_DsReplicaOIDMapping_Ctr *ctr)
{
- uint32_t i,j;
+ WERROR werr;
+ const char *schema_info;
+ struct dsdb_schema_prefixmap *pfm;
- schema->prefixes = talloc_array(schema, struct dsdb_schema_oid_prefix, ctr->num_mappings);
- W_ERROR_HAVE_NO_MEMORY(schema->prefixes);
+ werr = dsdb_schema_pfm_from_drsuapi_pfm(ctr, true, schema, &pfm, &schema_info);
+ W_ERROR_NOT_OK_RETURN(werr);
- for (i=0, j=0; i < ctr->num_mappings; i++) {
- if (ctr->mappings[i].oid.binary_oid == NULL) {
- return WERR_INVALID_PARAM;
- }
+ /* set loaded prefixMap */
+ talloc_free(schema->prefixmap);
+ schema->prefixmap = pfm;
- if (ctr->mappings[i].oid.binary_oid[0] == 0xFF) {
- if (ctr->mappings[i].id_prefix != 0) {
- return WERR_INVALID_PARAM;
- }
-
- /* the magic value should be in the last array member */
- if (i != (ctr->num_mappings - 1)) {
- return WERR_INVALID_PARAM;
- }
-
- if (ctr->mappings[i].oid.length != 21) {
- return WERR_INVALID_PARAM;
- }
-
- schema->schema_info = hex_encode_talloc(schema,
- ctr->mappings[i].oid.binary_oid,
- ctr->mappings[i].oid.length);
- W_ERROR_HAVE_NO_MEMORY(schema->schema_info);
- } else {
- DATA_BLOB oid_blob;
- const char *partial_oid = NULL;
-
- /* the last array member should contain the magic value not a oid */
- if (i == (ctr->num_mappings - 1)) {
- return WERR_INVALID_PARAM;
- }
-
- oid_blob = data_blob_const(ctr->mappings[i].oid.binary_oid,
- ctr->mappings[i].oid.length);
- if (!ber_read_partial_OID_String(schema->prefixes, oid_blob, &partial_oid)) {
- DEBUG(0, ("ber_read_partial_OID failed on prefixMap item with id: 0x%X",
- ctr->mappings[i].id_prefix));
- return WERR_INVALID_PARAM;
- }
-
- schema->prefixes[j].id = ctr->mappings[i].id_prefix<<16;
- schema->prefixes[j].oid = partial_oid;
- W_ERROR_HAVE_NO_MEMORY(schema->prefixes[j].oid);
- schema->prefixes[j].oid_len = strlen(schema->prefixes[j].oid);
- j++;
- }
- }
+ talloc_free(discard_const(schema->schema_info));
+ schema->schema_info = schema_info;
- schema->num_prefixes = j;
return WERR_OK;
}
-WERROR dsdb_load_oid_mappings_ldb(struct dsdb_schema *schema,
- const struct ldb_val *prefixMap,
- const struct ldb_val *schemaInfo)
+static WERROR _dsdb_prefixmap_from_ldb_val(const struct ldb_val *pfm_ldb_val,
+ struct smb_iconv_convenience *iconv_convenience,
+ TALLOC_CTX *mem_ctx,
+ struct dsdb_schema_prefixmap **_pfm)
{
- WERROR status;
+ WERROR werr;
enum ndr_err_code ndr_err;
- struct prefixMapBlob pfm;
- DATA_BLOB schema_info_blob;
+ struct prefixMapBlob pfm_blob;
- TALLOC_CTX *mem_ctx = talloc_new(schema);
- W_ERROR_HAVE_NO_MEMORY(mem_ctx);
-
- ndr_err = ndr_pull_struct_blob(prefixMap, mem_ctx, schema->iconv_convenience, &pfm, (ndr_pull_flags_fn_t)ndr_pull_prefixMapBlob);
+ TALLOC_CTX *temp_ctx = talloc_new(mem_ctx);
+ W_ERROR_HAVE_NO_MEMORY(temp_ctx);
+
+ ndr_err = ndr_pull_struct_blob(pfm_ldb_val, temp_ctx,
+ iconv_convenience, &pfm_blob,
+ (ndr_pull_flags_fn_t)ndr_pull_prefixMapBlob);
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
NTSTATUS nt_status = ndr_map_error2ntstatus(ndr_err);
- talloc_free(mem_ctx);
+ talloc_free(temp_ctx);
return ntstatus_to_werror(nt_status);
}
- if (pfm.version != PREFIX_MAP_VERSION_DSDB) {
- talloc_free(mem_ctx);
- return WERR_FOOBAR;
- }
-
- if (schemaInfo->length != 21 && schemaInfo->data[0] == 0xFF) {
- talloc_free(mem_ctx);
- return WERR_FOOBAR;
+ if (pfm_blob.version != PREFIX_MAP_VERSION_DSDB) {
+ DEBUG(0,("_dsdb_prefixmap_from_ldb_val: pfm_blob->version incorrect\n"));
+ talloc_free(temp_ctx);
+ return WERR_VERSION_PARSE_ERROR;
}
- /* append the schema info as last element */
- pfm.ctr.dsdb.num_mappings++;
- pfm.ctr.dsdb.mappings = talloc_realloc(mem_ctx, pfm.ctr.dsdb.mappings,
- struct drsuapi_DsReplicaOIDMapping,
- pfm.ctr.dsdb.num_mappings);
- W_ERROR_HAVE_NO_MEMORY(pfm.ctr.dsdb.mappings);
-
- schema_info_blob = data_blob_dup_talloc(pfm.ctr.dsdb.mappings, schemaInfo);
- W_ERROR_HAVE_NO_MEMORY(schema_info_blob.data);
-
- pfm.ctr.dsdb.mappings[pfm.ctr.dsdb.num_mappings - 1].id_prefix = 0;
- pfm.ctr.dsdb.mappings[pfm.ctr.dsdb.num_mappings - 1].oid.length = schemaInfo->length;
- pfm.ctr.dsdb.mappings[pfm.ctr.dsdb.num_mappings - 1].oid.binary_oid = schema_info_blob.data;
-
/* call the drsuapi version */
- status = dsdb_load_oid_mappings_drsuapi(schema, &pfm.ctr.dsdb);
- talloc_free(mem_ctx);
+ werr = dsdb_schema_pfm_from_drsuapi_pfm(&pfm_blob.ctr.dsdb, false, mem_ctx, _pfm, NULL);
- W_ERROR_NOT_OK_RETURN(status);
+ talloc_free(temp_ctx);
- return WERR_OK;
+ return werr;
}
-WERROR dsdb_get_oid_mappings_drsuapi(const struct dsdb_schema *schema,
- bool include_schema_info,
- TALLOC_CTX *mem_ctx,
- struct drsuapi_DsReplicaOIDMapping_Ctr **_ctr)
+WERROR dsdb_load_oid_mappings_ldb(struct dsdb_schema *schema,
+ const struct ldb_val *prefixMap,
+ const struct ldb_val *schemaInfo)
{
- DATA_BLOB oid_blob;
- struct drsuapi_DsReplicaOIDMapping_Ctr *ctr;
- uint32_t i;
+ WERROR status;
+ const char *schema_info;
+ struct dsdb_schema_prefixmap *pfm;
+ TALLOC_CTX *mem_ctx;
- ctr = talloc(mem_ctx, struct drsuapi_DsReplicaOIDMapping_Ctr);
- W_ERROR_HAVE_NO_MEMORY(ctr);
+ /* verify input params */
+ if (schemaInfo->length != 21) {
+ return WERR_INVALID_PARAMETER;
+ }
+ if (schemaInfo->data[0] != 0xFF) {
+ return WERR_INVALID_PARAMETER;
+ }
- ctr->num_mappings = schema->num_prefixes;
- if (include_schema_info) ctr->num_mappings++;
- ctr->mappings = talloc_array(schema, struct drsuapi_DsReplicaOIDMapping, ctr->num_mappings);
- W_ERROR_HAVE_NO_MEMORY(ctr->mappings);
+ mem_ctx = talloc_new(schema);
+ W_ERROR_HAVE_NO_MEMORY(mem_ctx);
- for (i=0; i < schema->num_prefixes; i++) {
- if (!ber_write_partial_OID_String(ctr->mappings, &oid_blob, schema->prefixes[i].oid)) {
- DEBUG(0, ("write_partial_OID failed for %s", schema->prefixes[i].oid));
- return WERR_INTERNAL_ERROR;
- }
+ /* fetch prefixMap */
+ status = _dsdb_prefixmap_from_ldb_val(prefixMap,
+ schema->iconv_convenience,
+ mem_ctx, &pfm);
+ W_ERROR_NOT_OK_RETURN(status);
- ctr->mappings[i].id_prefix = schema->prefixes[i].id>>16;
- ctr->mappings[i].oid.length = oid_blob.length;
- ctr->mappings[i].oid.binary_oid = oid_blob.data;
+ /* decode schema_info */
+ schema_info = hex_encode_talloc(mem_ctx,
+ schemaInfo->data,
+ schemaInfo->length);
+ if (!schema_info) {
+ talloc_free(mem_ctx);
+ return WERR_NOMEM;
}
- if (include_schema_info) {
- oid_blob = strhex_to_data_blob(ctr->mappings, schema->schema_info);
- W_ERROR_HAVE_NO_MEMORY(oid_blob.data);
+ /* store prefixMap and schema_info into cached Schema */
+ talloc_free(schema->prefixmap);
+ schema->prefixmap = talloc_steal(schema, pfm);
- ctr->mappings[i].id_prefix = 0;
- ctr->mappings[i].oid.length = oid_blob.length;
- ctr->mappings[i].oid.binary_oid = oid_blob.data;
- }
+ talloc_free(discard_const(schema->schema_info));
+ schema->schema_info = talloc_steal(schema, schema_info);
+
+ /* clean up locally allocated mem */
+ talloc_free(mem_ctx);
- *_ctr = ctr;
return WERR_OK;
}
+WERROR dsdb_get_oid_mappings_drsuapi(const struct dsdb_schema *schema,
+ bool include_schema_info,
+ TALLOC_CTX *mem_ctx,
+ struct drsuapi_DsReplicaOIDMapping_Ctr **_ctr)
+{
+ return dsdb_drsuapi_pfm_from_schema_pfm(schema->prefixmap,
+ include_schema_info ? schema->schema_info : NULL,
+ mem_ctx, _ctr);
+}
+
WERROR dsdb_get_oid_mappings_ldb(const struct dsdb_schema *schema,
TALLOC_CTX *mem_ctx,
struct ldb_val *prefixMap,
@@ -214,7 +174,8 @@ WERROR dsdb_get_oid_mappings_ldb(const struct dsdb_schema *schema,
pfm.reserved = 0;
pfm.ctr.dsdb = *ctr;
- ndr_err = ndr_push_struct_blob(prefixMap, mem_ctx, schema->iconv_convenience, &pfm, (ndr_push_flags_fn_t)ndr_push_prefixMapBlob);
+ ndr_err = ndr_push_struct_blob(prefixMap, mem_ctx, schema->iconv_convenience, &pfm,
+ (ndr_push_flags_fn_t)ndr_push_prefixMapBlob);
talloc_free(ctr);
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
NTSTATUS nt_status = ndr_map_error2ntstatus(ndr_err);
@@ -227,105 +188,6 @@ WERROR dsdb_get_oid_mappings_ldb(const struct dsdb_schema *schema,
return WERR_OK;
}
-WERROR dsdb_verify_oid_mappings_drsuapi(const struct dsdb_schema *schema, const struct drsuapi_DsReplicaOIDMapping_Ctr *ctr)
-{
- uint32_t i,j;
- DATA_BLOB oid_blob;
-
- for (i=0; i < ctr->num_mappings; i++) {
- if (ctr->mappings[i].oid.binary_oid == NULL) {
- return WERR_INVALID_PARAM;
- }
-
- if (ctr->mappings[i].oid.binary_oid[0] == 0xFF) {
- if (ctr->mappings[i].id_prefix != 0) {
- return WERR_INVALID_PARAM;
- }
-
- /* the magic value should be in the last array member */
- if (i != (ctr->num_mappings - 1)) {
- return WERR_INVALID_PARAM;
- }
-
- if (ctr->mappings[i].oid.length != 21) {
- return WERR_INVALID_PARAM;
- }
-
- oid_blob = strhex_to_data_blob(NULL, schema->schema_info);
- W_ERROR_HAVE_NO_MEMORY(oid_blob.data);
-
- if (memcmp(oid_blob.data, ctr->mappings[i].oid.binary_oid, 21) != 0) {
- data_blob_free(&oid_blob);
- return WERR_DS_DRA_SCHEMA_MISMATCH;
- }
-
- data_blob_free(&oid_blob);
- } else {
- /* the last array member should contain the magic value not a oid */
- if (i == (ctr->num_mappings - 1)) {
- return WERR_INVALID_PARAM;
- }
-
- for (j=0; j < schema->num_prefixes; j++) {
- if (schema->prefixes[j].id != (ctr->mappings[i].id_prefix<<16)) {
- continue;
- }
-
- if (!ber_write_partial_OID_String(NULL, &oid_blob, schema->prefixes[j].oid)) {
- return WERR_INTERNAL_ERROR;
- }
-
- if (oid_blob.length != ctr->mappings[j].oid.length) {
- data_blob_free(&oid_blob);
- return WERR_DS_DRA_SCHEMA_MISMATCH;
- }
-
- if (memcmp(ctr->mappings[i].oid.binary_oid, oid_blob.data, oid_blob.length) != 0) {
- data_blob_free(&oid_blob);
- return WERR_DS_DRA_SCHEMA_MISMATCH;
- }
-
- data_blob_free(&oid_blob);
-
- break;
- }
-
- if (j == schema->num_prefixes) {
- return WERR_DS_DRA_SCHEMA_MISMATCH;
- }
- }
- }
-
- return WERR_OK;
-}
-
-WERROR dsdb_map_oid2int(const struct dsdb_schema *schema, const char *in, uint32_t *out)
-{
- return dsdb_find_prefix_for_oid(schema->num_prefixes, schema->prefixes, in, out);
-}
-
-
-WERROR dsdb_map_int2oid(const struct dsdb_schema *schema, uint32_t in, TALLOC_CTX *mem_ctx, const char **out)
-{
- uint32_t i;
-
- for (i=0; i < schema->num_prefixes; i++) {
- const char *val;
- if (schema->prefixes[i].id != (in & 0xFFFF0000)) {
- continue;
- }
-
- val = talloc_asprintf(mem_ctx, "%s.%u",
- schema->prefixes[i].oid,
- in & 0xFFFF);
- W_ERROR_HAVE_NO_MEMORY(val);
-
- *out = val;
- return WERR_OK;
- }
-
- return WERR_DS_NO_MSDS_INTID;
-}
/*
* this function is called from within a ldb transaction from the schema_fsmo module
@@ -333,16 +195,15 @@ WERROR dsdb_map_int2oid(const struct dsdb_schema *schema, uint32_t in, TALLOC_CT
WERROR dsdb_create_prefix_mapping(struct ldb_context *ldb, struct dsdb_schema *schema, const char *full_oid)
{
WERROR status;
- uint32_t num_prefixes;
- struct dsdb_schema_oid_prefix *prefixes;
+ uint32_t attid;
TALLOC_CTX *mem_ctx;
- uint32_t out;
+ struct dsdb_schema_prefixmap *pfm;
mem_ctx = talloc_new(ldb);
W_ERROR_HAVE_NO_MEMORY(mem_ctx);
/* Read prefixes from disk*/
- status = dsdb_read_prefixes_from_ldb( mem_ctx, ldb, &num_prefixes, &prefixes );
+ status = dsdb_read_prefixes_from_ldb(ldb, mem_ctx, &pfm);
if (!W_ERROR_IS_OK(status)) {
DEBUG(0,("dsdb_create_prefix_mapping: dsdb_read_prefixes_from_ldb: %s\n",
win_errstr(status)));
@@ -351,7 +212,7 @@ WERROR dsdb_create_prefix_mapping(struct ldb_context *ldb, struct dsdb_schema *s
}
/* Check if there is a prefix for the oid in the prefixes array*/
- status = dsdb_find_prefix_for_oid( num_prefixes, prefixes, full_oid, &out );
+ status = dsdb_schema_pfm_find_oid(pfm, full_oid, NULL);
if (W_ERROR_IS_OK(status)) {
/* prefix found*/
talloc_free(mem_ctx);
@@ -365,17 +226,16 @@ WERROR dsdb_create_prefix_mapping(struct ldb_context *ldb, struct dsdb_schema *s
}
/* Create the new mapping for the prefix of full_oid */
- status = dsdb_prefix_map_update(mem_ctx, &num_prefixes, &prefixes, full_oid);
+ status = dsdb_schema_pfm_make_attid(pfm, full_oid, &attid);
if (!W_ERROR_IS_OK(status)) {
- DEBUG(0,("dsdb_create_prefix_mapping: dsdb_prefix_map_update: %s\n",
+ DEBUG(0,("dsdb_create_prefix_mapping: dsdb_schema_pfm_make_attid: %s\n",
win_errstr(status)));
talloc_free(mem_ctx);
return status;
}
- talloc_free(schema->prefixes);
- schema->prefixes = talloc_steal(schema, prefixes);
- schema->num_prefixes = num_prefixes;
+ talloc_unlink(schema, schema->prefixmap);
+ schema->prefixmap = talloc_steal(schema, pfm);
/* Update prefixMap in ldb*/
status = dsdb_write_prefixes_from_schema_to_ldb(mem_ctx, ldb, schema);
@@ -387,166 +247,74 @@ WERROR dsdb_create_prefix_mapping(struct ldb_context *ldb, struct dsdb_schema *s
}
DEBUG(2,(__location__ " Added prefixMap %s - now have %u prefixes\n",
- full_oid, num_prefixes));
+ full_oid, schema->prefixmap->length));
talloc_free(mem_ctx);
return status;
}
-WERROR dsdb_prefix_map_update(TALLOC_CTX *mem_ctx, uint32_t *num_prefixes, struct dsdb_schema_oid_prefix **prefixes, const char *oid)
-{
- uint32_t new_num_prefixes, index_new_prefix, new_entry_id;
--
Samba Shared Repository
More information about the samba-cvs
mailing list