summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-08-18 11:15:15 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:33:31 -0500
commit6195932b4241d94453438a857179debc08495ece (patch)
treeb1d12a8ca2e8592bb7564b685d2dfddfeea728ee /source4
parent6c1dde71f4ace7901fa13347ef9ced0ac8b16233 (diff)
downloadsamba-6195932b4241d94453438a857179debc08495ece.tar.gz
samba-6195932b4241d94453438a857179debc08495ece.tar.bz2
samba-6195932b4241d94453438a857179debc08495ece.zip
r9387: regedit uses "New Key #nn" for newly created keys, which conflicts with the stricter
DN rules in ldb. Escape the DN components to cope. Simo, sorry for making a change in ldb_dn.c while you have changes pending. Please feel free to revert these and switch reg_backend_ldb.c to use the new dn construction code. (This used to be commit 136ecf5cb23758558b4119b08047fc273be8b0f8)
Diffstat (limited to 'source4')
-rw-r--r--source4/lib/ldb/common/ldb_dn.c2
-rw-r--r--source4/lib/ldb/include/ldb.h1
-rw-r--r--source4/lib/registry/reg_backend_ldb.c18
3 files changed, 17 insertions, 4 deletions
diff --git a/source4/lib/ldb/common/ldb_dn.c b/source4/lib/ldb/common/ldb_dn.c
index 5dcb540fa1..d13238cc17 100644
--- a/source4/lib/ldb/common/ldb_dn.c
+++ b/source4/lib/ldb/common/ldb_dn.c
@@ -56,7 +56,7 @@ static int ldb_dn_is_valid_attribute_name(const char *name)
return 1;
}
-static char *ldb_dn_escape_value(void *mem_ctx, struct ldb_val value)
+char *ldb_dn_escape_value(void *mem_ctx, struct ldb_val value)
{
const char *p, *s, *src;
char *d, *dst;
diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h
index 7399b8ffe7..fdf5dc8d91 100644
--- a/source4/lib/ldb/include/ldb.h
+++ b/source4/lib/ldb/include/ldb.h
@@ -342,6 +342,7 @@ int ldb_attrib_add_handlers(struct ldb_context *ldb,
int ldb_dn_cmp(struct ldb_context *ldb, const char *dn1, const char *dn2);
int ldb_attr_cmp(const char *dn1, const char *dn2);
+char *ldb_dn_escape_value(void *mem_ctx, struct ldb_val value);
/* case-fold a DN */
char *ldb_dn_fold(void * mem_ctx,
diff --git a/source4/lib/registry/reg_backend_ldb.c b/source4/lib/registry/reg_backend_ldb.c
index 784d8ac6fa..114614597f 100644
--- a/source4/lib/registry/reg_backend_ldb.c
+++ b/source4/lib/registry/reg_backend_ldb.c
@@ -126,12 +126,24 @@ static char *reg_path_to_ldb(TALLOC_CTX *mem_ctx, struct registry_key *from, con
while(mypath) {
char *keyname;
begin = strrchr(mypath, '\\');
+ struct ldb_val val;
+ char *key;
- if(begin) keyname = begin + 1;
+ if (begin) keyname = begin + 1;
else keyname = mypath;
- if(strlen(keyname))
- ret = talloc_asprintf_append(ret, "key=%s,", keyname);
+ val.data = keyname;
+ val.length = strlen(keyname);
+
+ key = ldb_dn_escape_value(mem_ctx, val);
+ if (key == NULL) {
+ return NULL;
+ }
+
+ if (strlen(key))
+ ret = talloc_asprintf_append(ret, "key=%s,", key);
+
+ talloc_free(key);
if(begin) {
*begin = '\0';