[SCM] Samba Shared Repository - branch master updated
Andrew Tridgell
tridge at samba.org
Thu Mar 31 05:38:03 MDT 2011
The branch, master has been updated
via 26ccb6d s4-dsdb: cope with failed searches in the linked attributes callback
via e395b5b s3-torture: a very simple test for convert_string_error()
from 6a9043d s3: Fix a typo
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 26ccb6d5ed88638dd3643632157771320cd8042a
Author: Andrew Tridgell <tridge at samba.org>
Date: Thu Mar 31 15:16:51 2011 +1100
s4-dsdb: cope with failed searches in the linked attributes callback
This fixes a bug where we try to add an empty backlink because the
search for the forward link failed.
Autobuild-User: Andrew Tridgell <tridge at samba.org>
Autobuild-Date: Thu Mar 31 13:37:36 CEST 2011 on sn-devel-104
commit e395b5bd3c8290ad400ed1389d3bd0ee0b28056f
Author: Andrew Tridgell <tridge at samba.org>
Date: Wed Mar 30 17:30:08 2011 +1100
s3-torture: a very simple test for convert_string_error()
this is a very simple test based on the example volker gave in
1e50f9a5. A more sophisticated test will also be worthwhile, but this
at least gives us a basic test while changes are being made
-----------------------------------------------------------------------
Summary of changes:
source3/selftest/tests.py | 2 +-
source3/torture/torture.c | 98 ++++++++++++++++++++
source4/dsdb/samdb/ldb_modules/linked_attributes.c | 31 +++---
3 files changed, 114 insertions(+), 17 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index 19ea34a..cf6f8a7 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -59,7 +59,7 @@ tests=[ "FDPASS", "LOCK1", "LOCK2", "LOCK3", "LOCK4", "LOCK5", "LOCK6", "LOCK7",
"TCON2", "IOCTL", "CHKPATH", "FDSESS", "LOCAL-SUBSTITUTE", "CHAIN1",
"GETADDRINFO", "POSIX", "UID-REGRESSION-TEST", "SHORTNAME-TEST",
"LOCAL-BASE64", "LOCAL-GENCACHE", "POSIX-APPEND",
- "LOCAL-string_to_sid" ]
+ "LOCAL-string_to_sid", "LOCAL-CONVERT-STRING" ]
for t in tests:
plantestsuite("samba3.smbtorture_s3.plain(dc).%s" % t, "dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', "", "-l $LOCAL_PATH"])
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index 175c217..87b03b4 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -7259,6 +7259,103 @@ static bool run_local_rbtree(int dummy)
return ret;
}
+
+/*
+ local test for character set functions
+
+ This is a very simple test for the functionality in convert_string_error()
+ */
+static bool run_local_convert_string(int dummy)
+{
+ TALLOC_CTX *tmp_ctx = talloc_new(NULL);
+ const char *test_strings[2] = { "March", "M\303\244rz" };
+ char dst[7];
+ int i;
+
+ for (i=0; i<2; i++) {
+ const char *str = test_strings[i];
+ int len = strlen(str);
+ size_t converted_size;
+ bool ret;
+
+ memset(dst, 'X', sizeof(dst));
+
+ /* first try with real source length */
+ ret = convert_string_error(CH_UNIX, CH_UTF8,
+ str, len,
+ dst, sizeof(dst),
+ &converted_size);
+ if (ret != true) {
+ d_fprintf(stderr, "Failed to convert '%s' to CH_DISPLAY\n", str);
+ goto failed;
+ }
+
+ if (converted_size != len) {
+ d_fprintf(stderr, "Converted size of '%s' should be %d - got %d\n",
+ str, len, (int)converted_size);
+ goto failed;
+ }
+
+ if (strncmp(str, dst, converted_size) != 0) {
+ d_fprintf(stderr, "Expected '%s' to match '%s'\n", str, dst);
+ goto failed;
+ }
+
+ if (strlen(str) != converted_size) {
+ d_fprintf(stderr, "Expected '%s' length %d - got %d\n", str,
+ (int)strlen(str), (int)converted_size);
+ goto failed;
+ }
+
+ if (dst[converted_size] != 'X') {
+ d_fprintf(stderr, "Expected no termination of '%s'\n", dst);
+ goto failed;
+ }
+
+ /* now with srclen==-1, this causes the nul to be
+ * converted too */
+ ret = convert_string_error(CH_UNIX, CH_UTF8,
+ str, -1,
+ dst, sizeof(dst),
+ &converted_size);
+ if (ret != true) {
+ d_fprintf(stderr, "Failed to convert '%s' to CH_DISPLAY\n", str);
+ goto failed;
+ }
+
+ if (converted_size != len+1) {
+ d_fprintf(stderr, "Converted size of '%s' should be %d - got %d\n",
+ str, len, (int)converted_size);
+ goto failed;
+ }
+
+ if (strncmp(str, dst, converted_size) != 0) {
+ d_fprintf(stderr, "Expected '%s' to match '%s'\n", str, dst);
+ goto failed;
+ }
+
+ if (len+1 != converted_size) {
+ d_fprintf(stderr, "Expected '%s' length %d - got %d\n", str,
+ len+1, (int)converted_size);
+ goto failed;
+ }
+
+ if (dst[converted_size] != 'X') {
+ d_fprintf(stderr, "Expected no termination of '%s'\n", dst);
+ goto failed;
+ }
+
+ }
+
+
+ TALLOC_FREE(tmp_ctx);
+ return true;
+failed:
+ TALLOC_FREE(tmp_ctx);
+ return false;
+}
+
+
struct talloc_dict_test {
int content;
};
@@ -8176,6 +8273,7 @@ static struct {
{ "LOCAL-binary_to_sid", run_local_binary_to_sid, 0},
{ "LOCAL-DBTRANS", run_local_dbtrans, 0},
{ "LOCAL-TEVENT-SELECT", run_local_tevent_select, 0},
+ { "LOCAL-CONVERT-STRING", run_local_convert_string, 0},
{NULL, NULL, 0}};
diff --git a/source4/dsdb/samdb/ldb_modules/linked_attributes.c b/source4/dsdb/samdb/ldb_modules/linked_attributes.c
index 393f00f..6948800 100644
--- a/source4/dsdb/samdb/ldb_modules/linked_attributes.c
+++ b/source4/dsdb/samdb/ldb_modules/linked_attributes.c
@@ -45,7 +45,6 @@ struct la_op_store {
enum la_op {LA_OP_ADD, LA_OP_DEL} op;
struct GUID guid;
char *name;
- char *value;
};
struct replace_context {
@@ -59,8 +58,7 @@ struct la_context {
const struct dsdb_schema *schema;
struct ldb_module *module;
struct ldb_request *req;
- struct ldb_dn *add_dn;
- struct ldb_dn *del_dn;
+ struct ldb_dn *mod_dn;
struct replace_context *rc;
struct la_op_store *ops;
struct ldb_extended *op_response;
@@ -319,7 +317,7 @@ static int la_mod_search_callback(struct ldb_request *req, struct ldb_reply *are
LDB_ERR_OPERATIONS_ERROR);
}
- ac->add_dn = ac->del_dn = talloc_steal(ac, ares->message->dn);
+ ac->mod_dn = talloc_steal(ac, ares->message->dn);
/* We don't populate 'rc' for ADD - it can't be deleting elements anyway */
for (i = 0; rc && i < rc->num_elements; i++) {
@@ -572,9 +570,9 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques
/* We need to figure out our own extended DN, to fill in as the backlink target */
if (ret == LDB_SUCCESS) {
- ret = ldb_request_add_control(search_req,
- LDB_CONTROL_EXTENDED_DN_OID,
- false, NULL);
+ ret = dsdb_request_add_controls(search_req,
+ DSDB_SEARCH_SHOW_DELETED |
+ DSDB_SEARCH_SHOW_EXTENDED_DN);
}
if (ret == LDB_SUCCESS) {
talloc_steal(search_req, attrs);
@@ -867,9 +865,9 @@ static int la_add_callback(struct ldb_request *req, struct ldb_reply *ares)
LDB_REQ_SET_LOCATION(search_req);
if (ret == LDB_SUCCESS) {
- ret = ldb_request_add_control(search_req,
- LDB_CONTROL_EXTENDED_DN_OID,
- false, NULL);
+ ret = dsdb_request_add_controls(search_req,
+ DSDB_SEARCH_SHOW_DELETED |
+ DSDB_SEARCH_SHOW_EXTENDED_DN);
}
if (ret != LDB_SUCCESS) {
return ldb_module_done(ac->req, NULL, NULL,
@@ -941,6 +939,11 @@ static int la_do_op_request(struct ldb_module *module, struct la_context *ac, st
struct ldb_context *ldb;
int ret;
+ if (ac->mod_dn == NULL) {
+ /* we didn't find the DN that we searched for */
+ return LDB_SUCCESS;
+ }
+
ldb = ldb_module_get_ctx(ac->module);
/* Create the modify request */
@@ -969,11 +972,7 @@ static int la_do_op_request(struct ldb_module *module, struct la_context *ac, st
return ldb_oom(ldb);
}
ret_el->num_values = 1;
- if (op->op == LA_OP_ADD) {
- ret_el->values[0] = data_blob_string_const(ldb_dn_get_extended_linearized(new_msg, ac->add_dn, 1));
- } else {
- ret_el->values[0] = data_blob_string_const(ldb_dn_get_extended_linearized(new_msg, ac->del_dn, 1));
- }
+ ret_el->values[0] = data_blob_string_const(ldb_dn_get_extended_linearized(new_msg, ac->mod_dn, 1));
/* a backlink should never be single valued. Unfortunately the
exchange schema has a attribute
@@ -996,7 +995,7 @@ static int la_do_op_request(struct ldb_module *module, struct la_context *ac, st
ret = dsdb_module_modify(module, new_msg, DSDB_FLAG_NEXT_MODULE, ac->req);
if (ret != LDB_SUCCESS) {
- ldb_debug(ldb, LDB_DEBUG_WARNING, "Failed to apply linked attribute change '%s'\n%s\n",
+ ldb_debug(ldb, LDB_DEBUG_WARNING, __location__ ": failed to apply linked attribute change '%s'\n%s\n",
ldb_errstring(ldb),
ldb_ldif_message_string(ldb, op, LDB_CHANGETYPE_MODIFY, new_msg));
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list