]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapacl.c
Unify use of BDB lockers
[openldap] / servers / slapd / slapacl.c
index 925127d0570a05b99c53f33b62b4e455459785a7..f8573b5ed5ea7369cadada8abe35d4f924a9f006 100644 (file)
@@ -1,6 +1,6 @@
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2004-2005 The OpenLDAP Foundation.
+ * Copyright 2004-2007 The OpenLDAP Foundation.
  * Portions Copyright 2004 Pierangelo Masarati.
  * All rights reserved.
  *
@@ -52,7 +52,8 @@ print_access(
                        desc->ad_cname.bv_val,
                        ( val && !BER_BVISNULL( val ) ) ? "=" : "",
                        ( val && !BER_BVISNULL( val ) ) ?
-                               ( desc == slap_schema.si_ad_userPassword ? "****" : val->bv_val ) : "",
+                               ( desc == slap_schema.si_ad_userPassword ?
+                                       "****" : val->bv_val ) : "",
                        accessmask2str( mask, accessmaskbuf, 1 ) );
 
        return rc;
@@ -65,8 +66,8 @@ slapacl( int argc, char **argv )
        const char              *progname = "slapacl";
        Connection              conn = { 0 };
        Listener                listener;
-       char                    opbuf[OPERATION_BUFFER_SIZE];
-       Operation               *op;
+       OperationBuffer opbuf;
+       Operation               *op = NULL;
        Entry                   e = { 0 }, *ep = &e;
        char                    *attr = NULL;
        int                     doclose = 0;
@@ -94,7 +95,7 @@ slapacl( int argc, char **argv )
        argv = &argv[ optind ];
        argc -= optind;
 
-       op = (Operation *)opbuf;
+       op = (Operation *) &opbuf;
        connection_fake_init( &conn, op, &conn );
 
        conn.c_listener = &listener;
@@ -237,7 +238,7 @@ slapacl( int argc, char **argv )
                if ( !be->be_entry_open ||
                        !be->be_entry_close ||
                        !be->be_dn2id_get ||
-                       !be->be_entry_get )
+                       !be->be_id2entry_get )
                {
                        fprintf( stderr, "%s: target database "
                                "doesn't support necessary operations; "
@@ -313,12 +314,29 @@ slapacl( int argc, char **argv )
 
                accessstr = strchr( attr, '/' );
                if ( accessstr != NULL ) {
+                       int     invalid = 0;
+
                        accessstr[0] = '\0';
                        accessstr++;
                        access = str2access( accessstr );
-                       if ( access == ACL_INVALID_ACCESS ) {
+                       switch ( access ) {
+                       case ACL_INVALID_ACCESS:
                                fprintf( stderr, "unknown access \"%s\" for attribute \"%s\"\n",
                                                accessstr, attr );
+                               invalid = 1;
+                               break;
+
+                       case ACL_NONE:
+                               fprintf( stderr, "\"none\" not allowed for attribute \"%s\"\n",
+                                               attr );
+                               invalid = 1;
+                               break;
+
+                       default:
+                               break;
+                       }
+
+                       if ( invalid ) {
                                if ( continuemode ) {
                                        continue;
                                }