From f721f27da5f9ebb41639b70986ad1acb83206ed6 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 5 Feb 2016 13:55:31 +0100 Subject: [PATCH] ldb: add LDB_ATTR_FLAG_FORCE_BASE64_LDIF support This can be used to force ldb_write_ldif() to use base64 for a specific attribute. Signed-off-by: Stefan Metzmacher Reviewed-by: Garming Sam Reviewed-by: Andrew Bartlett --- lib/ldb/common/ldb_ldif.c | 14 +++++++++++--- lib/ldb/include/ldb.h | 5 +++++ lib/ldb/pyldb.c | 5 +++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/ldb/common/ldb_ldif.c b/lib/ldb/common/ldb_ldif.c index 07de5179ba7..0aeda94beac 100644 --- a/lib/ldb/common/ldb_ldif.c +++ b/lib/ldb/common/ldb_ldif.c @@ -348,13 +348,21 @@ static int ldb_ldif_write_trace(struct ldb_context *ldb, for (j=0;jelements[i].num_values;j++) { struct ldb_val v; - bool use_b64_encode; + bool use_b64_encode = false; + ret = a->syntax->ldif_write_fn(ldb, mem_ctx, &msg->elements[i].values[j], &v); if (ret != LDB_SUCCESS) { v = msg->elements[i].values[j]; } - use_b64_encode = !(ldb->flags & LDB_FLG_SHOW_BINARY) - && ldb_should_b64_encode(ldb, &v); + + if (ldb->flags & LDB_FLG_SHOW_BINARY) { + use_b64_encode = false; + } else if (a->flags & LDB_ATTR_FLAG_FORCE_BASE64_LDIF) { + use_b64_encode = true; + } else { + use_b64_encode = ldb_should_b64_encode(ldb, &v); + } + if (ret != LDB_SUCCESS || use_b64_encode) { ret = fprintf_fn(private_data, "%s:: ", msg->elements[i].name); diff --git a/lib/ldb/include/ldb.h b/lib/ldb/include/ldb.h index f48f7537d27..dc0ce42595d 100644 --- a/lib/ldb/include/ldb.h +++ b/lib/ldb/include/ldb.h @@ -422,6 +422,11 @@ const struct ldb_dn_extended_syntax *ldb_dn_extended_syntax_by_name(struct ldb_c */ #define LDB_ATTR_FLAG_SINGLE_VALUE (1<<4) +/* + * The values should always be base64 encoded + */ +#define LDB_ATTR_FLAG_FORCE_BASE64_LDIF (1<<5) + /** LDAP attribute syntax for a DN diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c index eb0bf573e5f..bea837f210e 100644 --- a/lib/ldb/pyldb.c +++ b/lib/ldb/pyldb.c @@ -4147,6 +4147,11 @@ static PyObject* module_init(void) ADD_LDB_INT(FLAG_MOD_REPLACE); ADD_LDB_INT(FLAG_MOD_DELETE); + ADD_LDB_INT(ATTR_FLAG_HIDDEN); + ADD_LDB_INT(ATTR_FLAG_UNIQUE_INDEX); + ADD_LDB_INT(ATTR_FLAG_SINGLE_VALUE); + ADD_LDB_INT(ATTR_FLAG_FORCE_BASE64_LDIF); + ADD_LDB_INT(SUCCESS); ADD_LDB_INT(ERR_OPERATIONS_ERROR); ADD_LDB_INT(ERR_PROTOCOL_ERROR); -- 2.47.3