The branch, master has been updated via d94c8992f9a sam.c: allocate account_sid on tmp_ctx via ce83b21be8a sam.c: fix incorrect check of talloc_new() allocation via 6da3664f8a1 ndr_spoolss_buf: fix out of scope use of stack variable in NDR_SPOOLSS_PUSH_ENUM_OUT() via c059b8cb82c Enable make test even without lmdb from 4125ff89e44 lib/winbind_util: Add winbind_xid_to_sid for --without-winbind
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit d94c8992f9a2941868aa3438a3fd7096c65c411d Author: Isaac Boukris <ibouk...@gmail.com> Date: Sun Jan 20 14:56:30 2019 +0200 sam.c: allocate account_sid on tmp_ctx Signed-off-by: Isaac Boukris <ibouk...@gmail.com> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Garming Sam <garm...@catalyst.net.nz> Autobuild-User(master): Andrew Bartlett <abart...@samba.org> Autobuild-Date(master): Wed Mar 6 04:30:22 UTC 2019 on sn-devel-144 commit ce83b21be8aaa537ce3cb8e2ed0bc86f33024159 Author: Isaac Boukris <ibouk...@gmail.com> Date: Tue Jan 15 13:58:52 2019 +0200 sam.c: fix incorrect check of talloc_new() allocation Signed-off-by: Isaac Boukris <ibouk...@gmail.com> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Garming Sam <garm...@catalyst.net.nz> commit 6da3664f8a11397fd3fb38e89c2432b8bf321e59 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Mar 1 15:48:18 2019 +0100 ndr_spoolss_buf: fix out of scope use of stack variable in NDR_SPOOLSS_PUSH_ENUM_OUT() BUG: https://bugzilla.samba.org/show_bug.cgi?id=13818 Signed-off-by: Stefan Metzmacher <me...@samba.org> Reviewed-by: David Disseldorp <dd...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> Reviewed-by: Björn Jacke <bja...@samba.org> Reviewed-by: Günther Deschner <g...@samba.org> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Garming Sam <garm...@catalyst.net.nz> commit c059b8cb82c7c2443e74aa780646607606f41e4b Author: Mathieu Parent <math.par...@gmail.com> Date: Wed Oct 3 20:18:55 2018 +0000 Enable make test even without lmdb Bug: https://bugzilla.samba.org/show_bug.cgi?id=13630 Signed-off-by: Mathieu Parent <math.par...@gmail.com> Reviewed-by: Andrew Bartlett <abart...@samba.org> Reviewed-by: Garming Sam <garm...@catalyst.net.nz> ----------------------------------------------------------------------- Summary of changes: .../{ldb_lmdb_size_test.c => ldb_no_lmdb_test.c} | 70 +++------------------- lib/ldb/tests/python/api.py | 41 +++++++++++++ lib/ldb/tests/python/index.py | 4 ++ lib/ldb/wscript | 30 ++++++---- librpc/ndr/ndr_spoolss_buf.c | 4 +- source4/auth/sam.c | 4 +- 6 files changed, 78 insertions(+), 75 deletions(-) copy lib/ldb/tests/{ldb_lmdb_size_test.c => ldb_no_lmdb_test.c} (67%) Changeset truncated at 500 lines: diff --git a/lib/ldb/tests/ldb_lmdb_size_test.c b/lib/ldb/tests/ldb_no_lmdb_test.c similarity index 67% copy from lib/ldb/tests/ldb_lmdb_size_test.c copy to lib/ldb/tests/ldb_no_lmdb_test.c index af015fa72b5..8e5a6eee8d2 100644 --- a/lib/ldb/tests/ldb_lmdb_size_test.c +++ b/lib/ldb/tests/ldb_no_lmdb_test.c @@ -1,8 +1,7 @@ /* - * lmdb backend specific tests for ldb - * Tests for truncated index keys + * Ensure lmdb backend is disabled * - * Copyright (C) Andrew Bartlett <abart...@samba.org> 2018 + * Copyright (C) Mathieu Parent <math.par...@gmail.com> 2019 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,11 +19,9 @@ */ /* - * These tests confirm that database sizes of > 4GB are supported - * Due to the disk space requirement they are not run as part of the normal - * self test runs. + * Ensure lmdb backend is disabled * - * Setup and tear down code copied from ldb_mod_op_test.c + * Setup and tear down code copied from ldb_lmdb_test.c */ /* @@ -51,15 +48,6 @@ #include <talloc.h> #include <tevent.h> #include <ldb.h> -#include <ldb_module.h> -#include <ldb_private.h> -#include <string.h> -#include <ctype.h> - -#include <sys/wait.h> - -#include <lmdb.h> - #define TEST_BE "mdb" @@ -137,7 +125,7 @@ static int ldbtest_setup(void **state) ldbtest_noconn_setup((void **) &test_ctx); ret = ldb_connect(test_ctx->ldb, test_ctx->dbpath, 0, NULL); - assert_int_equal(ret, 0); + assert_int_equal(ret, LDB_ERR_OTHER); *state = test_ctx; return 0; @@ -151,57 +139,17 @@ static int ldbtest_teardown(void **state) return 0; } -static void test_db_size_gt_4GB(void **state) +static void test_ldb_lmdb_not_found(void **state) { - int ret, x; - struct ldb_message *msg; - struct ldbtest_ctx *test_ctx = talloc_get_type_abort(*state, - struct ldbtest_ctx); - const int MB = 1024 * 1024; - char *blob = NULL; - - TALLOC_CTX *tmp_ctx; - - tmp_ctx = talloc_new(test_ctx); - assert_non_null(tmp_ctx); - - - blob = talloc_zero_size(tmp_ctx, (MB + 1)); - assert_non_null(blob); - memset(blob, 'x', MB); - - - for (x = 0; x < 6144; x++) { - msg = ldb_msg_new(tmp_ctx); - assert_non_null(msg); - - msg->dn = ldb_dn_new_fmt(msg, test_ctx->ldb, "dc=test%d", x); - assert_non_null(msg->dn); - - ldb_transaction_start(test_ctx->ldb); - ret = ldb_msg_add_string(msg, "blob", blob); - assert_int_equal(ret, 0); - - ret = ldb_add(test_ctx->ldb, msg); - assert_int_equal(ret, 0); - ldb_transaction_commit(test_ctx->ldb); - - TALLOC_FREE(msg); - } - talloc_free(tmp_ctx); - { - struct stat s; - ret = stat(test_ctx->dbfile, &s); - assert_int_equal(ret, 0); - assert_true(s.st_size > (6144LL * MB)); - } + // Actual test in ldbtest_setup + assert_int_equal(0, 0); } int main(int argc, const char **argv) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown( - test_db_size_gt_4GB, + test_ldb_lmdb_not_found, ldbtest_setup, ldbtest_teardown), }; diff --git a/lib/ldb/tests/python/api.py b/lib/ldb/tests/python/api.py index e8826b5af3b..0c4e269239b 100755 --- a/lib/ldb/tests/python/api.py +++ b/lib/ldb/tests/python/api.py @@ -710,6 +710,8 @@ class SimpleLdb(LdbBaseTest): class SimpleLdbLmdb(SimpleLdb): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX self.index = MDB_INDEX_OBJ super(SimpleLdbLmdb, self).setUp() @@ -718,6 +720,29 @@ class SimpleLdbLmdb(SimpleLdb): super(SimpleLdbLmdb, self).tearDown() +class SimpleLdbNoLmdb(LdbBaseTest): + + def setUp(self): + if os.environ.get('HAVE_LMDB', '1') != '0': + self.skipTest("lmdb backend enabled") + self.prefix = MDB_PREFIX + self.index = MDB_INDEX_OBJ + super(SimpleLdbNoLmdb, self).setUp() + + def tearDown(self): + super(SimpleLdbNoLmdb, self).tearDown() + + def test_lmdb_disabled(self): + self.testdir = tempdir() + self.filename = os.path.join(self.testdir, "test.ldb") + try: + self.ldb = ldb.Ldb(self.url(), flags=self.flags()) + self.fail("Should have failed on missing LMDB") + except ldb.LdbError as err: + enum = err.args[0] + self.assertEqual(enum, ldb.LDB_ERR_OTHER) + + class SearchTests(LdbBaseTest): def tearDown(self): shutil.rmtree(self.testdir) @@ -1369,6 +1394,8 @@ class SearchTests(LdbBaseTest): class SearchTestsLmdb(SearchTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX self.index = MDB_INDEX_OBJ super(SearchTestsLmdb, self).setUp() @@ -1510,6 +1537,8 @@ class GUIDAndOneLevelIndexedSearchTests(SearchTests): class GUIDIndexedSearchTestsLmdb(GUIDIndexedSearchTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX super(GUIDIndexedSearchTestsLmdb, self).setUp() @@ -1520,6 +1549,8 @@ class GUIDIndexedSearchTestsLmdb(GUIDIndexedSearchTests): class GUIDIndexedDNFilterSearchTestsLmdb(GUIDIndexedDNFilterSearchTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX super(GUIDIndexedDNFilterSearchTestsLmdb, self).setUp() @@ -1530,6 +1561,8 @@ class GUIDIndexedDNFilterSearchTestsLmdb(GUIDIndexedDNFilterSearchTests): class GUIDAndOneLevelIndexedSearchTestsLmdb(GUIDAndOneLevelIndexedSearchTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX super(GUIDAndOneLevelIndexedSearchTestsLmdb, self).setUp() @@ -1740,6 +1773,8 @@ class AddModifyTests(LdbBaseTest): class AddModifyTestsLmdb(AddModifyTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX self.index = MDB_INDEX_OBJ super(AddModifyTestsLmdb, self).setUp() @@ -1868,6 +1903,8 @@ class TransIndexedAddModifyTests(IndexedAddModifyTests): class GuidIndexedAddModifyTestsLmdb(GUIDIndexedAddModifyTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX super(GuidIndexedAddModifyTestsLmdb, self).setUp() @@ -1878,6 +1915,8 @@ class GuidIndexedAddModifyTestsLmdb(GUIDIndexedAddModifyTests): class GuidTransIndexedAddModifyTestsLmdb(GUIDTransIndexedAddModifyTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX super(GuidTransIndexedAddModifyTestsLmdb, self).setUp() @@ -2933,6 +2972,8 @@ class LdbResultTests(LdbBaseTest): class LdbResultTestsLmdb(LdbResultTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX self.index = MDB_INDEX_OBJ super(LdbResultTestsLmdb, self).setUp() diff --git a/lib/ldb/tests/python/index.py b/lib/ldb/tests/python/index.py index 3652901888e..48dbaccfa56 100755 --- a/lib/ldb/tests/python/index.py +++ b/lib/ldb/tests/python/index.py @@ -1286,6 +1286,8 @@ class MaxIndexKeyLengthTests(LdbBaseTest): class MaxIndexKeyLengthTestsLmdb(MaxIndexKeyLengthTests): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX super(MaxIndexKeyLengthTestsLmdb, self).setUp() @@ -1297,6 +1299,8 @@ class MaxIndexKeyLengthTestsLmdb(MaxIndexKeyLengthTests): class RejectSubDBIndex(LdbBaseTest): def setUp(self): + if os.environ.get('HAVE_LMDB', '1') == '0': + self.skipTest("No lmdb backend") self.prefix = MDB_PREFIX super(RejectSubDBIndex, self).setUp() self.testdir = tempdir() diff --git a/lib/ldb/wscript b/lib/ldb/wscript index c59d4ead7b9..8f14b09b583 100644 --- a/lib/ldb/wscript +++ b/lib/ldb/wscript @@ -197,6 +197,7 @@ def configure(conf): if conf.CHECK_FUNCS_IN('mdb_env_create', 'lmdb', headers='lmdb.h'): conf.DEFINE('HAVE_LMDB', '1') + conf.env.HAVE_LMDB = True conf.DEFINE('HAVE_CONFIG_H', 1, add_to_cflags=True) @@ -539,21 +540,26 @@ def build(bld): cflags='-DTEST_BE=\"mdb\"', deps='cmocka ldb', install=False) + else: + bld.SAMBA_BINARY('ldb_no_lmdb_test', + source='tests/ldb_no_lmdb_test.c', + deps='cmocka ldb', + install=False) def test(ctx): '''run ldb testsuite''' env = samba_utils.LOAD_ENVIRONMENT() ctx.env = env - if not env.HAVE_LMDB: - raise Errors.WafError('make test called, but ldb was built ' - '--without-ldb-lmdb') - test_prefix = "%s/st" % (Context.g_module.out) shutil.rmtree(test_prefix, ignore_errors=True) os.makedirs(test_prefix) os.environ['TEST_DATA_PREFIX'] = test_prefix os.environ['LDB_MODULES_PATH'] = Context.g_module.out + "/modules/ldb" + if env.HAVE_LMDB: + os.environ['HAVE_LMDB'] = '1' + else: + os.environ['HAVE_LMDB'] = '0' samba_utils.ADD_LD_LIBRARY_PATH('bin/shared') samba_utils.ADD_LD_LIBRARY_PATH('bin/shared/private') @@ -578,14 +584,18 @@ def test(ctx): 'ldb_msg_test', 'ldb_tdb_kv_ops_test', 'ldb_tdb_test', - 'ldb_mdb_mod_op_test', - 'ldb_lmdb_test', - # we don't want to run ldb_lmdb_size_test (which proves we can - # fit > 4G of data into the DB), it would fill up the disk on - # many of our test instances - 'ldb_mdb_kv_ops_test', 'ldb_match_test'] + if env.HAVE_LMDB: + test_exes += ['ldb_mdb_mod_op_test', + 'ldb_lmdb_test', + # we don't want to run ldb_lmdb_size_test (which proves we can + # fit > 4G of data into the DB), it would fill up the disk on + # many of our test instances + 'ldb_mdb_kv_ops_test'] + else: + test_exes += ['ldb_no_lmdb_test'] + for test_exe in test_exes: cmd = os.path.join(Context.g_module.out, test_exe) cmocka_ret = cmocka_ret or samba_utils.RUN_COMMAND(cmd) diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c index c1d175fcbe5..244d692dca8 100644 --- a/librpc/ndr/ndr_spoolss_buf.c +++ b/librpc/ndr/ndr_spoolss_buf.c @@ -43,7 +43,8 @@ } while(0) #define NDR_SPOOLSS_PUSH_ENUM_OUT(fn) do { \ - struct ndr_push *_ndr_info;\ + DATA_BLOB _data_blob_info = data_blob_null;\ + struct ndr_push *_ndr_info = NULL;\ _r.in.level = r->in.level;\ _r.in.buffer = r->in.buffer;\ _r.in.offered = r->in.offered;\ @@ -56,7 +57,6 @@ "SPOOLSS Buffer: *r->out.info but there's no r->in.buffer");\ }\ if (r->in.buffer) {\ - DATA_BLOB _data_blob_info;\ _ndr_info = ndr_push_init_ctx(ndr);\ NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\ _ndr_info->flags= ndr->flags;\ diff --git a/source4/auth/sam.c b/source4/auth/sam.c index 709e901b45b..6c7fb221699 100644 --- a/source4/auth/sam.c +++ b/source4/auth/sam.c @@ -364,7 +364,7 @@ _PUBLIC_ NTSTATUS authsam_make_user_info_dc(TALLOC_CTX *mem_ctx, NT_STATUS_HAVE_NO_MEMORY(user_info_dc); tmp_ctx = talloc_new(user_info_dc); - if (user_info_dc == NULL) { + if (tmp_ctx == NULL) { TALLOC_FREE(user_info_dc); return NT_STATUS_NO_MEMORY; } @@ -377,7 +377,7 @@ _PUBLIC_ NTSTATUS authsam_make_user_info_dc(TALLOC_CTX *mem_ctx, num_sids = 2; - account_sid = samdb_result_dom_sid(user_info_dc, msg, "objectSid"); + account_sid = samdb_result_dom_sid(tmp_ctx, msg, "objectSid"); if (account_sid == NULL) { TALLOC_FREE(user_info_dc); return NT_STATUS_NO_MEMORY; -- Samba Shared Repository