continue;
if ( patlen > 0 ) {
- if ( !NDN_SEPARATOR( e->e_ndn[dnlen - patlen - 1] ) )
+ if ( !DN_SEPARATOR( e->e_ndn[dnlen - patlen - 1] ) )
continue;
sep = 1;
}
continue;
} else if ( a->acl_dn_style == ACL_STYLE_SUBTREE ) {
- if ( dnlen > patlen && !NDN_SEPARATOR( e->e_ndn[dnlen - patlen - 1] ) )
+ if ( dnlen > patlen && !DN_SEPARATOR( e->e_ndn[dnlen - patlen - 1] ) )
continue;
} else if ( a->acl_dn_style == ACL_STYLE_CHILDREN ) {
if ( dnlen <= patlen )
continue;
- if ( !NDN_SEPARATOR( e->e_ndn[dnlen - patlen - 1] ) )
+ if ( !DN_SEPARATOR( e->e_ndn[dnlen - patlen - 1] ) )
continue;
}
} else if ( a->acl_dn_style == ACL_STYLE_ONE ) {
int rdnlen = -1;
- if ( !NDN_SEPARATOR( val->bv_val[vdnlen - patlen - 1] ) )
+ if ( !DN_SEPARATOR( val->bv_val[vdnlen - patlen - 1] ) )
continue;
rdnlen = dn_rdnlen( NULL, val );
continue;
} else if ( a->acl_dn_style == ACL_STYLE_SUBTREE ) {
- if ( vdnlen > patlen && !NDN_SEPARATOR( val->bv_val[vdnlen - patlen - 1] ) )
+ if ( vdnlen > patlen && !DN_SEPARATOR( val->bv_val[vdnlen - patlen - 1] ) )
continue;
} else if ( a->acl_dn_style == ACL_STYLE_CHILDREN ) {
if ( vdnlen <= patlen )
continue;
- if ( !NDN_SEPARATOR( val->bv_val[vdnlen - patlen - 1] ) )
+ if ( !DN_SEPARATOR( val->bv_val[vdnlen - patlen - 1] ) )
continue;
}
goto dn_match_cleanup;
}
- if ( !NDN_SEPARATOR( op->o_ndn.bv_val[odnlen - patlen - 1] ) ) {
+ if ( !DN_SEPARATOR( op->o_ndn.bv_val[odnlen - patlen - 1] ) ) {
goto dn_match_cleanup;
}
}
} else if ( b->a_dn_style == ACL_STYLE_SUBTREE ) {
- if ( odnlen > patlen && !NDN_SEPARATOR( op->o_ndn.bv_val[odnlen - patlen - 1] ) ) {
+ if ( odnlen > patlen && !DN_SEPARATOR( op->o_ndn.bv_val[odnlen - patlen - 1] ) ) {
goto dn_match_cleanup;
}
goto dn_match_cleanup;
}
- if ( !NDN_SEPARATOR( op->o_ndn.bv_val[odnlen - patlen - 1] ) ) {
+ if ( !DN_SEPARATOR( op->o_ndn.bv_val[odnlen - patlen - 1] ) ) {
goto dn_match_cleanup;
}
}
int rdnlen = -1, sep = 0;
if ( patlen > 0 ) {
- if ( !NDN_SEPARATOR( dn.bv_val[ dn.bv_len - patlen - 1 ] ) )
+ if ( !DN_SEPARATOR( dn.bv_val[ dn.bv_len - patlen - 1 ] ) )
return ACL_SCOPE_ERR;
sep = 1;
}
break;
}
- if ( dn.bv_len < patlen && !NDN_SEPARATOR( a->acl_dn_pat.bv_val[ patlen -dn.bv_len - 1 ] ) ) {
+ if ( dn.bv_len < patlen && !DN_SEPARATOR( a->acl_dn_pat.bv_val[ patlen -dn.bv_len - 1 ] ) ) {
return ACL_SCOPE_ERR;
}
/* Advance to next lower RDN */
for (ptr = ei.bei_nrdn.bv_val - 2; ptr > ndn->bv_val
- && !NDN_SEPARATOR(*ptr); ptr--) /* empty */;
+ && !DN_SEPARATOR(*ptr); ptr--) /* empty */;
if ( ptr >= ndn->bv_val ) {
- if (NDN_SEPARATOR(*ptr)) ptr++;
+ if (DN_SEPARATOR(*ptr)) ptr++;
ei.bei_nrdn.bv_len = ei.bei_nrdn.bv_val - ptr - 1;
ei.bei_nrdn.bv_val = ptr;
}
if ( diff < 0 ) {
/* alias is longer than dn */
continue;
- } else if ( diff > 0 && ( !NDN_SEPARATOR(dn->bv_val[diff-1]))) {
- /* FIXME: should use DN_SEPARATOR() instead of
- * NDN_SEPARATOR(), but the latter may fail if
- * an escaped ';' is present */
- /* boundary is not at a DN separator */
+ } else if ( diff > 0 && ( !DN_SEPARATOR(dn->bv_val[diff-1]))) {
+ /* FIXME: DN_SEPARATOR() is intended to work
+ * on a normalized/pretty DN, so that ';'
+ * is never used as a DN separator */
continue;
/* At a DN Separator */
}
)
{
for ( ; from--; ) {
- if ( NDN_SEPARATOR( rdn[ from ] ) ) {
+ if ( DN_SEPARATOR( rdn[ from ] ) ) {
return 0;
}
}
* need not look at escaping
*/
if ( len && len < dnlen &&
- !NDN_SEPARATOR( dn->bv_val[(dnlen-len)-1] ))
+ !DN_SEPARATOR( dn->bv_val[(dnlen-len)-1] ))
{
continue;
}
return;
}
- assert( NDN_SEPARATOR( p[ 0 ] ) );
+ assert( DN_SEPARATOR( p[ 0 ] ) );
p++;
assert( ATTR_LEADCHAR( p[ 0 ] ) );
}
/* no rdn separator or escaped rdn separator */
- if ( d > 1 && !NDN_SEPARATOR( dn->bv_val[ d - 1 ] ) ) {
+ if ( d > 1 && !DN_SEPARATOR( dn->bv_val[ d - 1 ] ) ) {
return 0;
}
}
} else {
/* check for unescaped rdn separator */
- if ( !NDN_SEPARATOR( ndn->bv_val[d-1] ) ) {
+ if ( !DN_SEPARATOR( ndn->bv_val[d-1] ) ) {
break;
}
}
if ( diff < 0 ) {
/* alias is longer than dn */
continue;
- } else if ( diff > 0 && ( !NDN_SEPARATOR(dn->bv_val[diff-1]))) {
- /* FIXME: should use DN_SEPARATOR() instead of
- * NDN_SEPARATOR(), but the latter may fail if
- * an escaped ';' is present */
- /* boundary is not at a DN separator */
+ } else if ( diff > 0 && ( !DN_SEPARATOR(dn->bv_val[diff-1]))) {
+ /* FIXME: DN_SEPARATOR() is intended to work
+ * on a normalized/pretty DN, so that ';'
+ * is never used as a DN separator */
continue;
/* At a DN Separator */
}
|| (c) == '(' || (c) == ')' || !ASCII_PRINTABLE(c) )
#define DN_ESCAPE(c) ((c) == SLAP_ESCAPE_CHAR)
-#define NDN_SEPARATOR(c) ((c) == ',')
-#define DN_SEPARATOR(c) (NDN_SEPARATOR(c) || (c) == ';')
+/* NOTE: for consistency, this macro must only operate
+ * on normalized/pretty DN, such that ';' is never used
+ * as RDN separator, and all occurrences of ';' must be escaped */
+#define DN_SEPARATOR(c) ((c) == ',')
#define RDN_ATTRTYPEANDVALUE_SEPARATOR(c) ((c) == '+') /* RFC 2253 */
#define RDN_SEPARATOR(c) (DN_SEPARATOR(c) || RDN_ATTRTYPEANDVALUE_SEPARATOR(c))
#define RDN_NEEDSESCAPE(c) ((c) == '\\' || (c) == '"')