Diff for /servers/slapd/slapacl.c between versions 1.16 and 1.21

version 1.16, 2005/04/12 17:36:56 version 1.21, 2005/08/31 21:25:50
Line 45  print_access( Line 45  print_access(
         int                     rc;          int                     rc;
         slap_mask_t             mask;          slap_mask_t             mask;
         char                    accessmaskbuf[ACCESSMASK_MAXLEN];          char                    accessmaskbuf[ACCESSMASK_MAXLEN];
         slap_access_t           access = ACL_AUTH;  
   
         rc = access_allowed_mask( op, e, desc, nval, ACL_AUTH, NULL, &mask );          rc = access_allowed_mask( op, e, desc, nval, ACL_AUTH, NULL, &mask );
   
Line 70  slapacl( int argc, char **argv ) Line 69  slapacl( int argc, char **argv )
         Operation               *op;          Operation               *op;
         Entry                   e = { 0 }, *ep = &e;          Entry                   e = { 0 }, *ep = &e;
         char                    *attr = NULL;          char                    *attr = NULL;
           int                     doclose = 0;
           BackendDB               *bd;
   
         slap_tool_init( progname, SLAPACL, argc, argv );          slap_tool_init( progname, SLAPACL, argc, argv );
   
           if ( !dryrun ) {
                   int     i = 0;
   
                   LDAP_STAILQ_FOREACH( bd, &backendDB, be_next ) {
                           if ( bd != be && backend_startup( bd ) ) {
                                   fprintf( stderr, "backend_startup(#%d%s%s) failed\n",
                                                   i,
                                                   bd->be_suffix ? ": " : "",
                                                   bd->be_suffix ? bd->be_suffix[0].bv_val : "" );
                                   rc = 1;
                                   goto destroy;
                           }
   
                           i++;
                   }
           }
   
         argv = &argv[ optind ];          argv = &argv[ optind ];
         argc -= optind;          argc -= optind;
   
Line 166  slapacl( int argc, char **argv ) Line 184  slapacl( int argc, char **argv )
                 fprintf( stderr, "authzDN: \"%s\"\n", authzDN.bv_val );                  fprintf( stderr, "authzDN: \"%s\"\n", authzDN.bv_val );
         }          }
   
           if ( !BER_BVISNULL( &authzDN ) ) {
                   op->o_dn = authzDN;
                   op->o_ndn = authzDN;
                   
                   if ( !BER_BVISNULL( &authcDN ) ) {
                           op->o_conn->c_dn = authcDN;
                           op->o_conn->c_ndn = authcDN;
   
                   } else {
                           op->o_conn->c_dn = authzDN;
                           op->o_conn->c_ndn = authzDN;
                   }
   
           } else if ( !BER_BVISNULL( &authcDN ) ) {
                   op->o_conn->c_dn = authcDN;
                   op->o_conn->c_ndn = authcDN;
                   op->o_dn = authcDN;
                   op->o_ndn = authcDN;
           }
   
         assert( !BER_BVISNULL( &baseDN ) );          assert( !BER_BVISNULL( &baseDN ) );
         rc = dnPrettyNormal( NULL, &baseDN, &e.e_name, &e.e_nname, NULL );          rc = dnPrettyNormal( NULL, &baseDN, &e.e_name, &e.e_nname, NULL );
         if ( rc != LDAP_SUCCESS ) {          if ( rc != LDAP_SUCCESS ) {
Line 177  slapacl( int argc, char **argv ) Line 215  slapacl( int argc, char **argv )
         }          }
   
         op->o_bd = be;          op->o_bd = be;
         if ( !BER_BVISNULL( &authzDN ) ) {          if ( op->o_bd == NULL ) {
                 op->o_dn = authzDN;                  /* NOTE: if no database could be found (e.g. because
                 op->o_ndn = authzDN;                   * accessing the rootDSE or so), use the frontendDB
         }                   * rules; might need work */
         if ( !BER_BVISNULL( &authcDN ) ) {                  op->o_bd = frontendDB;
                 op->o_conn->c_dn = authcDN;  
                 op->o_conn->c_ndn = authcDN;  
         }          }
   
         if ( !dryrun && be ) {          if ( !dryrun ) {
                 ID      id;                  ID      id;
   
                   if ( be == NULL ) {
                           fprintf( stderr, "%s: no target database "
                                   "has been found for baseDN=\"%s\"; "
                                   "you may try with \"-u\" (dry run).\n",
                                   baseDN.bv_val, progname );
                           rc = 1;
                           goto destroy;
                   }
   
                 if ( !be->be_entry_open ||                  if ( !be->be_entry_open ||
                         !be->be_entry_close ||                          !be->be_entry_close ||
                         !be->be_dn2id_get ||                          !be->be_dn2id_get ||
                         !be->be_entry_get )                          !be->be_id2entry_get )
                 {                  {
                         fprintf( stderr, "%s: target database "                          fprintf( stderr, "%s: target database "
                                 "doesn't support necessary operations; "                                  "doesn't support necessary operations; "
Line 209  slapacl( int argc, char **argv ) Line 254  slapacl( int argc, char **argv )
                         goto destroy;                          goto destroy;
                 }                  }
   
                   doclose = 1;
   
                 id = be->be_dn2id_get( be, &e.e_nname );                  id = be->be_dn2id_get( be, &e.e_nname );
                 if ( id == NOID ) {                  if ( id == NOID ) {
                         fprintf( stderr, "%s: unable to fetch ID of DN \"%s\"\n",                          fprintf( stderr, "%s: unable to fetch ID of DN \"%s\"\n",
Line 312  slapacl( int argc, char **argv ) Line 359  slapacl( int argc, char **argv )
         }          }
   
 destroy:;  destroy:;
         ber_memfree( e.e_name.bv_val );          if ( !BER_BVISNULL( &e.e_name ) ) {
         ber_memfree( e.e_nname.bv_val );                  ber_memfree( e.e_name.bv_val );
           }
           if ( !BER_BVISNULL( &e.e_nname ) ) {
                   ber_memfree( e.e_nname.bv_val );
           }
         if ( !dryrun && be ) {          if ( !dryrun && be ) {
                 if ( ep != &e ) {                  if ( ep != &e ) {
                         be_entry_release_r( op, ep );                          be_entry_release_r( op, ep );
                 }                  }
                 be->be_entry_close( be );                  if ( doclose ) {
                           be->be_entry_close( be );
                   }
   
                   LDAP_STAILQ_FOREACH( bd, &backendDB, be_next ) {
                           if ( bd != be ) {
                                   backend_shutdown( bd );
                           }
                   }
         }          }
   
         slap_tool_destroy();          slap_tool_destroy();

Removed from v.1.16  
changed lines
  Added in v.1.21


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org