diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-08-18 11:15:15 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:33:31 -0500 |
commit | 6195932b4241d94453438a857179debc08495ece (patch) | |
tree | b1d12a8ca2e8592bb7564b685d2dfddfeea728ee /source4/lib | |
parent | 6c1dde71f4ace7901fa13347ef9ced0ac8b16233 (diff) | |
download | samba-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/lib')
-rw-r--r-- | source4/lib/ldb/common/ldb_dn.c | 2 | ||||
-rw-r--r-- | source4/lib/ldb/include/ldb.h | 1 | ||||
-rw-r--r-- | source4/lib/registry/reg_backend_ldb.c | 18 |
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'; |