[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-1457-ga8e8a31
Andrew Tridgell
tridge at samba.org
Tue Sep 8 05:56:59 MDT 2009
The branch, master has been updated
via a8e8a3161164ec469d65d7489d2f71fdc288a131 (commit)
via 6d1d33319ced87c9741983302cf42a4841d688de (commit)
via 237f720e6c116b0e07bd20fb90ce19680ad36d3c (commit)
via 206d79ac514823f1c8f33489b740439df79189b6 (commit)
via 29ba7765d90eda0b3d0f45f7a970272f0ef2ab2f (commit)
from 5b2b5abf4f630c28dc5f018ecced3894ae66f491 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit a8e8a3161164ec469d65d7489d2f71fdc288a131
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Sep 8 21:55:56 2009 +1000
s4/ldb: allow printing ntSecurityDescriptor in full
print security descriptors in NDR format if --show-binary is
given. This is easier to read than sddl format.
commit 6d1d33319ced87c9741983302cf42a4841d688de
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Sep 8 21:45:08 2009 +1000
s4/ldb: added ldif handler for repsFrom/repsTo
In normal usage this makes no difference, but if you add --show-binary
then you can see the NDR printed out in the usual ndr_print_*() format
commit 237f720e6c116b0e07bd20fb90ce19680ad36d3c
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Sep 8 21:39:33 2009 +1000
s4/ldb: expose the ldb flags with ldb_get_flags()
commit 206d79ac514823f1c8f33489b740439df79189b6
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Sep 8 21:39:09 2009 +1000
s4/ldb: don't line wrap ldif when --show-binary is used
commit 29ba7765d90eda0b3d0f45f7a970272f0ef2ab2f
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Sep 8 20:57:31 2009 +1000
s4/ldb: added --show-binary command line option
This add --show-binary to ldbsearch. When this flag is set, binary
blobs will be shown as-is, instead of base64 encoded. This is useful
for some XML encoded attributes, and will also be used as part of some
NDR print formatting for attributes like repsTo.
-----------------------------------------------------------------------
Summary of changes:
source4/lib/ldb-samba/ldif_handlers.c | 66 +++++++++++++++++++++++++++++++-
source4/lib/ldb-samba/ldif_handlers.h | 1 +
source4/lib/ldb/common/ldb.c | 6 +++
source4/lib/ldb/common/ldb_ldif.c | 21 +++++++---
source4/lib/ldb/include/ldb.h | 11 +++++
source4/lib/ldb/include/ldb_module.h | 2 +-
source4/lib/ldb/ldb_tdb/ldb_index.c | 2 +-
source4/lib/ldb/tools/cmdline.c | 5 ++
source4/lib/ldb/tools/cmdline.h | 1 +
9 files changed, 104 insertions(+), 11 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source4/lib/ldb-samba/ldif_handlers.c b/source4/lib/ldb-samba/ldif_handlers.c
index 7086430..6927576 100644
--- a/source4/lib/ldb-samba/ldif_handlers.c
+++ b/source4/lib/ldb-samba/ldif_handlers.c
@@ -30,10 +30,42 @@
#include "librpc/gen_ndr/ndr_security.h"
#include "librpc/gen_ndr/ndr_misc.h"
#include "librpc/gen_ndr/ndr_drsblobs.h"
+#include "librpc/ndr/libndr.h"
#include "libcli/security/security.h"
#include "param/param.h"
/*
+ use ndr_print_* to convert a NDR formatted blob to a ldif formatted blob
+*/
+static int ldif_write_NDR(struct ldb_context *ldb, void *mem_ctx,
+ const struct ldb_val *in, struct ldb_val *out,
+ size_t struct_size,
+ ndr_pull_flags_fn_t pull_fn,
+ ndr_print_fn_t print_fn)
+{
+ uint8_t *p;
+ enum ndr_err_code err;
+ if (!(ldb_get_flags(ldb) & LDB_FLG_SHOW_BINARY)) {
+ return ldb_handler_copy(ldb, mem_ctx, in, out);
+ }
+ p = talloc_size(mem_ctx, struct_size);
+ err = ndr_pull_struct_blob(in, mem_ctx,
+ lp_iconv_convenience(ldb_get_opaque(ldb, "loadparm")),
+ p, pull_fn);
+ if (err != NDR_ERR_SUCCESS) {
+ talloc_free(p);
+ return ldb_handler_copy(ldb, mem_ctx, in, out);
+ }
+ out->data = (uint8_t *)ndr_print_struct_string(mem_ctx, print_fn, "NDR", p);
+ talloc_free(p);
+ if (out->data == NULL) {
+ return ldb_handler_copy(ldb, mem_ctx, in, out);
+ }
+ out->length = strlen((char *)out->data);
+ return 0;
+}
+
+/*
convert a ldif formatted objectSid to a NDR formatted blob
*/
static int ldif_read_objectSid(struct ldb_context *ldb, void *mem_ctx,
@@ -314,7 +346,6 @@ static int ldif_read_ntSecurityDescriptor(struct ldb_context *ldb, void *mem_ctx
const struct ldb_val *in, struct ldb_val *out)
{
struct security_descriptor *sd;
-
enum ndr_err_code ndr_err;
sd = talloc(mem_ctx, struct security_descriptor);
@@ -354,6 +385,14 @@ static int ldif_write_ntSecurityDescriptor(struct ldb_context *ldb, void *mem_ct
struct security_descriptor *sd;
enum ndr_err_code ndr_err;
+ if (ldb_get_flags(ldb) & LDB_FLG_SHOW_BINARY) {
+ return ldif_write_NDR(ldb, mem_ctx, in, out,
+ sizeof(struct security_descriptor),
+ (ndr_pull_flags_fn_t)ndr_pull_security_descriptor,
+ (ndr_print_fn_t)ndr_print_security_descriptor);
+
+ }
+
sd = talloc(mem_ctx, struct security_descriptor);
if (sd == NULL) {
return -1;
@@ -673,6 +712,19 @@ static int ldif_comparison_int32(struct ldb_context *ldb, void *mem_ctx,
- (int32_t) strtoll((char *)v2->data, NULL, 0);
}
+/*
+ convert a NDR formatted blob to a ldif formatted repsFromTo
+*/
+static int ldif_write_repsFromTo(struct ldb_context *ldb, void *mem_ctx,
+ const struct ldb_val *in, struct ldb_val *out)
+{
+ return ldif_write_NDR(ldb, mem_ctx, in, out,
+ sizeof(struct repsFromToBlob),
+ (ndr_pull_flags_fn_t)ndr_pull_repsFromToBlob,
+ (ndr_print_fn_t)ndr_print_repsFromToBlob);
+}
+
+
static int extended_dn_write_hex(struct ldb_context *ldb, void *mem_ctx,
const struct ldb_val *in, struct ldb_val *out)
{
@@ -720,7 +772,13 @@ static const struct ldb_schema_syntax samba_syntaxes[] = {
.ldif_write_fn = ldb_handler_copy,
.canonicalise_fn = ldif_canonicalise_int32,
.comparison_fn = ldif_comparison_int32
- }
+ },{
+ .name = LDB_SYNTAX_SAMBA_REPSFROMTO,
+ .ldif_read_fn = ldb_handler_copy,
+ .ldif_write_fn = ldif_write_repsFromTo,
+ .canonicalise_fn = ldb_handler_copy,
+ .comparison_fn = ldb_comparison_binary
+ },
};
static const struct ldb_dn_extended_syntax samba_dn_syntax[] = {
@@ -761,7 +819,9 @@ static const struct {
{ "fRSReplicaSetGUID", LDB_SYNTAX_SAMBA_GUID },
{ "netbootGUID", LDB_SYNTAX_SAMBA_GUID },
{ "objectCategory", LDB_SYNTAX_SAMBA_OBJECT_CATEGORY },
- { "prefixMap", LDB_SYNTAX_SAMBA_PREFIX_MAP }
+ { "prefixMap", LDB_SYNTAX_SAMBA_PREFIX_MAP },
+ { "repsFrom", LDB_SYNTAX_SAMBA_REPSFROMTO },
+ { "repsTo", LDB_SYNTAX_SAMBA_REPSFROMTO },
};
const struct ldb_schema_syntax *ldb_samba_syntax_by_name(struct ldb_context *ldb, const char *name)
diff --git a/source4/lib/ldb-samba/ldif_handlers.h b/source4/lib/ldb-samba/ldif_handlers.h
index 3e1f17e..839525e 100644
--- a/source4/lib/ldb-samba/ldif_handlers.h
+++ b/source4/lib/ldb-samba/ldif_handlers.h
@@ -7,6 +7,7 @@
#define LDB_SYNTAX_SAMBA_OBJECT_CATEGORY "LDB_SYNTAX_SAMBA_OBJECT_CATEGORY"
#define LDB_SYNTAX_SAMBA_PREFIX_MAP "LDB_SYNTAX_SAMBA_PREFIX_MAP"
#define LDB_SYNTAX_SAMBA_INT32 "LDB_SYNTAX_SAMBA_INT32"
+#define LDB_SYNTAX_SAMBA_REPSFROMTO "LDB_SYNTAX_SAMBA_REPSFROMTO"
#include "lib/ldb-samba/ldif_handlers_proto.h"
diff --git a/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c
index dc30326..6939cef 100644
--- a/source4/lib/ldb/common/ldb.c
+++ b/source4/lib/ldb/common/ldb.c
@@ -1467,3 +1467,9 @@ int ldb_global_init(void)
/* Provided for compatibility with some older versions of ldb */
return 0;
}
+
+/* return the ldb flags */
+unsigned int ldb_get_flags(struct ldb_context *ldb)
+{
+ return ldb->flags;
+}
diff --git a/source4/lib/ldb/common/ldb_ldif.c b/source4/lib/ldb/common/ldb_ldif.c
index 83f08b6..cde2132 100644
--- a/source4/lib/ldb/common/ldb_ldif.c
+++ b/source4/lib/ldb/common/ldb_ldif.c
@@ -185,11 +185,15 @@ char *ldb_base64_encode(void *mem_ctx, const char *buf, int len)
/*
see if a buffer should be base64 encoded
*/
-int ldb_should_b64_encode(const struct ldb_val *val)
+int ldb_should_b64_encode(struct ldb_context *ldb, const struct ldb_val *val)
{
unsigned int i;
uint8_t *p = val->data;
+ if (ldb->flags & LDB_FLG_SHOW_BINARY) {
+ return 0;
+ }
+
if (val->length == 0) {
return 0;
}
@@ -333,7 +337,7 @@ int ldb_ldif_write(struct ldb_context *ldb,
if (ret != LDB_SUCCESS) {
v = msg->elements[i].values[j];
}
- if (ret != LDB_SUCCESS || ldb_should_b64_encode(&v)) {
+ if (ret != LDB_SUCCESS || ldb_should_b64_encode(ldb, &v)) {
ret = fprintf_fn(private_data, "%s:: ",
msg->elements[i].name);
CHECK_RET;
@@ -346,9 +350,14 @@ int ldb_ldif_write(struct ldb_context *ldb,
} else {
ret = fprintf_fn(private_data, "%s: ", msg->elements[i].name);
CHECK_RET;
- ret = fold_string(fprintf_fn, private_data,
- (char *)v.data, v.length,
- strlen(msg->elements[i].name)+2);
+ if (ldb->flags & LDB_FLG_SHOW_BINARY) {
+ ret = fprintf_fn(private_data, "%*.*s",
+ v.length, v.length, (char *)v.data);
+ } else {
+ ret = fold_string(fprintf_fn, private_data,
+ (char *)v.data, v.length,
+ strlen(msg->elements[i].name)+2);
+ }
CHECK_RET;
ret = fprintf_fn(private_data, "\n");
CHECK_RET;
@@ -811,7 +820,7 @@ char *ldb_ldif_message_string(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
struct ldb_ldif ldif;
ldif.changetype = changetype;
- ldif.msg = msg;
+ ldif.msg = discard_const_p(struct ldb_message, msg);
return ldb_ldif_write_string(ldb, mem_ctx, &ldif);
}
diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h
index f38dc8f..04b0a22 100644
--- a/source4/lib/ldb/include/ldb.h
+++ b/source4/lib/ldb/include/ldb.h
@@ -240,6 +240,12 @@ struct ldb_utf8_fns {
*/
#define LDB_FLG_NOMMAP 8
+/**
+ Flag to tell ldif handlers not to force encoding of binary
+ structures in base64
+*/
+#define LDB_FLG_SHOW_BINARY 16
+
/*
structures for ldb_parse_tree handling code
*/
@@ -1892,4 +1898,9 @@ void ldb_qsort (void *const pbase, size_t total_elems, size_t size, void *opaque
*/
struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, const char **control_strings);
+/**
+ return the ldb flags
+*/
+unsigned int ldb_get_flags(struct ldb_context *ldb);
+
#endif
diff --git a/source4/lib/ldb/include/ldb_module.h b/source4/lib/ldb/include/ldb_module.h
index 1d6329c..199c0bb 100644
--- a/source4/lib/ldb/include/ldb_module.h
+++ b/source4/lib/ldb/include/ldb_module.h
@@ -102,7 +102,7 @@ int save_controls(struct ldb_control *exclude, struct ldb_request *req, struct l
int check_critical_controls(struct ldb_control **controls);
/* The following definitions come from lib/ldb/common/ldb_ldif.c */
-int ldb_should_b64_encode(const struct ldb_val *val);
+int ldb_should_b64_encode(struct ldb_context *ldb, const struct ldb_val *val);
/* The following definitions come from lib/ldb/common/ldb_match.c */
int ldb_match_msg(struct ldb_context *ldb,
diff --git a/source4/lib/ldb/ldb_tdb/ldb_index.c b/source4/lib/ldb/ldb_tdb/ldb_index.c
index 7db22de..85fbfa0 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_index.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_index.c
@@ -455,7 +455,7 @@ static struct ldb_dn *ltdb_index_key(struct ldb_context *ldb,
talloc_free(attr_folded);
return NULL;
}
- if (ldb_should_b64_encode(&v)) {
+ if (ldb_should_b64_encode(ldb, &v)) {
char *vstr = ldb_base64_encode(ldb, (char *)v.data, v.length);
if (!vstr) return NULL;
ret = ldb_dn_new_fmt(ldb, ldb, "%s:%s::%s", LTDB_INDEX, attr_folded, vstr);
diff --git a/source4/lib/ldb/tools/cmdline.c b/source4/lib/ldb/tools/cmdline.c
index b6c1de3..8541106 100644
--- a/source4/lib/ldb/tools/cmdline.c
+++ b/source4/lib/ldb/tools/cmdline.c
@@ -56,6 +56,7 @@ static struct poptOption popt_options[] = {
{ "output", 'O', POPT_ARG_STRING, &options.output, 0, "Output File", "Output" },
{ NULL, 'o', POPT_ARG_STRING, NULL, 'o', "ldb_connect option", "OPTION" },
{ "controls", 0, POPT_ARG_STRING, NULL, 'c', "controls", NULL },
+ { "show-binary", 0, POPT_ARG_NONE, &options.show_binary, 0, "display binary LDIF", NULL },
#if (_SAMBA_BUILD_ >= 4)
POPT_COMMON_SAMBA
POPT_COMMON_CREDENTIALS
@@ -215,6 +216,10 @@ struct ldb_cmdline *ldb_cmdline_process(struct ldb_context *ldb,
flags |= LDB_FLG_NOSYNC;
}
+ if (options.show_binary) {
+ flags |= LDB_FLG_SHOW_BINARY;
+ }
+
#if (_SAMBA_BUILD_ >= 4)
/* Must be after we have processed command line options */
gensec_init(cmdline_lp_ctx);
diff --git a/source4/lib/ldb/tools/cmdline.h b/source4/lib/ldb/tools/cmdline.h
index 4decf45..9f728fb 100644
--- a/source4/lib/ldb/tools/cmdline.h
+++ b/source4/lib/ldb/tools/cmdline.h
@@ -44,6 +44,7 @@ struct ldb_cmdline {
const char *input;
const char *output;
char **controls;
+ int show_binary;
};
struct ldb_cmdline *ldb_cmdline_process(struct ldb_context *ldb, int argc, const char **argv,
--
Samba Shared Repository
More information about the samba-cvs
mailing list