The Samba-Bugzilla – Attachment 15352 Details for
Bug 13959
ldb_tdb fails to check error return when parsing pack formats
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch for Samba 4.10 (backported/cherry-picked from master) V3
segfault-fix-backport-4.10-V3.patch (text/plain), 36.50 KB, created by
Aaron Haslett (dead mail address)
on 2019-07-31 01:23:29 UTC
(
hide
)
Description:
patch for Samba 4.10 (backported/cherry-picked from master) V3
Filename:
MIME Type:
Creator:
Aaron Haslett (dead mail address)
Created:
2019-07-31 01:23:29 UTC
Size:
36.50 KB
patch
obsolete
>From b4bf73617fc6370d796eff9e439b9a72409678f9 Mon Sep 17 00:00:00 2001 >From: Aaron Haslett <aaronhaslett@catalyst.net.nz> >Date: Tue, 28 May 2019 17:22:10 +1200 >Subject: [PATCH 1/5] ldb: test for parse errors > >Parse errors aren't passed up correctly by the tdb backend. This >patch modifies a test to expose the issue, next patch will fix it. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=13959 > >Signed-off-by: Aaron Haslett <aaronhaslett@catalyst.net.nz> >Reviewed-by: Andrew Bartlett <abartlet@samba.org> >Reviewed-by: Garming Sam <garming@catalyst.net.nz> >(cherry picked from commit 2de0aebed60b8e83508f50e5391ede618ce0e595) >--- > lib/ldb/tests/ldb_kv_ops_test.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > >diff --git a/lib/ldb/tests/ldb_kv_ops_test.c b/lib/ldb/tests/ldb_kv_ops_test.c >index d6a4dc0..bd9f3ee 100644 >--- a/lib/ldb/tests/ldb_kv_ops_test.c >+++ b/lib/ldb/tests/ldb_kv_ops_test.c >@@ -203,6 +203,17 @@ static int parse(struct ldb_val key, > } > > /* >+ * Parse function that just returns the int we pass it. >+ */ >+static int parse_return(struct ldb_val key, >+ struct ldb_val data, >+ void *private_data) >+{ >+ int *rcode = private_data; >+ return *rcode; >+} >+ >+/* > * Test that data can be written to the kv store and be read back. > */ > static void test_add_get(void **state) >@@ -224,6 +235,7 @@ static void test_add_get(void **state) > }; > > struct ldb_val read; >+ int rcode; > > int flags = 0; > TALLOC_CTX *tmp_ctx; >@@ -261,6 +273,17 @@ static void test_add_get(void **state) > assert_int_equal(sizeof(value), read.length); > assert_memory_equal(value, read.data, sizeof(value)); > >+ /* >+ * Now check that the error code we return in the >+ * parse function is returned by fetch_and_parse. >+ */ >+ for (rcode=0; rcode<50; rcode++) { >+ ret = ldb_kv->kv_ops->fetch_and_parse(ldb_kv, key, >+ parse_return, >+ &rcode); >+ assert_int_equal(ret, rcode); >+ } >+ > ret = ldb_kv->kv_ops->unlock_read(test_ctx->ldb->modules); > assert_int_equal(ret, 0); > talloc_free(tmp_ctx); >-- >2.7.4 > > >From eae3bde99c9e90d6a32eeb4565f7f3faeefa1750 Mon Sep 17 00:00:00 2001 >From: Andrew Bartlett <abartlet@samba.org> >Date: Wed, 22 May 2019 16:38:08 +1200 >Subject: [PATCH 2/5] ldb: Fix segfault parsing new pack formats > >We need to check for the errors given by ldb_unpack() et al by preserving >the error code from kv_ctx->parser() called by tdb_parse_record() in >ltdb_parse_record(). > >Otherwise we will silently accept corrupt records and segfault later. > >Likewise new pack formats will confuse the parser but not be >detected except by the incomplete struct ldb_message. > >With this patch, the user will see a message like: > > Invalid data for index DN=@BASEINFO > > Failed to connect to 'st/ad_dc/private/sam.ldb' with backend 'tdb': Unable to load ltdb cache records for backend 'ldb_tdb backend' > Failed to connect to st/ad_dc/private/sam.ldb - Unable to load ltdb cache records for backend 'ldb_tdb backend' > >This can be refined in the future by a specific check for >pack format versions in a higher caller, but this much is >needed regardless to detect corrupt records. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=13959 > >Signed-off-by: Andrew Bartlett <abartlet@samba.org> >Reviewed-by: Garming Sam <garming@catalyst.net.nz> >(cherry picked from commit a3101b9704f554a350493553336cbbbd7d4ae02e) >--- > lib/ldb/ldb_tdb/ldb_tdb.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > >diff --git a/lib/ldb/ldb_tdb/ldb_tdb.c b/lib/ldb/ldb_tdb/ldb_tdb.c >index 812ddd3..51507f5 100644 >--- a/lib/ldb/ldb_tdb/ldb_tdb.c >+++ b/lib/ldb/ldb_tdb/ldb_tdb.c >@@ -242,6 +242,7 @@ struct kv_ctx { > int (*parser)(struct ldb_val key, > struct ldb_val data, > void *private_data); >+ int parser_ret; > }; > > static int ltdb_traverse_fn_wrapper(struct tdb_context *tdb, >@@ -350,7 +351,8 @@ static int ltdb_parse_record_wrapper(TDB_DATA tdb_key, > .data = tdb_data.dptr, > }; > >- return kv_ctx->parser(key, data, kv_ctx->ctx); >+ kv_ctx->parser_ret = kv_ctx->parser(key, data, kv_ctx->ctx); >+ return kv_ctx->parser_ret; > } > > static int ltdb_parse_record(struct ldb_kv_private *ldb_kv, >@@ -374,7 +376,9 @@ static int ltdb_parse_record(struct ldb_kv_private *ldb_kv, > > ret = tdb_parse_record( > ldb_kv->tdb, key, ltdb_parse_record_wrapper, &kv_ctx); >- if (ret == 0) { >+ if (kv_ctx.parser_ret != LDB_SUCCESS) { >+ return kv_ctx.parser_ret; >+ } else if (ret == 0) { > return LDB_SUCCESS; > } > return ltdb_err_map(tdb_error(ldb_kv->tdb)); >-- >2.7.4 > > >From 68c50f84fe7fb819a18673577ee55ac0d3c537c9 Mon Sep 17 00:00:00 2001 >From: Aaron Haslett <aaronhaslett@catalyst.net.nz> >Date: Fri, 10 May 2019 18:10:51 +1200 >Subject: [PATCH 3/5] ldb: baseinfo pack format check on init > >We will be adding a new packing format in forthcoming commits and there >may be more versions in the future. We need to make sure the database >contains records in a format we know how to read and write. >Done by fetching the @BASEINFO record and reading the first 4 >bytes which contain the packing format version. > >NOTE: Configure with --abi-check-disable to build this commit. This >patch is part of a set of LDB ABI changes, and the version update is >done on the last commit. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=13977 > >Signed-off-by: Aaron Haslett <aaronhaslett@catalyst.net.nz> >Reviewed-by: Andrew Bartlett <abartlet@samba.org> >Reviewed-by: Gary Lockyer <gary@catalyst.net.nz> >(backported from commit 474e55523224430781ed22aa2d0c8a474306e794) >--- > lib/ldb/common/ldb_pack.c | 23 ++++++++++++++-------- > lib/ldb/include/ldb_module.h | 9 +++++++++ > lib/ldb/ldb_key_value/ldb_kv.c | 2 ++ > lib/ldb/ldb_key_value/ldb_kv.h | 1 + > lib/ldb/ldb_key_value/ldb_kv_cache.c | 37 ++++++++++++++++++++++++++++++++++++ > 5 files changed, 64 insertions(+), 8 deletions(-) > >diff --git a/lib/ldb/common/ldb_pack.c b/lib/ldb/common/ldb_pack.c >index 448c577..286803f 100644 >--- a/lib/ldb/common/ldb_pack.c >+++ b/lib/ldb/common/ldb_pack.c >@@ -33,12 +33,6 @@ > > #include "ldb_private.h" > >-/* change this if the data format ever changes */ >-#define LDB_PACKING_FORMAT 0x26011967 >- >-/* old packing formats */ >-#define LDB_PACKING_FORMAT_NODN 0x26011966 >- > /* use a portable integer format */ > static void put_uint32(uint8_t *p, int ofs, unsigned int val) > { >@@ -229,7 +223,7 @@ int ldb_unpack_data_only_attr_list_flags(struct ldb_context *ldb, > size_t remaining; > size_t dn_len; > unsigned int i, j; >- unsigned format; >+ uint32_t format; > unsigned int nelem = 0; > size_t len; > unsigned int found = 0; >@@ -247,7 +241,10 @@ int ldb_unpack_data_only_attr_list_flags(struct ldb_context *ldb, > goto failed; > } > >- format = pull_uint32(p, 0); >+ if (ldb_unpack_get_format(data, &format) != LDB_SUCCESS) { >+ errno = EIO; >+ goto failed; >+ } > message->num_elements = pull_uint32(p, 4); > p += 8; > if (nb_elements_in_db) { >@@ -504,6 +501,16 @@ failed: > return -1; > } > >+int ldb_unpack_get_format(const struct ldb_val *data, >+ uint32_t *pack_format_version) >+{ >+ if (data->length < 4) { >+ return LDB_ERR_OPERATIONS_ERROR; >+ } >+ *pack_format_version = pull_uint32(data->data, 0); >+ return LDB_SUCCESS; >+} >+ > /* > * Unpack a ldb message from a linear buffer in ldb_val > * >diff --git a/lib/ldb/include/ldb_module.h b/lib/ldb/include/ldb_module.h >index c73fc37..8c47082 100644 >--- a/lib/ldb/include/ldb_module.h >+++ b/lib/ldb/include/ldb_module.h >@@ -561,11 +561,20 @@ int ldb_unpack_data_only_attr_list_flags(struct ldb_context *ldb, > unsigned int flags, > unsigned int *nb_elements_in_db); > >+int ldb_unpack_get_format(const struct ldb_val *data, >+ uint32_t *pack_format_version); >+ > #define LDB_UNPACK_DATA_FLAG_NO_DATA_ALLOC 0x0001 > #define LDB_UNPACK_DATA_FLAG_NO_DN 0x0002 > #define LDB_UNPACK_DATA_FLAG_NO_VALUES_ALLOC 0x0004 > #define LDB_UNPACK_DATA_FLAG_NO_ATTRS 0x0008 > >+/* In-use packing formats */ >+#define LDB_PACKING_FORMAT 0x26011967 >+ >+/* Old packing formats */ >+#define LDB_PACKING_FORMAT_NODN 0x26011966 >+ > /** > Forces a specific ldb handle to use the global event context. > >diff --git a/lib/ldb/ldb_key_value/ldb_kv.c b/lib/ldb/ldb_key_value/ldb_kv.c >index 31bdfb5..87ed37b 100644 >--- a/lib/ldb/ldb_key_value/ldb_kv.c >+++ b/lib/ldb/ldb_key_value/ldb_kv.c >@@ -1902,6 +1902,8 @@ int ldb_kv_init_store(struct ldb_kv_private *ldb_kv, > > ldb_kv->sequence_number = 0; > >+ ldb_kv->pack_format_version = LDB_PACKING_FORMAT; >+ > ldb_kv->pid = getpid(); > > ldb_kv->module = ldb_module_new(ldb, ldb, name, &ldb_kv_ops); >diff --git a/lib/ldb/ldb_key_value/ldb_kv.h b/lib/ldb/ldb_key_value/ldb_kv.h >index cbc5213..c31973a 100644 >--- a/lib/ldb/ldb_key_value/ldb_kv.h >+++ b/lib/ldb/ldb_key_value/ldb_kv.h >@@ -53,6 +53,7 @@ struct ldb_kv_private { > unsigned int connect_flags; > > unsigned long long sequence_number; >+ uint32_t pack_format_version; > > /* the low level tdb seqnum - used to avoid loading BASEINFO when > possible */ >diff --git a/lib/ldb/ldb_key_value/ldb_kv_cache.c b/lib/ldb/ldb_key_value/ldb_kv_cache.c >index c39273f..a795b53 100644 >--- a/lib/ldb/ldb_key_value/ldb_kv_cache.c >+++ b/lib/ldb/ldb_key_value/ldb_kv_cache.c >@@ -393,6 +393,13 @@ int ldb_kv_cache_reload(struct ldb_module *module) > ldb_kv_cache_free(module); > return ldb_kv_cache_load(module); > } >+static int get_pack_format_version(struct ldb_val key, >+ struct ldb_val data, >+ void *private_data) >+{ >+ uint32_t *v = (uint32_t *) private_data; >+ return ldb_unpack_get_format(&data, v); >+} > > /* > load the cache records >@@ -409,6 +416,8 @@ int ldb_kv_cache_load(struct ldb_module *module) > const struct ldb_schema_attribute *a; > bool have_write_txn = false; > int r; >+ uint32_t pack_format_version; >+ struct ldb_val key; > > ldb = ldb_module_get_ctx(module); > >@@ -433,6 +442,34 @@ int ldb_kv_cache_load(struct ldb_module *module) > if (r != LDB_SUCCESS) { > goto failed; > } >+ >+ key = ldb_kv_key_dn(module, baseinfo, baseinfo_dn); >+ if (!key.data) { >+ goto failed_and_unlock; >+ } >+ >+ /* Read packing format from first 4 bytes of @BASEINFO record */ >+ r = ldb_kv->kv_ops->fetch_and_parse(ldb_kv, key, >+ get_pack_format_version, >+ &pack_format_version); >+ >+ if (r != LDB_ERR_NO_SUCH_OBJECT) { >+ if (r != LDB_SUCCESS) { >+ goto failed_and_unlock; >+ } >+ >+ /* Make sure the database has the right format */ >+ if (pack_format_version != ldb_kv->pack_format_version) { >+ ldb_debug(ldb, LDB_DEBUG_ERROR, >+ "Unexpected packing format. " >+ "Expected: %#010x, Got: %#010x", >+ pack_format_version, >+ ldb_kv->pack_format_version); >+ goto failed_and_unlock; >+ } >+ } >+ >+ /* Now fetch the whole @BASEINFO record */ > r = ldb_kv_search_dn1(module, baseinfo_dn, baseinfo, 0); > if (r != LDB_SUCCESS && r != LDB_ERR_NO_SUCH_OBJECT) { > goto failed_and_unlock; >-- >2.7.4 > > >From 242784dea2c5bfb432a057f55126ea3dae7f308b Mon Sep 17 00:00:00 2001 >From: Aaron Haslett <aaronhaslett@catalyst.net.nz> >Date: Mon, 20 May 2019 16:19:51 +1200 >Subject: [PATCH 4/5] ldb: ldbdump key and pack format version comments > >For testing we need to know the actual KV level key of records and each >record's pack format version. This patch makes ldbdump add comments with >that info. We will parse it out in python tests. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=13978 > >Signed-off-by: Aaron Haslett <aaronhaslett@catalyst.net.nz> >Reviewed-by: Andrew Bartlett <abartlet@samba.org> >Reviewed-by: Gary Lockyer <gary@catalyst.net.nz> > >Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> >Autobuild-Date(master): Wed May 22 05:58:17 UTC 2019 on sn-devel-184 > >(cherry picked from commit a666a99e4dc594bc153cd26b24cddd547c1cc750) >--- > lib/ldb/tools/ldbdump.c | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > >diff --git a/lib/ldb/tools/ldbdump.c b/lib/ldb/tools/ldbdump.c >index a466e49..09b4fe0 100644 >--- a/lib/ldb/tools/ldbdump.c >+++ b/lib/ldb/tools/ldbdump.c >@@ -36,6 +36,26 @@ static struct ldb_context *ldb; > bool show_index = false; > bool validate_contents = false; > >+static void print_data(TDB_DATA d) >+{ >+ unsigned char *p = (unsigned char *)d.dptr; >+ int len = d.dsize; >+ while (len--) { >+ if (isprint(*p) && !strchr("\"\\", *p)) { >+ fputc(*p, stdout); >+ } else { >+ printf("\\%02X", *p); >+ } >+ p++; >+ } >+} >+ >+static unsigned int pull_uint32(uint8_t *p) >+{ >+ return p[0] | (p[1]<<8) | (p[2]<<16) | (p[3]<<24); >+} >+ >+ > static int traverse_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA _dbuf, void *state) > { > int ret, i, j; >@@ -79,6 +99,10 @@ static int traverse_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA _dbuf, void *sta > } > } > >+ printf("# key: "); >+ print_data(key); >+ printf("\n# pack format: %#010x\n", pull_uint32(_dbuf.dptr)); >+ > if (!validate_contents || ldb_dn_is_special(msg->dn)) { > ldb_ldif_write_file(ldb, stdout, &ldif); > TALLOC_FREE(msg); >-- >2.7.4 > > >From ccffa70e11581c4bfd0330428099304419fe49af Mon Sep 17 00:00:00 2001 >From: Andrew Bartlett <abartlet@samba.org> >Date: Tue, 16 Jul 2019 17:53:47 +1200 >Subject: [PATCH 5/5] ldb: Release ldb 1.5.6 > >* Fix segfault parsing new pack formats or invalid packed data (bug 13959) >* Check for new pack formats during startup (bug 13977) >* Making ldbdump print out pack format info and keys so we have > low level visibility for testing in python (for bug 13978) > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=13959 > >Signed-off-by: Andrew Bartlett <abartlet@samba.org> >--- > lib/ldb/ABI/ldb-1.5.6.sigs | 281 ++++++++++++++++++++++++++++++++++ > lib/ldb/ABI/pyldb-util-1.5.6.sigs | 2 + > lib/ldb/ABI/pyldb-util.py3-1.5.6.sigs | 2 + > lib/ldb/wscript | 2 +- > 4 files changed, 286 insertions(+), 1 deletion(-) > create mode 100644 lib/ldb/ABI/ldb-1.5.6.sigs > create mode 100644 lib/ldb/ABI/pyldb-util-1.5.6.sigs > create mode 100644 lib/ldb/ABI/pyldb-util.py3-1.5.6.sigs > >diff --git a/lib/ldb/ABI/ldb-1.5.6.sigs b/lib/ldb/ABI/ldb-1.5.6.sigs >new file mode 100644 >index 0000000..9bf06ce >--- /dev/null >+++ b/lib/ldb/ABI/ldb-1.5.6.sigs >@@ -0,0 +1,281 @@ >+ldb_add: int (struct ldb_context *, const struct ldb_message *) >+ldb_any_comparison: int (struct ldb_context *, void *, ldb_attr_handler_t, const struct ldb_val *, const struct ldb_val *) >+ldb_asprintf_errstring: void (struct ldb_context *, const char *, ...) >+ldb_attr_casefold: char *(TALLOC_CTX *, const char *) >+ldb_attr_dn: int (const char *) >+ldb_attr_in_list: int (const char * const *, const char *) >+ldb_attr_list_copy: const char **(TALLOC_CTX *, const char * const *) >+ldb_attr_list_copy_add: const char **(TALLOC_CTX *, const char * const *, const char *) >+ldb_base64_decode: int (char *) >+ldb_base64_encode: char *(TALLOC_CTX *, const char *, int) >+ldb_binary_decode: struct ldb_val (TALLOC_CTX *, const char *) >+ldb_binary_encode: char *(TALLOC_CTX *, struct ldb_val) >+ldb_binary_encode_string: char *(TALLOC_CTX *, const char *) >+ldb_build_add_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_del_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_extended_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const char *, void *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_mod_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_rename_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, struct ldb_dn *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_search_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, enum ldb_scope, const char *, const char * const *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_search_req_ex: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, enum ldb_scope, struct ldb_parse_tree *, const char * const *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_casefold: char *(struct ldb_context *, TALLOC_CTX *, const char *, size_t) >+ldb_casefold_default: char *(void *, TALLOC_CTX *, const char *, size_t) >+ldb_check_critical_controls: int (struct ldb_control **) >+ldb_comparison_binary: int (struct ldb_context *, void *, const struct ldb_val *, const struct ldb_val *) >+ldb_comparison_fold: int (struct ldb_context *, void *, const struct ldb_val *, const struct ldb_val *) >+ldb_connect: int (struct ldb_context *, const char *, unsigned int, const char **) >+ldb_control_to_string: char *(TALLOC_CTX *, const struct ldb_control *) >+ldb_controls_except_specified: struct ldb_control **(struct ldb_control **, TALLOC_CTX *, struct ldb_control *) >+ldb_debug: void (struct ldb_context *, enum ldb_debug_level, const char *, ...) >+ldb_debug_add: void (struct ldb_context *, const char *, ...) >+ldb_debug_end: void (struct ldb_context *, enum ldb_debug_level) >+ldb_debug_set: void (struct ldb_context *, enum ldb_debug_level, const char *, ...) >+ldb_delete: int (struct ldb_context *, struct ldb_dn *) >+ldb_dn_add_base: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_add_base_fmt: bool (struct ldb_dn *, const char *, ...) >+ldb_dn_add_child: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_add_child_fmt: bool (struct ldb_dn *, const char *, ...) >+ldb_dn_add_child_val: bool (struct ldb_dn *, const char *, struct ldb_val) >+ldb_dn_alloc_casefold: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_alloc_linearized: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_canonical_ex_string: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_canonical_string: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_check_local: bool (struct ldb_module *, struct ldb_dn *) >+ldb_dn_check_special: bool (struct ldb_dn *, const char *) >+ldb_dn_compare: int (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_compare_base: int (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_copy: struct ldb_dn *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_escape_value: char *(TALLOC_CTX *, struct ldb_val) >+ldb_dn_extended_add_syntax: int (struct ldb_context *, unsigned int, const struct ldb_dn_extended_syntax *) >+ldb_dn_extended_filter: void (struct ldb_dn *, const char * const *) >+ldb_dn_extended_syntax_by_name: const struct ldb_dn_extended_syntax *(struct ldb_context *, const char *) >+ldb_dn_from_ldb_val: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const struct ldb_val *) >+ldb_dn_get_casefold: const char *(struct ldb_dn *) >+ldb_dn_get_comp_num: int (struct ldb_dn *) >+ldb_dn_get_component_name: const char *(struct ldb_dn *, unsigned int) >+ldb_dn_get_component_val: const struct ldb_val *(struct ldb_dn *, unsigned int) >+ldb_dn_get_extended_comp_num: int (struct ldb_dn *) >+ldb_dn_get_extended_component: const struct ldb_val *(struct ldb_dn *, const char *) >+ldb_dn_get_extended_linearized: char *(TALLOC_CTX *, struct ldb_dn *, int) >+ldb_dn_get_ldb_context: struct ldb_context *(struct ldb_dn *) >+ldb_dn_get_linearized: const char *(struct ldb_dn *) >+ldb_dn_get_parent: struct ldb_dn *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_get_rdn_name: const char *(struct ldb_dn *) >+ldb_dn_get_rdn_val: const struct ldb_val *(struct ldb_dn *) >+ldb_dn_has_extended: bool (struct ldb_dn *) >+ldb_dn_is_null: bool (struct ldb_dn *) >+ldb_dn_is_special: bool (struct ldb_dn *) >+ldb_dn_is_valid: bool (struct ldb_dn *) >+ldb_dn_map_local: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_map_rebase_remote: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_map_remote: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_minimise: bool (struct ldb_dn *) >+ldb_dn_new: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const char *) >+ldb_dn_new_fmt: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const char *, ...) >+ldb_dn_remove_base_components: bool (struct ldb_dn *, unsigned int) >+ldb_dn_remove_child_components: bool (struct ldb_dn *, unsigned int) >+ldb_dn_remove_extended_components: void (struct ldb_dn *) >+ldb_dn_replace_components: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_set_component: int (struct ldb_dn *, int, const char *, const struct ldb_val) >+ldb_dn_set_extended_component: int (struct ldb_dn *, const char *, const struct ldb_val *) >+ldb_dn_update_components: int (struct ldb_dn *, const struct ldb_dn *) >+ldb_dn_validate: bool (struct ldb_dn *) >+ldb_dump_results: void (struct ldb_context *, struct ldb_result *, FILE *) >+ldb_error_at: int (struct ldb_context *, int, const char *, const char *, int) >+ldb_errstring: const char *(struct ldb_context *) >+ldb_extended: int (struct ldb_context *, const char *, void *, struct ldb_result **) >+ldb_extended_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_filter_from_tree: char *(TALLOC_CTX *, const struct ldb_parse_tree *) >+ldb_get_config_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_create_perms: unsigned int (struct ldb_context *) >+ldb_get_default_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_event_context: struct tevent_context *(struct ldb_context *) >+ldb_get_flags: unsigned int (struct ldb_context *) >+ldb_get_opaque: void *(struct ldb_context *, const char *) >+ldb_get_root_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_schema_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_global_init: int (void) >+ldb_handle_get_event_context: struct tevent_context *(struct ldb_handle *) >+ldb_handle_new: struct ldb_handle *(TALLOC_CTX *, struct ldb_context *) >+ldb_handle_use_global_event_context: void (struct ldb_handle *) >+ldb_handler_copy: int (struct ldb_context *, void *, const struct ldb_val *, struct ldb_val *) >+ldb_handler_fold: int (struct ldb_context *, void *, const struct ldb_val *, struct ldb_val *) >+ldb_init: struct ldb_context *(TALLOC_CTX *, struct tevent_context *) >+ldb_ldif_message_redacted_string: char *(struct ldb_context *, TALLOC_CTX *, enum ldb_changetype, const struct ldb_message *) >+ldb_ldif_message_string: char *(struct ldb_context *, TALLOC_CTX *, enum ldb_changetype, const struct ldb_message *) >+ldb_ldif_parse_modrdn: int (struct ldb_context *, const struct ldb_ldif *, TALLOC_CTX *, struct ldb_dn **, struct ldb_dn **, bool *, struct ldb_dn **, struct ldb_dn **) >+ldb_ldif_read: struct ldb_ldif *(struct ldb_context *, int (*)(void *), void *) >+ldb_ldif_read_file: struct ldb_ldif *(struct ldb_context *, FILE *) >+ldb_ldif_read_file_state: struct ldb_ldif *(struct ldb_context *, struct ldif_read_file_state *) >+ldb_ldif_read_free: void (struct ldb_context *, struct ldb_ldif *) >+ldb_ldif_read_string: struct ldb_ldif *(struct ldb_context *, const char **) >+ldb_ldif_write: int (struct ldb_context *, int (*)(void *, const char *, ...), void *, const struct ldb_ldif *) >+ldb_ldif_write_file: int (struct ldb_context *, FILE *, const struct ldb_ldif *) >+ldb_ldif_write_redacted_trace_string: char *(struct ldb_context *, TALLOC_CTX *, const struct ldb_ldif *) >+ldb_ldif_write_string: char *(struct ldb_context *, TALLOC_CTX *, const struct ldb_ldif *) >+ldb_load_modules: int (struct ldb_context *, const char **) >+ldb_map_add: int (struct ldb_module *, struct ldb_request *) >+ldb_map_delete: int (struct ldb_module *, struct ldb_request *) >+ldb_map_init: int (struct ldb_module *, const struct ldb_map_attribute *, const struct ldb_map_objectclass *, const char * const *, const char *, const char *) >+ldb_map_modify: int (struct ldb_module *, struct ldb_request *) >+ldb_map_rename: int (struct ldb_module *, struct ldb_request *) >+ldb_map_search: int (struct ldb_module *, struct ldb_request *) >+ldb_match_message: int (struct ldb_context *, const struct ldb_message *, const struct ldb_parse_tree *, enum ldb_scope, bool *) >+ldb_match_msg: int (struct ldb_context *, const struct ldb_message *, const struct ldb_parse_tree *, struct ldb_dn *, enum ldb_scope) >+ldb_match_msg_error: int (struct ldb_context *, const struct ldb_message *, const struct ldb_parse_tree *, struct ldb_dn *, enum ldb_scope, bool *) >+ldb_match_msg_objectclass: int (const struct ldb_message *, const char *) >+ldb_mod_register_control: int (struct ldb_module *, const char *) >+ldb_modify: int (struct ldb_context *, const struct ldb_message *) >+ldb_modify_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_module_call_chain: char *(struct ldb_request *, TALLOC_CTX *) >+ldb_module_connect_backend: int (struct ldb_context *, const char *, const char **, struct ldb_module **) >+ldb_module_done: int (struct ldb_request *, struct ldb_control **, struct ldb_extended *, int) >+ldb_module_flags: uint32_t (struct ldb_context *) >+ldb_module_get_ctx: struct ldb_context *(struct ldb_module *) >+ldb_module_get_name: const char *(struct ldb_module *) >+ldb_module_get_ops: const struct ldb_module_ops *(struct ldb_module *) >+ldb_module_get_private: void *(struct ldb_module *) >+ldb_module_init_chain: int (struct ldb_context *, struct ldb_module *) >+ldb_module_load_list: int (struct ldb_context *, const char **, struct ldb_module *, struct ldb_module **) >+ldb_module_new: struct ldb_module *(TALLOC_CTX *, struct ldb_context *, const char *, const struct ldb_module_ops *) >+ldb_module_next: struct ldb_module *(struct ldb_module *) >+ldb_module_popt_options: struct poptOption **(struct ldb_context *) >+ldb_module_send_entry: int (struct ldb_request *, struct ldb_message *, struct ldb_control **) >+ldb_module_send_referral: int (struct ldb_request *, char *) >+ldb_module_set_next: void (struct ldb_module *, struct ldb_module *) >+ldb_module_set_private: void (struct ldb_module *, void *) >+ldb_modules_hook: int (struct ldb_context *, enum ldb_module_hook_type) >+ldb_modules_list_from_string: const char **(struct ldb_context *, TALLOC_CTX *, const char *) >+ldb_modules_load: int (const char *, const char *) >+ldb_msg_add: int (struct ldb_message *, const struct ldb_message_element *, int) >+ldb_msg_add_empty: int (struct ldb_message *, const char *, int, struct ldb_message_element **) >+ldb_msg_add_fmt: int (struct ldb_message *, const char *, const char *, ...) >+ldb_msg_add_linearized_dn: int (struct ldb_message *, const char *, struct ldb_dn *) >+ldb_msg_add_steal_string: int (struct ldb_message *, const char *, char *) >+ldb_msg_add_steal_value: int (struct ldb_message *, const char *, struct ldb_val *) >+ldb_msg_add_string: int (struct ldb_message *, const char *, const char *) >+ldb_msg_add_value: int (struct ldb_message *, const char *, const struct ldb_val *, struct ldb_message_element **) >+ldb_msg_canonicalize: struct ldb_message *(struct ldb_context *, const struct ldb_message *) >+ldb_msg_check_string_attribute: int (const struct ldb_message *, const char *, const char *) >+ldb_msg_copy: struct ldb_message *(TALLOC_CTX *, const struct ldb_message *) >+ldb_msg_copy_attr: int (struct ldb_message *, const char *, const char *) >+ldb_msg_copy_shallow: struct ldb_message *(TALLOC_CTX *, const struct ldb_message *) >+ldb_msg_diff: struct ldb_message *(struct ldb_context *, struct ldb_message *, struct ldb_message *) >+ldb_msg_difference: int (struct ldb_context *, TALLOC_CTX *, struct ldb_message *, struct ldb_message *, struct ldb_message **) >+ldb_msg_element_compare: int (struct ldb_message_element *, struct ldb_message_element *) >+ldb_msg_element_compare_name: int (struct ldb_message_element *, struct ldb_message_element *) >+ldb_msg_element_equal_ordered: bool (const struct ldb_message_element *, const struct ldb_message_element *) >+ldb_msg_find_attr_as_bool: int (const struct ldb_message *, const char *, int) >+ldb_msg_find_attr_as_dn: struct ldb_dn *(struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, const char *) >+ldb_msg_find_attr_as_double: double (const struct ldb_message *, const char *, double) >+ldb_msg_find_attr_as_int: int (const struct ldb_message *, const char *, int) >+ldb_msg_find_attr_as_int64: int64_t (const struct ldb_message *, const char *, int64_t) >+ldb_msg_find_attr_as_string: const char *(const struct ldb_message *, const char *, const char *) >+ldb_msg_find_attr_as_uint: unsigned int (const struct ldb_message *, const char *, unsigned int) >+ldb_msg_find_attr_as_uint64: uint64_t (const struct ldb_message *, const char *, uint64_t) >+ldb_msg_find_common_values: int (struct ldb_context *, TALLOC_CTX *, struct ldb_message_element *, struct ldb_message_element *, uint32_t) >+ldb_msg_find_duplicate_val: int (struct ldb_context *, TALLOC_CTX *, const struct ldb_message_element *, struct ldb_val **, uint32_t) >+ldb_msg_find_element: struct ldb_message_element *(const struct ldb_message *, const char *) >+ldb_msg_find_ldb_val: const struct ldb_val *(const struct ldb_message *, const char *) >+ldb_msg_find_val: struct ldb_val *(const struct ldb_message_element *, struct ldb_val *) >+ldb_msg_new: struct ldb_message *(TALLOC_CTX *) >+ldb_msg_normalize: int (struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_message **) >+ldb_msg_remove_attr: void (struct ldb_message *, const char *) >+ldb_msg_remove_element: void (struct ldb_message *, struct ldb_message_element *) >+ldb_msg_rename_attr: int (struct ldb_message *, const char *, const char *) >+ldb_msg_sanity_check: int (struct ldb_context *, const struct ldb_message *) >+ldb_msg_sort_elements: void (struct ldb_message *) >+ldb_next_del_trans: int (struct ldb_module *) >+ldb_next_end_trans: int (struct ldb_module *) >+ldb_next_init: int (struct ldb_module *) >+ldb_next_prepare_commit: int (struct ldb_module *) >+ldb_next_read_lock: int (struct ldb_module *) >+ldb_next_read_unlock: int (struct ldb_module *) >+ldb_next_remote_request: int (struct ldb_module *, struct ldb_request *) >+ldb_next_request: int (struct ldb_module *, struct ldb_request *) >+ldb_next_start_trans: int (struct ldb_module *) >+ldb_op_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_options_find: const char *(struct ldb_context *, const char **, const char *) >+ldb_pack_data: int (struct ldb_context *, const struct ldb_message *, struct ldb_val *) >+ldb_parse_control_from_string: struct ldb_control *(struct ldb_context *, TALLOC_CTX *, const char *) >+ldb_parse_control_strings: struct ldb_control **(struct ldb_context *, TALLOC_CTX *, const char **) >+ldb_parse_tree: struct ldb_parse_tree *(TALLOC_CTX *, const char *) >+ldb_parse_tree_attr_replace: void (struct ldb_parse_tree *, const char *, const char *) >+ldb_parse_tree_copy_shallow: struct ldb_parse_tree *(TALLOC_CTX *, const struct ldb_parse_tree *) >+ldb_parse_tree_walk: int (struct ldb_parse_tree *, int (*)(struct ldb_parse_tree *, void *), void *) >+ldb_qsort: void (void * const, size_t, size_t, void *, ldb_qsort_cmp_fn_t) >+ldb_register_backend: int (const char *, ldb_connect_fn, bool) >+ldb_register_extended_match_rule: int (struct ldb_context *, const struct ldb_extended_match_rule *) >+ldb_register_hook: int (ldb_hook_fn) >+ldb_register_module: int (const struct ldb_module_ops *) >+ldb_rename: int (struct ldb_context *, struct ldb_dn *, struct ldb_dn *) >+ldb_reply_add_control: int (struct ldb_reply *, const char *, bool, void *) >+ldb_reply_get_control: struct ldb_control *(struct ldb_reply *, const char *) >+ldb_req_get_custom_flags: uint32_t (struct ldb_request *) >+ldb_req_is_untrusted: bool (struct ldb_request *) >+ldb_req_location: const char *(struct ldb_request *) >+ldb_req_mark_trusted: void (struct ldb_request *) >+ldb_req_mark_untrusted: void (struct ldb_request *) >+ldb_req_set_custom_flags: void (struct ldb_request *, uint32_t) >+ldb_req_set_location: void (struct ldb_request *, const char *) >+ldb_request: int (struct ldb_context *, struct ldb_request *) >+ldb_request_add_control: int (struct ldb_request *, const char *, bool, void *) >+ldb_request_done: int (struct ldb_request *, int) >+ldb_request_get_control: struct ldb_control *(struct ldb_request *, const char *) >+ldb_request_get_status: int (struct ldb_request *) >+ldb_request_replace_control: int (struct ldb_request *, const char *, bool, void *) >+ldb_request_set_state: void (struct ldb_request *, int) >+ldb_reset_err_string: void (struct ldb_context *) >+ldb_save_controls: int (struct ldb_control *, struct ldb_request *, struct ldb_control ***) >+ldb_schema_attribute_add: int (struct ldb_context *, const char *, unsigned int, const char *) >+ldb_schema_attribute_add_with_syntax: int (struct ldb_context *, const char *, unsigned int, const struct ldb_schema_syntax *) >+ldb_schema_attribute_by_name: const struct ldb_schema_attribute *(struct ldb_context *, const char *) >+ldb_schema_attribute_fill_with_syntax: int (struct ldb_context *, TALLOC_CTX *, const char *, unsigned int, const struct ldb_schema_syntax *, struct ldb_schema_attribute *) >+ldb_schema_attribute_remove: void (struct ldb_context *, const char *) >+ldb_schema_attribute_remove_flagged: void (struct ldb_context *, unsigned int) >+ldb_schema_attribute_set_override_handler: void (struct ldb_context *, ldb_attribute_handler_override_fn_t, void *) >+ldb_schema_set_override_GUID_index: void (struct ldb_context *, const char *, const char *) >+ldb_schema_set_override_indexlist: void (struct ldb_context *, bool) >+ldb_search: int (struct ldb_context *, TALLOC_CTX *, struct ldb_result **, struct ldb_dn *, enum ldb_scope, const char * const *, const char *, ...) >+ldb_search_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_sequence_number: int (struct ldb_context *, enum ldb_sequence_type, uint64_t *) >+ldb_set_create_perms: void (struct ldb_context *, unsigned int) >+ldb_set_debug: int (struct ldb_context *, void (*)(void *, enum ldb_debug_level, const char *, va_list), void *) >+ldb_set_debug_stderr: int (struct ldb_context *) >+ldb_set_default_dns: void (struct ldb_context *) >+ldb_set_errstring: void (struct ldb_context *, const char *) >+ldb_set_event_context: void (struct ldb_context *, struct tevent_context *) >+ldb_set_flags: void (struct ldb_context *, unsigned int) >+ldb_set_modules_dir: void (struct ldb_context *, const char *) >+ldb_set_opaque: int (struct ldb_context *, const char *, void *) >+ldb_set_require_private_event_context: void (struct ldb_context *) >+ldb_set_timeout: int (struct ldb_context *, struct ldb_request *, int) >+ldb_set_timeout_from_prev_req: int (struct ldb_context *, struct ldb_request *, struct ldb_request *) >+ldb_set_utf8_default: void (struct ldb_context *) >+ldb_set_utf8_fns: void (struct ldb_context *, void *, char *(*)(void *, void *, const char *, size_t)) >+ldb_setup_wellknown_attributes: int (struct ldb_context *) >+ldb_should_b64_encode: int (struct ldb_context *, const struct ldb_val *) >+ldb_standard_syntax_by_name: const struct ldb_schema_syntax *(struct ldb_context *, const char *) >+ldb_strerror: const char *(int) >+ldb_string_to_time: time_t (const char *) >+ldb_string_utc_to_time: time_t (const char *) >+ldb_timestring: char *(TALLOC_CTX *, time_t) >+ldb_timestring_utc: char *(TALLOC_CTX *, time_t) >+ldb_transaction_cancel: int (struct ldb_context *) >+ldb_transaction_cancel_noerr: int (struct ldb_context *) >+ldb_transaction_commit: int (struct ldb_context *) >+ldb_transaction_prepare_commit: int (struct ldb_context *) >+ldb_transaction_start: int (struct ldb_context *) >+ldb_unpack_data: int (struct ldb_context *, const struct ldb_val *, struct ldb_message *) >+ldb_unpack_data_only_attr_list: int (struct ldb_context *, const struct ldb_val *, struct ldb_message *, const char * const *, unsigned int, unsigned int *) >+ldb_unpack_data_only_attr_list_flags: int (struct ldb_context *, const struct ldb_val *, struct ldb_message *, const char * const *, unsigned int, unsigned int, unsigned int *) >+ldb_unpack_get_format: int (const struct ldb_val *, uint32_t *) >+ldb_val_dup: struct ldb_val (TALLOC_CTX *, const struct ldb_val *) >+ldb_val_equal_exact: int (const struct ldb_val *, const struct ldb_val *) >+ldb_val_map_local: struct ldb_val (struct ldb_module *, void *, const struct ldb_map_attribute *, const struct ldb_val *) >+ldb_val_map_remote: struct ldb_val (struct ldb_module *, void *, const struct ldb_map_attribute *, const struct ldb_val *) >+ldb_val_string_cmp: int (const struct ldb_val *, const char *) >+ldb_val_to_time: int (const struct ldb_val *, time_t *) >+ldb_valid_attr_name: int (const char *) >+ldb_vdebug: void (struct ldb_context *, enum ldb_debug_level, const char *, va_list) >+ldb_wait: int (struct ldb_handle *, enum ldb_wait_type) >diff --git a/lib/ldb/ABI/pyldb-util-1.5.6.sigs b/lib/ldb/ABI/pyldb-util-1.5.6.sigs >new file mode 100644 >index 0000000..74d6719 >--- /dev/null >+++ b/lib/ldb/ABI/pyldb-util-1.5.6.sigs >@@ -0,0 +1,2 @@ >+pyldb_Dn_FromDn: PyObject *(struct ldb_dn *) >+pyldb_Object_AsDn: bool (TALLOC_CTX *, PyObject *, struct ldb_context *, struct ldb_dn **) >diff --git a/lib/ldb/ABI/pyldb-util.py3-1.5.6.sigs b/lib/ldb/ABI/pyldb-util.py3-1.5.6.sigs >new file mode 100644 >index 0000000..74d6719 >--- /dev/null >+++ b/lib/ldb/ABI/pyldb-util.py3-1.5.6.sigs >@@ -0,0 +1,2 @@ >+pyldb_Dn_FromDn: PyObject *(struct ldb_dn *) >+pyldb_Object_AsDn: bool (TALLOC_CTX *, PyObject *, struct ldb_context *, struct ldb_dn **) >diff --git a/lib/ldb/wscript b/lib/ldb/wscript >index f8eabbf..92975b9 100644 >--- a/lib/ldb/wscript >+++ b/lib/ldb/wscript >@@ -1,7 +1,7 @@ > #!/usr/bin/env python > > APPNAME = 'ldb' >-VERSION = '1.5.5' >+VERSION = '1.5.6' > > import sys, os > >-- >2.7.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 13959
:
15177
|
15178
|
15236
|
15237
|
15312
|
15313
|
15351
| 15352