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);