ldb: add LDB_ATTR_FLAG_FORCE_BASE64_LDIF support
authorStefan Metzmacher <metze@samba.org>
Fri, 5 Feb 2016 12:55:31 +0000 (13:55 +0100)
committerGarming Sam <garming@samba.org>
Wed, 17 Feb 2016 02:43:23 +0000 (03:43 +0100)
This can be used to force ldb_write_ldif() to use base64 for
a specific attribute.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/ldb/common/ldb_ldif.c
lib/ldb/include/ldb.h
lib/ldb/pyldb.c

index 07de5179ba7dff151ed9ef4d4e2fa5e9ee8b2a34..0aeda94beac64a568d4345ee5d824b44c7f14385 100644 (file)
@@ -348,13 +348,21 @@ static int ldb_ldif_write_trace(struct ldb_context *ldb,
 
                for (j=0;j<msg->elements[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);
index f48f7537d27b1e36c9986f1f40ce7aca7111313a..dc0ce42595d6f7cd82383cb9720fde06488994b9 100644 (file)
@@ -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
 
index eb0bf573e5f7f5e667ed6f6c27f6b854f840e166..bea837f210e0bf04ca6d57c4dc1c1794bfde472d 100644 (file)
@@ -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);