#define LDB_DN_NULL_FAILED(x) if (!(x)) goto failed
+static int ldb_dn_is_valid_attribute_name(const char *name)
+{
+ while (*name) {
+ if (! isascii(*name)) {
+ return 0;
+ }
+ if (! (isalnum(*name) || *name == '-')) {
+ return 0;
+ }
+ name++;
+ }
+
+ return 1;
+}
+
static char *ldb_dn_escape_value(void *mem_ctx, struct ldb_val value)
{
const char *p, *s, *src;
if (!dc.name)
return dc;
+ if (! ldb_dn_is_valid_attribute_name(dc.name)) {
+ goto failed;
+ }
+
ret = get_quotes_position(p, &qs, &qe);
switch (ret) {