]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/aclparse.c
Fix access_allowed() error checking bug
[openldap] / servers / slapd / aclparse.c
index 02703af4706bfa0f80dd51d884936b0a7a77f6db..d420a0b4c72d5f4c34023b1c6d5d9fe699e99750 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "slap.h"
 #include "lber_pvt.h"
+#include "lutil.h"
 
 static void            split(char *line, int splitchar, char **left, char **right);
 static void            access_append(Access **l, Access *a);
@@ -201,8 +202,7 @@ parse_acl(
                                }
 
                                if ( strcasecmp( left, "filter" ) == 0 ) {
-                                       if ( (a->acl_filter = str2filter(
-                                           right )) == NULL ) {
+                                       if ( (a->acl_filter = str2filter( right )) == NULL ) {
                                                fprintf( stderr,
                                "%s: line %d: bad filter \"%s\" in to clause\n",
                                                    fname, lineno, right );
@@ -227,7 +227,7 @@ parse_acl(
                        }
 
                        if ( a->acl_dn_pat.bv_len != 0 &&
-                               strcmp(a->acl_dn_pat.bv_val, "*") == 0)
+                               strcmp(a->acl_dn_pat.bv_val, "*") == 0 )
                        {
                                free( a->acl_dn_pat.bv_val );
                                a->acl_dn_pat.bv_val = NULL;
@@ -464,6 +464,15 @@ parse_acl(
                                                acl_usage();
                                        }
 
+                                       if( b->a_dn_at->ad_type->sat_equality == NULL )
+                                       {
+                                               fprintf( stderr,
+                                                       "%s: line %d: dnattr \"%s\": "
+                                                       "inappropriate matching (no EQUALITY)\n",
+                                                       fname, lineno, right );
+                                               acl_usage();
+                                       }
+
                                        continue;
                                }
 
@@ -1107,24 +1116,24 @@ accessmask2str( slap_mask_t mask, char *buf )
 
        if ( ACL_IS_LEVEL( mask ) ) {
                if ( ACL_LVL_IS_NONE(mask) ) {
-                       ptr = slap_strcopy( ptr, "none" );
+                       ptr = lutil_strcopy( ptr, "none" );
 
                } else if ( ACL_LVL_IS_AUTH(mask) ) {
-                       ptr = slap_strcopy( ptr, "auth" );
+                       ptr = lutil_strcopy( ptr, "auth" );
 
                } else if ( ACL_LVL_IS_COMPARE(mask) ) {
-                       ptr = slap_strcopy( ptr, "compare" );
+                       ptr = lutil_strcopy( ptr, "compare" );
 
                } else if ( ACL_LVL_IS_SEARCH(mask) ) {
-                       ptr = slap_strcopy( ptr, "search" );
+                       ptr = lutil_strcopy( ptr, "search" );
 
                } else if ( ACL_LVL_IS_READ(mask) ) {
-                       ptr = slap_strcopy( ptr, "read" );
+                       ptr = lutil_strcopy( ptr, "read" );
 
                } else if ( ACL_LVL_IS_WRITE(mask) ) {
-                       ptr = slap_strcopy( ptr, "write" );
+                       ptr = lutil_strcopy( ptr, "write" );
                } else {
-                       ptr = slap_strcopy( ptr, "unknown" );
+                       ptr = lutil_strcopy( ptr, "unknown" );
                }
                
                *ptr++ = '(';