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(); |