diff options
author | Simo Sorce <idra@samba.org> | 2006-01-06 21:39:37 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:49:49 -0500 |
commit | 528470d4a74b1e2068fdc98b62076e8b19db47fc (patch) | |
tree | 10350ce3be2d45c795ade94e5731f9f12f96ab8f | |
parent | 66700b484f674d66692f4a5a498f511f69db7faa (diff) | |
download | samba-528470d4a74b1e2068fdc98b62076e8b19db47fc.tar.gz samba-528470d4a74b1e2068fdc98b62076e8b19db47fc.tar.bz2 samba-528470d4a74b1e2068fdc98b62076e8b19db47fc.zip |
r12748: Fix wrong handling of separation characters for RDNs
allow escaped separation chars as part of the attr value
of an RDN
(This used to be commit 7ba341d6c3745cd99c4c79933f9bd54f41e12a9c)
-rw-r--r-- | source4/lib/ldb/common/ldb_dn.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/source4/lib/ldb/common/ldb_dn.c b/source4/lib/ldb/common/ldb_dn.c index 5ed54ae316..4164814f4f 100644 --- a/source4/lib/ldb/common/ldb_dn.c +++ b/source4/lib/ldb/common/ldb_dn.c @@ -214,8 +214,8 @@ failed: static char *seek_to_separator(char *string, const char *separators) { - char *p; - int ret, qs, qe; + char *p, *q; + int ret, qs, qe, escaped; if (string == NULL || separators == NULL) return NULL; @@ -242,11 +242,21 @@ static char *seek_to_separator(char *string, const char *separators) } /* no quotes found seek to separators */ - ret = strcspn(p, separators); - if (ret == 0) /* no separators ?! bail out */ + q = p; + do { + escaped = 0; + ret = strcspn(q, separators); + + if (q[ret - 1] == '\\') { + escaped = 1; + q = q + ret + 1; + } + } while (escaped); + + if (ret == 0 && p == q) /* no separators ?! bail out */ return NULL; - return p + ret; + return q + ret; failed: return NULL; |