mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
unifdef -DSLAP_ACL_HONOR_DISCLOSE
unifdef -DSLAP_ACL_HONOR_MANAGE unifdef -DSLAP_OVERLAY_ACCESS unifdef -DSLAP_ORDERED_PRETTYNORM unifdef -DSLAP_AUTHZ_SYNTAX Move LDAP_COLLECTIVE_ATTRIBUTES, LDAP_COMP_MATCH, and LDAP_SYNC_TIMESTAMP back behind LDAP_DEVEL (as these either too experimental or not yet implemented).
This commit is contained in:
parent
444ec670e3
commit
eb9a3c1876
@ -94,7 +94,6 @@ SLAP_SET_GATHER acl_set_gather2;
|
|||||||
* - can be legally called with op->o_bd == NULL
|
* - can be legally called with op->o_bd == NULL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
int
|
int
|
||||||
slap_access_always_allowed(
|
slap_access_always_allowed(
|
||||||
Operation *op,
|
Operation *op,
|
||||||
@ -462,281 +461,6 @@ done:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
int
|
|
||||||
access_allowed_mask(
|
|
||||||
Operation *op,
|
|
||||||
Entry *e,
|
|
||||||
AttributeDescription *desc,
|
|
||||||
struct berval *val,
|
|
||||||
slap_access_t access,
|
|
||||||
AccessControlState *state,
|
|
||||||
slap_mask_t *maskp )
|
|
||||||
{
|
|
||||||
int ret = 1;
|
|
||||||
int count;
|
|
||||||
AccessControl *a = NULL;
|
|
||||||
Backend *be;
|
|
||||||
int be_null = 0;
|
|
||||||
|
|
||||||
#ifdef LDAP_DEBUG
|
|
||||||
char accessmaskbuf[ACCESSMASK_MAXLEN];
|
|
||||||
#endif
|
|
||||||
slap_mask_t mask;
|
|
||||||
slap_control_t control;
|
|
||||||
slap_access_t access_level;
|
|
||||||
const char *attr;
|
|
||||||
regmatch_t matches[MAXREMATCHES];
|
|
||||||
int st_same_attr = 0;
|
|
||||||
static AccessControlState state_init = ACL_STATE_INIT;
|
|
||||||
|
|
||||||
assert( e != NULL );
|
|
||||||
assert( desc != NULL );
|
|
||||||
|
|
||||||
access_level = ACL_LEVEL( access );
|
|
||||||
|
|
||||||
assert( access_level > ACL_NONE );
|
|
||||||
if ( maskp ) ACL_INVALIDATE( *maskp );
|
|
||||||
|
|
||||||
attr = desc->ad_cname.bv_val;
|
|
||||||
|
|
||||||
assert( attr != NULL );
|
|
||||||
|
|
||||||
if ( op ) {
|
|
||||||
if ( op->o_is_auth_check &&
|
|
||||||
( access_level == ACL_SEARCH || access_level == ACL_READ ) )
|
|
||||||
{
|
|
||||||
access = ACL_AUTH;
|
|
||||||
|
|
||||||
} else if ( get_manageDIT( op ) && access_level == ACL_WRITE &&
|
|
||||||
desc == slap_schema.si_ad_entry )
|
|
||||||
{
|
|
||||||
access = ACL_MANAGE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( state ) {
|
|
||||||
if ( state->as_vd_ad == desc ) {
|
|
||||||
if ( ( state->as_recorded & ACL_STATE_RECORDED_NV ) &&
|
|
||||||
val == NULL )
|
|
||||||
{
|
|
||||||
return state->as_result;
|
|
||||||
|
|
||||||
} else if ( ( state->as_recorded & ACL_STATE_RECORDED_VD ) &&
|
|
||||||
val != NULL && state->as_vd_acl == NULL )
|
|
||||||
{
|
|
||||||
return state->as_result;
|
|
||||||
}
|
|
||||||
st_same_attr = 1;
|
|
||||||
} else {
|
|
||||||
*state = state_init;
|
|
||||||
}
|
|
||||||
|
|
||||||
state->as_vd_ad = desc;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_ACL,
|
|
||||||
"=> access_allowed: %s access to \"%s\" \"%s\" requested\n",
|
|
||||||
access2str( access ), e->e_dn, attr );
|
|
||||||
|
|
||||||
if ( op == NULL ) {
|
|
||||||
/* no-op call */
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
be = op->o_bd;
|
|
||||||
if ( be == NULL ) {
|
|
||||||
be = LDAP_STAILQ_FIRST(&backendDB);
|
|
||||||
be_null = 1;
|
|
||||||
#ifdef LDAP_DEVEL
|
|
||||||
/*
|
|
||||||
* FIXME: experimental; use first backend rules
|
|
||||||
* iff there is no global_acl (ITS#3100) */
|
|
||||||
if ( frontendDB->be_acl == NULL )
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
op->o_bd = be;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert( be != NULL );
|
|
||||||
|
|
||||||
/* grant database root access */
|
|
||||||
if ( be_isroot( op ) ) {
|
|
||||||
Debug( LDAP_DEBUG_ACL, "<= root access granted\n", 0, 0, 0 );
|
|
||||||
if ( maskp ) {
|
|
||||||
mask = ACL_LVL_MANAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* no-user-modification operational attributes are ignored
|
|
||||||
* by ACL_WRITE checking as any found here are not provided
|
|
||||||
* by the user
|
|
||||||
*
|
|
||||||
* NOTE: but they are not ignored for ACL_MANAGE, because
|
|
||||||
* if we get here it means a non-root user is trying to
|
|
||||||
* manage data, so we need to check its privileges.
|
|
||||||
*/
|
|
||||||
if ( access_level == ACL_WRITE && is_at_no_user_mod( desc->ad_type )
|
|
||||||
&& desc != slap_schema.si_ad_entry
|
|
||||||
&& desc != slap_schema.si_ad_children )
|
|
||||||
{
|
|
||||||
Debug( LDAP_DEBUG_ACL, "NoUserMod Operational attribute:"
|
|
||||||
" %s access granted\n",
|
|
||||||
attr, 0, 0 );
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* use backend default access if no backend acls */
|
|
||||||
if ( be->be_acl == NULL ) {
|
|
||||||
Debug( LDAP_DEBUG_ACL,
|
|
||||||
"=> access_allowed: backend default %s "
|
|
||||||
"access %s to \"%s\"\n",
|
|
||||||
access2str( access ),
|
|
||||||
be->be_dfltaccess >= access_level ? "granted" : "denied",
|
|
||||||
op->o_dn.bv_val ? op->o_dn.bv_val : "(anonymous)" );
|
|
||||||
ret = be->be_dfltaccess >= access_level;
|
|
||||||
|
|
||||||
if ( maskp ) {
|
|
||||||
int i;
|
|
||||||
|
|
||||||
mask = ACL_PRIV_LEVEL;
|
|
||||||
for ( i = ACL_NONE; i <= be->be_dfltaccess; i++ ) {
|
|
||||||
mask |= ACL_ACCESS2PRIV( i );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
#ifdef notdef
|
|
||||||
/* be is always non-NULL */
|
|
||||||
/* use global default access if no global acls */
|
|
||||||
} else if ( be == NULL && frontendDB->be_acl == NULL ) {
|
|
||||||
Debug( LDAP_DEBUG_ACL,
|
|
||||||
"=> access_allowed: global default %s access %s to \"%s\"\n",
|
|
||||||
access2str( access ),
|
|
||||||
frontendDB->be_dfltaccess >= access_level ?
|
|
||||||
"granted" : "denied", op->o_dn.bv_val );
|
|
||||||
ret = frontendDB->be_dfltaccess >= access_level;
|
|
||||||
|
|
||||||
if ( maskp ) {
|
|
||||||
int i;
|
|
||||||
|
|
||||||
mask = ACL_PRIV_LEVEL;
|
|
||||||
for ( i = ACL_NONE; i <= global_default_access; i++ ) {
|
|
||||||
mask |= ACL_ACCESS2PRIV( i );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
goto done;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
control = ACL_BREAK;
|
|
||||||
|
|
||||||
if ( st_same_attr ) {
|
|
||||||
assert( state->as_vd_acl != NULL );
|
|
||||||
|
|
||||||
a = state->as_vd_acl;
|
|
||||||
count = state->as_vd_acl_count;
|
|
||||||
if ( !ACL_IS_INVALID( state->as_vd_acl_mask ) ) {
|
|
||||||
mask = state->as_vd_acl_mask;
|
|
||||||
AC_MEMCPY( matches, state->as_vd_acl_matches, sizeof(matches) );
|
|
||||||
goto vd_access;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if ( state ) state->as_vi_acl = NULL;
|
|
||||||
a = NULL;
|
|
||||||
ACL_INIT(mask);
|
|
||||||
count = 0;
|
|
||||||
memset( matches, '\0', sizeof(matches) );
|
|
||||||
}
|
|
||||||
|
|
||||||
while ( ( a = slap_acl_get( a, &count, op, e, desc, val,
|
|
||||||
MAXREMATCHES, matches, state ) ) != NULL )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for ( i = 0; i < MAXREMATCHES && matches[i].rm_so > 0; i++ ) {
|
|
||||||
Debug( LDAP_DEBUG_ACL, "=> match[%d]: %d %d ", i,
|
|
||||||
(int)matches[i].rm_so, (int)matches[i].rm_eo );
|
|
||||||
if ( matches[i].rm_so <= matches[0].rm_eo ) {
|
|
||||||
int n;
|
|
||||||
for ( n = matches[i].rm_so; n < matches[i].rm_eo; n++ ) {
|
|
||||||
Debug( LDAP_DEBUG_ACL, "%c", e->e_ndn[n], 0, 0 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Debug( LDAP_DEBUG_ARGS, "\n", 0, 0, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( state ) {
|
|
||||||
if ( state->as_vi_acl == a &&
|
|
||||||
( state->as_recorded & ACL_STATE_RECORDED_NV ) )
|
|
||||||
{
|
|
||||||
Debug( LDAP_DEBUG_ACL,
|
|
||||||
"access_allowed: result from state (%s)\n",
|
|
||||||
attr, 0, 0 );
|
|
||||||
ret = state->as_result;
|
|
||||||
goto done;
|
|
||||||
} else {
|
|
||||||
Debug( LDAP_DEBUG_ACL,
|
|
||||||
"access_allowed: no res from state (%s)\n",
|
|
||||||
attr, 0, 0 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vd_access:
|
|
||||||
control = slap_acl_mask( a, &mask, op,
|
|
||||||
e, desc, val, MAXREMATCHES, matches, count, state );
|
|
||||||
|
|
||||||
if ( control != ACL_BREAK ) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset( matches, '\0', sizeof(matches) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ACL_IS_INVALID( mask ) ) {
|
|
||||||
Debug( LDAP_DEBUG_ACL,
|
|
||||||
"=> access_allowed: \"%s\" (%s) invalid!\n",
|
|
||||||
e->e_dn, attr, 0 );
|
|
||||||
ACL_INIT(mask);
|
|
||||||
|
|
||||||
} else if ( control == ACL_BREAK ) {
|
|
||||||
Debug( LDAP_DEBUG_ACL,
|
|
||||||
"=> access_allowed: no more rules\n", 0, 0, 0 );
|
|
||||||
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug( LDAP_DEBUG_ACL,
|
|
||||||
"=> access_allowed: %s access %s by %s\n",
|
|
||||||
access2str( access ),
|
|
||||||
ACL_GRANT(mask, access) ? "granted" : "denied",
|
|
||||||
accessmask2str( mask, accessmaskbuf, 1 ) );
|
|
||||||
|
|
||||||
ret = ACL_GRANT(mask, access);
|
|
||||||
|
|
||||||
done:
|
|
||||||
if ( state != NULL ) {
|
|
||||||
/* If not value-dependent, save ACL in case of more attrs */
|
|
||||||
if ( !( state->as_recorded & ACL_STATE_RECORDED_VD ) ) {
|
|
||||||
state->as_vi_acl = a;
|
|
||||||
state->as_result = ret;
|
|
||||||
}
|
|
||||||
state->as_recorded |= ACL_STATE_RECORDED;
|
|
||||||
}
|
|
||||||
if ( be_null ) op->o_bd = NULL;
|
|
||||||
if ( maskp ) *maskp = mask;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* !SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* slap_acl_get - return the acl applicable to entry e, attribute
|
* slap_acl_get - return the acl applicable to entry e, attribute
|
||||||
|
@ -2453,11 +2453,6 @@ str2access( const char *str )
|
|||||||
return ACL_NONE;
|
return ACL_NONE;
|
||||||
|
|
||||||
} else if ( strcasecmp( str, "disclose" ) == 0 ) {
|
} else if ( strcasecmp( str, "disclose" ) == 0 ) {
|
||||||
#ifndef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
Debug( LDAP_DEBUG_ACL, "str2access: warning, "
|
|
||||||
"\"disclose\" privilege disabled.\n",
|
|
||||||
0, 0, 0 );
|
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
return ACL_DISCLOSE;
|
return ACL_DISCLOSE;
|
||||||
|
|
||||||
} else if ( strcasecmp( str, "auth" ) == 0 ) {
|
} else if ( strcasecmp( str, "auth" ) == 0 ) {
|
||||||
|
@ -66,16 +66,13 @@ dn2entry_retry:
|
|||||||
e = ei->bei_e;
|
e = ei->bei_e;
|
||||||
if ( rs->sr_err == DB_NOTFOUND ) {
|
if ( rs->sr_err == DB_NOTFOUND ) {
|
||||||
if ( e != NULL ) {
|
if ( e != NULL ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return referral only if "disclose" is granted on the object */
|
/* return referral only if "disclose" is granted on the object */
|
||||||
if ( ! access_allowed( op, e, slap_schema.si_ad_entry,
|
if ( ! access_allowed( op, e, slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL ) )
|
NULL, ACL_DISCLOSE, NULL ) )
|
||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_matched = ch_strdup( e->e_dn );
|
rs->sr_matched = ch_strdup( e->e_dn );
|
||||||
rs->sr_ref = is_entry_referral( e )
|
rs->sr_ref = is_entry_referral( e )
|
||||||
? get_entry_referrals( op, e )
|
? get_entry_referrals( op, e )
|
||||||
@ -103,15 +100,12 @@ dn2entry_retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!manageDSAit && is_entry_referral( e ) ) {
|
if (!manageDSAit && is_entry_referral( e ) ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return referral only if "disclose" is granted on the object */
|
/* return referral only if "disclose" is granted on the object */
|
||||||
if ( !access_allowed( op, e, slap_schema.si_ad_entry,
|
if ( !access_allowed( op, e, slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL ) )
|
NULL, ACL_DISCLOSE, NULL ) )
|
||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
/* entry is a referral, don't allow compare */
|
/* entry is a referral, don't allow compare */
|
||||||
rs->sr_ref = get_entry_referrals( op, e );
|
rs->sr_ref = get_entry_referrals( op, e );
|
||||||
rs->sr_err = LDAP_REFERRAL;
|
rs->sr_err = LDAP_REFERRAL;
|
||||||
@ -131,14 +125,11 @@ dn2entry_retry:
|
|||||||
if ( get_assert( op ) &&
|
if ( get_assert( op ) &&
|
||||||
( test_filter( op, e, get_assertion( op )) != LDAP_COMPARE_TRUE ))
|
( test_filter( op, e, get_assertion( op )) != LDAP_COMPARE_TRUE ))
|
||||||
{
|
{
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( !access_allowed( op, e, slap_schema.si_ad_entry,
|
if ( !access_allowed( op, e, slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL ) )
|
NULL, ACL_DISCLOSE, NULL ) )
|
||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_err = LDAP_ASSERTION_FAILED;
|
rs->sr_err = LDAP_ASSERTION_FAILED;
|
||||||
}
|
}
|
||||||
goto return_results;
|
goto return_results;
|
||||||
@ -147,16 +138,13 @@ dn2entry_retry:
|
|||||||
if ( !access_allowed( op, e, op->oq_compare.rs_ava->aa_desc,
|
if ( !access_allowed( op, e, op->oq_compare.rs_ava->aa_desc,
|
||||||
&op->oq_compare.rs_ava->aa_value, ACL_COMPARE, NULL ) )
|
&op->oq_compare.rs_ava->aa_value, ACL_COMPARE, NULL ) )
|
||||||
{
|
{
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return error only if "disclose"
|
/* return error only if "disclose"
|
||||||
* is granted on the object */
|
* is granted on the object */
|
||||||
if ( !access_allowed( op, e, slap_schema.si_ad_entry,
|
if ( !access_allowed( op, e, slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL ) )
|
NULL, ACL_DISCLOSE, NULL ) )
|
||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_err = LDAP_INSUFFICIENT_ACCESS;
|
rs->sr_err = LDAP_INSUFFICIENT_ACCESS;
|
||||||
}
|
}
|
||||||
goto return_results;
|
goto return_results;
|
||||||
|
@ -319,9 +319,7 @@ bdb_search( Operation *op, SlapReply *rs )
|
|||||||
Entry *matched = NULL;
|
Entry *matched = NULL;
|
||||||
EntryInfo *ei, ei_root = {0};
|
EntryInfo *ei, ei_root = {0};
|
||||||
struct berval realbase = BER_BVNULL;
|
struct berval realbase = BER_BVNULL;
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
slap_mask_t mask;
|
slap_mask_t mask;
|
||||||
#endif
|
|
||||||
int manageDSAit;
|
int manageDSAit;
|
||||||
int tentries = 0;
|
int tentries = 0;
|
||||||
ID lastid = NOID;
|
ID lastid = NOID;
|
||||||
@ -424,7 +422,6 @@ dn2entry_retry:
|
|||||||
if ( matched != NULL ) {
|
if ( matched != NULL ) {
|
||||||
BerVarray erefs = NULL;
|
BerVarray erefs = NULL;
|
||||||
|
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return referral only if "disclose"
|
/* return referral only if "disclose"
|
||||||
* is granted on the object */
|
* is granted on the object */
|
||||||
if ( ! access_allowed( op, matched,
|
if ( ! access_allowed( op, matched,
|
||||||
@ -433,9 +430,7 @@ dn2entry_retry:
|
|||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
ber_dupbv( &matched_dn, &matched->e_name );
|
ber_dupbv( &matched_dn, &matched->e_name );
|
||||||
|
|
||||||
erefs = is_entry_referral( matched )
|
erefs = is_entry_referral( matched )
|
||||||
@ -483,7 +478,6 @@ dn2entry_retry:
|
|||||||
return rs->sr_err;
|
return rs->sr_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* NOTE: __NEW__ "search" access is required
|
/* NOTE: __NEW__ "search" access is required
|
||||||
* on searchBase object */
|
* on searchBase object */
|
||||||
if ( ! access_allowed_mask( op, e, slap_schema.si_ad_entry,
|
if ( ! access_allowed_mask( op, e, slap_schema.si_ad_entry,
|
||||||
@ -504,7 +498,6 @@ dn2entry_retry:
|
|||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
return rs->sr_err;
|
return rs->sr_err;
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
|
|
||||||
if ( !manageDSAit && e != &e_root && is_entry_referral( e ) ) {
|
if ( !manageDSAit && e != &e_root && is_entry_referral( e ) ) {
|
||||||
/* entry is a referral, don't allow add */
|
/* entry is a referral, don't allow add */
|
||||||
|
@ -67,9 +67,7 @@ dnssrv_back_initialize(
|
|||||||
bi->bi_connection_init = 0;
|
bi->bi_connection_init = 0;
|
||||||
bi->bi_connection_destroy = 0;
|
bi->bi_connection_destroy = 0;
|
||||||
|
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
bi->bi_access_allowed = slap_access_always_allowed;
|
bi->bi_access_allowed = slap_access_always_allowed;
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1059,7 +1059,6 @@ done_url:;
|
|||||||
|
|
||||||
case LDAP_BACK_CFG_IDASSERT_AUTHZFROM: {
|
case LDAP_BACK_CFG_IDASSERT_AUTHZFROM: {
|
||||||
struct berval bv;
|
struct berval bv;
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
struct berval in;
|
struct berval in;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@ -1072,9 +1071,6 @@ done_url:;
|
|||||||
Debug( LDAP_DEBUG_ANY, "%s: %s.\n", c->log, c->msg, 0 );
|
Debug( LDAP_DEBUG_ANY, "%s: %s.\n", c->log, c->msg, 0 );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#else /* !SLAP_AUTHZ_SYNTAX */
|
|
||||||
ber_str2bv( c->argv[ 1 ], 0, 1, &bv );
|
|
||||||
#endif /* !SLAP_AUTHZ_SYNTAX */
|
|
||||||
ber_bvarray_add( &li->li_idassert_authz, &bv );
|
ber_bvarray_add( &li->li_idassert_authz, &bv );
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
@ -1249,9 +1249,7 @@ ldif_back_initialize(
|
|||||||
bi->bi_entry_get_rw = ldif_back_entry_get;
|
bi->bi_entry_get_rw = ldif_back_entry_get;
|
||||||
|
|
||||||
#if 0 /* NOTE: uncomment to completely disable access control */
|
#if 0 /* NOTE: uncomment to completely disable access control */
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
bi->bi_access_allowed = slap_access_always_allowed;
|
bi->bi_access_allowed = slap_access_always_allowed;
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bi->bi_tool_entry_open = ldif_tool_entry_open;
|
bi->bi_tool_entry_open = ldif_tool_entry_open;
|
||||||
|
@ -39,15 +39,12 @@ monitor_back_compare( struct slap_op *op, struct slap_rep *rs)
|
|||||||
if ( e == NULL ) {
|
if ( e == NULL ) {
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
if ( matched ) {
|
if ( matched ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( !access_allowed_mask( op, matched,
|
if ( !access_allowed_mask( op, matched,
|
||||||
slap_schema.si_ad_entry,
|
slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
||||||
{
|
{
|
||||||
/* do nothing */ ;
|
/* do nothing */ ;
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_matched = matched->e_dn;
|
rs->sr_matched = matched->e_dn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,13 +94,11 @@ return_results:;
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( !access_allowed_mask( op, e, slap_schema.si_ad_entry,
|
if ( !access_allowed_mask( op, e, slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,15 +45,12 @@ monitor_back_modify( Operation *op, SlapReply *rs )
|
|||||||
if ( e == NULL ) {
|
if ( e == NULL ) {
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
if ( matched ) {
|
if ( matched ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( !access_allowed_mask( op, matched,
|
if ( !access_allowed_mask( op, matched,
|
||||||
slap_schema.si_ad_entry,
|
slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
||||||
{
|
{
|
||||||
/* do nothing */ ;
|
/* do nothing */ ;
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_matched = matched->e_dn;
|
rs->sr_matched = matched->e_dn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -75,7 +72,6 @@ monitor_back_modify( Operation *op, SlapReply *rs )
|
|||||||
rc = monitor_entry_modify( op, rs, e );
|
rc = monitor_entry_modify( op, rs, e );
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( rc != LDAP_SUCCESS ) {
|
if ( rc != LDAP_SUCCESS ) {
|
||||||
if ( !access_allowed_mask( op, e, slap_schema.si_ad_entry,
|
if ( !access_allowed_mask( op, e, slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
||||||
@ -83,7 +79,6 @@ monitor_back_modify( Operation *op, SlapReply *rs )
|
|||||||
rc = LDAP_NO_SUCH_OBJECT;
|
rc = LDAP_NO_SUCH_OBJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
|
|
||||||
rs->sr_err = rc;
|
rs->sr_err = rc;
|
||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
|
@ -175,15 +175,12 @@ monitor_back_search( Operation *op, SlapReply *rs )
|
|||||||
if ( e == NULL ) {
|
if ( e == NULL ) {
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
if ( matched ) {
|
if ( matched ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( !access_allowed_mask( op, matched,
|
if ( !access_allowed_mask( op, matched,
|
||||||
slap_schema.si_ad_entry,
|
slap_schema.si_ad_entry,
|
||||||
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
NULL, ACL_DISCLOSE, NULL, NULL ) )
|
||||||
{
|
{
|
||||||
/* do nothing */ ;
|
/* do nothing */ ;
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_matched = matched->e_dn;
|
rs->sr_matched = matched->e_dn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -204,12 +201,9 @@ monitor_back_search( Operation *op, SlapReply *rs )
|
|||||||
{
|
{
|
||||||
monitor_cache_release( mi, e );
|
monitor_cache_release( mi, e );
|
||||||
|
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( !ACL_GRANT( mask, ACL_DISCLOSE ) ) {
|
if ( !ACL_GRANT( mask, ACL_DISCLOSE ) ) {
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_err = LDAP_INSUFFICIENT_ACCESS;
|
rs->sr_err = LDAP_INSUFFICIENT_ACCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1478,7 +1478,6 @@ done:;
|
|||||||
* in deleting that row.
|
* in deleting that row.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( e != NULL ) {
|
if ( e != NULL ) {
|
||||||
int disclose = 1;
|
int disclose = 1;
|
||||||
|
|
||||||
@ -1503,7 +1502,6 @@ done:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
|
|
||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
slap_graduate_commit_csn( op );
|
slap_graduate_commit_csn( op );
|
||||||
|
@ -150,7 +150,6 @@ return_results:;
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( !BER_BVISNULL( &e.e_nname ) &&
|
if ( !BER_BVISNULL( &e.e_nname ) &&
|
||||||
! access_allowed( op, &e,
|
! access_allowed( op, &e,
|
||||||
slap_schema.si_ad_entry, NULL,
|
slap_schema.si_ad_entry, NULL,
|
||||||
@ -159,7 +158,6 @@ return_results:;
|
|||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
rs->sr_text = NULL;
|
rs->sr_text = NULL;
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,7 +448,6 @@ backsql_delete( Operation *op, SlapReply *rs )
|
|||||||
}
|
}
|
||||||
|
|
||||||
done:;
|
done:;
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( e != NULL ) {
|
if ( e != NULL ) {
|
||||||
if ( !access_allowed( op, e, slap_schema.si_ad_entry, NULL,
|
if ( !access_allowed( op, e, slap_schema.si_ad_entry, NULL,
|
||||||
ACL_DISCLOSE, NULL ) )
|
ACL_DISCLOSE, NULL ) )
|
||||||
@ -462,7 +461,6 @@ done:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
|
|
||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
|
|
||||||
|
@ -174,7 +174,6 @@ do_transact:;
|
|||||||
SQLTransact( SQL_NULL_HENV, dbh, CompletionType );
|
SQLTransact( SQL_NULL_HENV, dbh, CompletionType );
|
||||||
|
|
||||||
done:;
|
done:;
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( e != NULL ) {
|
if ( e != NULL ) {
|
||||||
if ( !access_allowed( op, e, slap_schema.si_ad_entry, NULL,
|
if ( !access_allowed( op, e, slap_schema.si_ad_entry, NULL,
|
||||||
ACL_DISCLOSE, NULL ) )
|
ACL_DISCLOSE, NULL ) )
|
||||||
@ -188,7 +187,6 @@ done:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
|
|
||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
slap_graduate_commit_csn( op );
|
slap_graduate_commit_csn( op );
|
||||||
|
@ -464,7 +464,6 @@ backsql_modrdn( Operation *op, SlapReply *rs )
|
|||||||
}
|
}
|
||||||
|
|
||||||
done:;
|
done:;
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( e != NULL ) {
|
if ( e != NULL ) {
|
||||||
if ( !access_allowed( op, e, slap_schema.si_ad_entry, NULL,
|
if ( !access_allowed( op, e, slap_schema.si_ad_entry, NULL,
|
||||||
ACL_DISCLOSE, NULL ) )
|
ACL_DISCLOSE, NULL ) )
|
||||||
@ -478,7 +477,6 @@ done:;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Commit only if all operations succeed
|
* Commit only if all operations succeed
|
||||||
|
@ -1968,7 +1968,6 @@ backsql_search( Operation *op, SlapReply *rs )
|
|||||||
/* fall thru */
|
/* fall thru */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( !BER_BVISNULL( &base_entry.e_nname )
|
if ( !BER_BVISNULL( &base_entry.e_nname )
|
||||||
&& !access_allowed( op, &base_entry,
|
&& !access_allowed( op, &base_entry,
|
||||||
slap_schema.si_ad_entry, NULL,
|
slap_schema.si_ad_entry, NULL,
|
||||||
@ -1982,7 +1981,6 @@ backsql_search( Operation *op, SlapReply *rs )
|
|||||||
rs->sr_matched = NULL;
|
rs->sr_matched = NULL;
|
||||||
rs->sr_text = NULL;
|
rs->sr_text = NULL;
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
|
|
||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
|
|
||||||
@ -1997,7 +1995,6 @@ backsql_search( Operation *op, SlapReply *rs )
|
|||||||
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* NOTE: __NEW__ "search" access is required
|
/* NOTE: __NEW__ "search" access is required
|
||||||
* on searchBase object */
|
* on searchBase object */
|
||||||
{
|
{
|
||||||
@ -2028,7 +2025,6 @@ backsql_search( Operation *op, SlapReply *rs )
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
|
|
||||||
bsi.bsi_e = NULL;
|
bsi.bsi_e = NULL;
|
||||||
|
|
||||||
|
@ -1420,13 +1420,8 @@ backend_group(
|
|||||||
|
|
||||||
be_orig = op->o_bd;
|
be_orig = op->o_bd;
|
||||||
op->o_bd = frontendDB;
|
op->o_bd = frontendDB;
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
rc = frontendDB->be_group( op, target, gr_ndn,
|
rc = frontendDB->be_group( op, target, gr_ndn,
|
||||||
op_ndn, group_oc, group_at );
|
op_ndn, group_oc, group_at );
|
||||||
#else /* ! SLAP_OVERLAY_ACCESS */
|
|
||||||
rc = fe_acl_group( op, target, gr_ndn,
|
|
||||||
op_ndn, group_oc, group_at );
|
|
||||||
#endif /* ! SLAP_OVERLAY_ACCESS */
|
|
||||||
op->o_bd = be_orig;
|
op->o_bd = be_orig;
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@ -1573,13 +1568,8 @@ backend_attribute(
|
|||||||
|
|
||||||
be_orig = op->o_bd;
|
be_orig = op->o_bd;
|
||||||
op->o_bd = frontendDB;
|
op->o_bd = frontendDB;
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
rc = frontendDB->be_attribute( op, target, edn,
|
rc = frontendDB->be_attribute( op, target, edn,
|
||||||
entry_at, vals, access );
|
entry_at, vals, access );
|
||||||
#else /* !SLAP_OVERLAY_ACCESS */
|
|
||||||
rc = fe_acl_attribute( op, target, edn,
|
|
||||||
entry_at, vals, access );
|
|
||||||
#endif /* !SLAP_OVERLAY_ACCESS */
|
|
||||||
op->o_bd = be_orig;
|
op->o_bd = be_orig;
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -239,7 +239,6 @@ over_back_response ( Operation *op, SlapReply *rs )
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
static int
|
static int
|
||||||
over_access_allowed(
|
over_access_allowed(
|
||||||
Operation *op,
|
Operation *op,
|
||||||
@ -450,7 +449,6 @@ over_acl_attribute(
|
|||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* default return code in case of missing backend function
|
* default return code in case of missing backend function
|
||||||
@ -1018,12 +1016,10 @@ overlay_config( BackendDB *be, const char *ov )
|
|||||||
bi->bi_chk_referrals = over_aux_chk_referrals;
|
bi->bi_chk_referrals = over_aux_chk_referrals;
|
||||||
bi->bi_chk_controls = over_aux_chk_controls;
|
bi->bi_chk_controls = over_aux_chk_controls;
|
||||||
|
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
/* these have specific arglists */
|
/* these have specific arglists */
|
||||||
bi->bi_access_allowed = over_access_allowed;
|
bi->bi_access_allowed = over_access_allowed;
|
||||||
bi->bi_acl_group = over_acl_group;
|
bi->bi_acl_group = over_acl_group;
|
||||||
bi->bi_acl_attribute = over_acl_attribute;
|
bi->bi_acl_attribute = over_acl_attribute;
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
bi->bi_connection_init = over_connection_init;
|
bi->bi_connection_init = over_connection_init;
|
||||||
bi->bi_connection_destroy = over_connection_destroy;
|
bi->bi_connection_destroy = over_connection_destroy;
|
||||||
|
@ -4928,9 +4928,7 @@ config_back_initialize( BackendInfo *bi )
|
|||||||
|
|
||||||
bi->bi_chk_referrals = 0;
|
bi->bi_chk_referrals = 0;
|
||||||
|
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
bi->bi_access_allowed = slap_access_always_allowed;
|
bi->bi_access_allowed = slap_access_always_allowed;
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
bi->bi_connection_init = 0;
|
bi->bi_connection_init = 0;
|
||||||
bi->bi_connection_destroy = 0;
|
bi->bi_connection_destroy = 0;
|
||||||
|
@ -284,7 +284,6 @@ fe_op_compare( Operation *op, SlapReply *rs )
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return error only if "disclose"
|
/* return error only if "disclose"
|
||||||
* is granted on the object */
|
* is granted on the object */
|
||||||
if ( backend_access( op, NULL, &op->o_req_ndn,
|
if ( backend_access( op, NULL, &op->o_req_ndn,
|
||||||
@ -293,7 +292,6 @@ fe_op_compare( Operation *op, SlapReply *rs )
|
|||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
@ -328,7 +326,6 @@ fe_op_compare( Operation *op, SlapReply *rs )
|
|||||||
ava.aa_desc, &vals, ACL_COMPARE );
|
ava.aa_desc, &vals, ACL_COMPARE );
|
||||||
switch ( rs->sr_err ) {
|
switch ( rs->sr_err ) {
|
||||||
default:
|
default:
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return error only if "disclose"
|
/* return error only if "disclose"
|
||||||
* is granted on the object */
|
* is granted on the object */
|
||||||
if ( backend_access( op, NULL, &op->o_req_ndn,
|
if ( backend_access( op, NULL, &op->o_req_ndn,
|
||||||
@ -338,7 +335,6 @@ fe_op_compare( Operation *op, SlapReply *rs )
|
|||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LDAP_SUCCESS:
|
case LDAP_SUCCESS:
|
||||||
@ -416,7 +412,6 @@ static int compare_entry(
|
|||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
#ifdef LDAP_ACL_HONOR_DISCLOSE
|
|
||||||
if( rc != LDAP_COMPARE_TRUE && rc != LDAP_COMPARE_FALSE ) {
|
if( rc != LDAP_COMPARE_TRUE && rc != LDAP_COMPARE_FALSE ) {
|
||||||
if ( ! access_allowed( op, e,
|
if ( ! access_allowed( op, e,
|
||||||
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE, NULL ) )
|
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE, NULL ) )
|
||||||
@ -424,7 +419,6 @@ done:
|
|||||||
rc = LDAP_NO_SUCH_OBJECT;
|
rc = LDAP_NO_SUCH_OBJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -269,23 +269,14 @@ str2entry2( char *s, int checkvals )
|
|||||||
ad->ad_type->sat_syntax->ssyn_pretty;
|
ad->ad_type->sat_syntax->ssyn_pretty;
|
||||||
|
|
||||||
if ( pretty ) {
|
if ( pretty ) {
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
rc = ordered_value_pretty( ad,
|
rc = ordered_value_pretty( ad,
|
||||||
&vals[i], &pval, NULL );
|
&vals[i], &pval, NULL );
|
||||||
#else /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
rc = pretty( ad->ad_type->sat_syntax,
|
|
||||||
&vals[i], &pval, NULL );
|
|
||||||
#endif /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
|
|
||||||
} else if ( validate ) {
|
} else if ( validate ) {
|
||||||
/*
|
/*
|
||||||
* validate value per syntax
|
* validate value per syntax
|
||||||
*/
|
*/
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
rc = ordered_value_validate( ad, &vals[i], LDAP_MOD_ADD );
|
rc = ordered_value_validate( ad, &vals[i], LDAP_MOD_ADD );
|
||||||
#else /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
rc = validate( ad->ad_type->sat_syntax, &vals[i] );
|
|
||||||
#endif /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Debug( LDAP_DEBUG_ANY,
|
Debug( LDAP_DEBUG_ANY,
|
||||||
@ -315,19 +306,11 @@ str2entry2( char *s, int checkvals )
|
|||||||
if ( ad->ad_type->sat_equality &&
|
if ( ad->ad_type->sat_equality &&
|
||||||
ad->ad_type->sat_equality->smr_normalize )
|
ad->ad_type->sat_equality->smr_normalize )
|
||||||
{
|
{
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
rc = ordered_value_normalize(
|
rc = ordered_value_normalize(
|
||||||
SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
|
SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
|
||||||
ad,
|
ad,
|
||||||
ad->ad_type->sat_equality,
|
ad->ad_type->sat_equality,
|
||||||
&vals[i], &nvals[i], NULL );
|
&vals[i], &nvals[i], NULL );
|
||||||
#else /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
rc = ad->ad_type->sat_equality->smr_normalize(
|
|
||||||
SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
|
|
||||||
ad->ad_type->sat_syntax,
|
|
||||||
ad->ad_type->sat_equality,
|
|
||||||
&vals[i], &nvals[i], NULL );
|
|
||||||
#endif /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
|
|
||||||
if ( rc ) {
|
if ( rc ) {
|
||||||
Debug( LDAP_DEBUG_ANY,
|
Debug( LDAP_DEBUG_ANY,
|
||||||
|
@ -119,11 +119,9 @@ frontend_init( void )
|
|||||||
frontendDB->bd_info->bi_entry_get_rw = fe_entry_get_rw;
|
frontendDB->bd_info->bi_entry_get_rw = fe_entry_get_rw;
|
||||||
frontendDB->bd_info->bi_entry_release_rw = fe_entry_release_rw;
|
frontendDB->bd_info->bi_entry_release_rw = fe_entry_release_rw;
|
||||||
#endif
|
#endif
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
frontendDB->bd_info->bi_access_allowed = fe_access_allowed;
|
frontendDB->bd_info->bi_access_allowed = fe_access_allowed;
|
||||||
frontendDB->bd_info->bi_acl_group = fe_acl_group;
|
frontendDB->bd_info->bi_acl_group = fe_acl_group;
|
||||||
frontendDB->bd_info->bi_acl_attribute = fe_acl_attribute;
|
frontendDB->bd_info->bi_acl_attribute = fe_acl_attribute;
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* FIXME: is this too early? */
|
/* FIXME: is this too early? */
|
||||||
|
@ -656,21 +656,11 @@ int slap_mods_check(
|
|||||||
struct berval pval;
|
struct berval pval;
|
||||||
|
|
||||||
if ( pretty ) {
|
if ( pretty ) {
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
rc = ordered_value_pretty( ad,
|
rc = ordered_value_pretty( ad,
|
||||||
&ml->sml_values[nvals], &pval, ctx );
|
&ml->sml_values[nvals], &pval, ctx );
|
||||||
#else /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
rc = pretty( ad->ad_type->sat_syntax,
|
|
||||||
&ml->sml_values[nvals], &pval, ctx );
|
|
||||||
#endif /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
} else {
|
} else {
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
rc = ordered_value_validate( ad,
|
rc = ordered_value_validate( ad,
|
||||||
&ml->sml_values[nvals], ml->sml_op );
|
&ml->sml_values[nvals], ml->sml_op );
|
||||||
#else /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
rc = validate( ad->ad_type->sat_syntax,
|
|
||||||
&ml->sml_values[nvals] );
|
|
||||||
#endif /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( rc != 0 ) {
|
if( rc != 0 ) {
|
||||||
@ -716,19 +706,11 @@ int slap_mods_check(
|
|||||||
(nvals+1)*sizeof(struct berval), ctx );
|
(nvals+1)*sizeof(struct berval), ctx );
|
||||||
|
|
||||||
for ( nvals = 0; !BER_BVISNULL( &ml->sml_values[nvals] ); nvals++ ) {
|
for ( nvals = 0; !BER_BVISNULL( &ml->sml_values[nvals] ); nvals++ ) {
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
rc = ordered_value_normalize(
|
rc = ordered_value_normalize(
|
||||||
SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
|
SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
|
||||||
ad,
|
ad,
|
||||||
ad->ad_type->sat_equality,
|
ad->ad_type->sat_equality,
|
||||||
&ml->sml_values[nvals], &ml->sml_nvalues[nvals], ctx );
|
&ml->sml_values[nvals], &ml->sml_nvalues[nvals], ctx );
|
||||||
#else /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
rc = ad->ad_type->sat_equality->smr_normalize(
|
|
||||||
SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
|
|
||||||
ad->ad_type->sat_syntax,
|
|
||||||
ad->ad_type->sat_equality,
|
|
||||||
&ml->sml_values[nvals], &ml->sml_nvalues[nvals], ctx );
|
|
||||||
#endif /* ! SLAP_ORDERED_PRETTYNORM */
|
|
||||||
if ( rc ) {
|
if ( rc ) {
|
||||||
Debug( LDAP_DEBUG_ANY,
|
Debug( LDAP_DEBUG_ANY,
|
||||||
"<= str2entry NULL (ssyn_normalize %d)\n",
|
"<= str2entry NULL (ssyn_normalize %d)\n",
|
||||||
|
@ -357,7 +357,6 @@ dds_op_add( Operation *op, SlapReply *rs )
|
|||||||
slap_schema.si_oc_dynamicObject, NULL, 0, &e );
|
slap_schema.si_oc_dynamicObject, NULL, 0, &e );
|
||||||
if ( rc == LDAP_SUCCESS && e != NULL ) {
|
if ( rc == LDAP_SUCCESS && e != NULL ) {
|
||||||
if ( !is_dynamicObject ) {
|
if ( !is_dynamicObject ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return referral only if "disclose"
|
/* return referral only if "disclose"
|
||||||
* is granted on the object */
|
* is granted on the object */
|
||||||
if ( ! access_allowed( op, e,
|
if ( ! access_allowed( op, e,
|
||||||
@ -367,9 +366,7 @@ dds_op_add( Operation *op, SlapReply *rs )
|
|||||||
rc = rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rc = rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rc = rs->sr_err = LDAP_CONSTRAINT_VIOLATION;
|
rc = rs->sr_err = LDAP_CONSTRAINT_VIOLATION;
|
||||||
send_ldap_error( op, rs, rc, "no static subordinate entries allowed for dynamicObject" );
|
send_ldap_error( op, rs, rc, "no static subordinate entries allowed for dynamicObject" );
|
||||||
}
|
}
|
||||||
@ -580,15 +577,12 @@ dds_op_modify( Operation *op, SlapReply *rs )
|
|||||||
if ( BER_BVISEMPTY( &bv_entryTtl )
|
if ( BER_BVISEMPTY( &bv_entryTtl )
|
||||||
|| !bvmatch( &bv_entryTtl, &mod->sml_values[ 0 ] ) )
|
|| !bvmatch( &bv_entryTtl, &mod->sml_values[ 0 ] ) )
|
||||||
{
|
{
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
rs->sr_err = backend_attribute( op, NULL, &op->o_req_ndn,
|
rs->sr_err = backend_attribute( op, NULL, &op->o_req_ndn,
|
||||||
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
||||||
if ( rs->sr_err == LDAP_INSUFFICIENT_ACCESS ) {
|
if ( rs->sr_err == LDAP_INSUFFICIENT_ACCESS ) {
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_err = LDAP_NO_SUCH_ATTRIBUTE;
|
rs->sr_err = LDAP_NO_SUCH_ATTRIBUTE;
|
||||||
}
|
}
|
||||||
goto done;
|
goto done;
|
||||||
@ -609,15 +603,12 @@ dds_op_modify( Operation *op, SlapReply *rs )
|
|||||||
assert( BER_BVISNULL( &mod->sml_values[ 1 ] ) );
|
assert( BER_BVISNULL( &mod->sml_values[ 1 ] ) );
|
||||||
|
|
||||||
if ( !BER_BVISEMPTY( &bv_entryTtl ) ) {
|
if ( !BER_BVISEMPTY( &bv_entryTtl ) ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
rs->sr_err = backend_attribute( op, NULL, &op->o_req_ndn,
|
rs->sr_err = backend_attribute( op, NULL, &op->o_req_ndn,
|
||||||
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
||||||
if ( rs->sr_err == LDAP_INSUFFICIENT_ACCESS ) {
|
if ( rs->sr_err == LDAP_INSUFFICIENT_ACCESS ) {
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_text = "attribute 'entryTtl' cannot have multiple values";
|
rs->sr_text = "attribute 'entryTtl' cannot have multiple values";
|
||||||
rs->sr_err = LDAP_CONSTRAINT_VIOLATION;
|
rs->sr_err = LDAP_CONSTRAINT_VIOLATION;
|
||||||
}
|
}
|
||||||
@ -649,15 +640,12 @@ dds_op_modify( Operation *op, SlapReply *rs )
|
|||||||
|
|
||||||
case LDAP_MOD_INCREMENT:
|
case LDAP_MOD_INCREMENT:
|
||||||
if ( BER_BVISEMPTY( &bv_entryTtl ) ) {
|
if ( BER_BVISEMPTY( &bv_entryTtl ) ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
rs->sr_err = backend_attribute( op, NULL, &op->o_req_ndn,
|
rs->sr_err = backend_attribute( op, NULL, &op->o_req_ndn,
|
||||||
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
||||||
if ( rs->sr_err == LDAP_INSUFFICIENT_ACCESS ) {
|
if ( rs->sr_err == LDAP_INSUFFICIENT_ACCESS ) {
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_err = LDAP_NO_SUCH_ATTRIBUTE;
|
rs->sr_err = LDAP_NO_SUCH_ATTRIBUTE;
|
||||||
rs->sr_text = "modify/increment: entryTtl: no such attribute";
|
rs->sr_text = "modify/increment: entryTtl: no such attribute";
|
||||||
}
|
}
|
||||||
@ -678,7 +666,6 @@ dds_op_modify( Operation *op, SlapReply *rs )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( rs->sr_err != LDAP_SUCCESS ) {
|
if ( rs->sr_err != LDAP_SUCCESS ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
rc = backend_attribute( op, NULL, &op->o_req_ndn,
|
rc = backend_attribute( op, NULL, &op->o_req_ndn,
|
||||||
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
||||||
if ( rc == LDAP_INSUFFICIENT_ACCESS ) {
|
if ( rc == LDAP_INSUFFICIENT_ACCESS ) {
|
||||||
@ -686,7 +673,6 @@ dds_op_modify( Operation *op, SlapReply *rs )
|
|||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -761,7 +747,6 @@ done:;
|
|||||||
rs->sr_err = LDAP_OBJECT_CLASS_VIOLATION;
|
rs->sr_err = LDAP_OBJECT_CLASS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
if ( rc != LDAP_SUCCESS ) {
|
if ( rc != LDAP_SUCCESS ) {
|
||||||
rc = backend_attribute( op, NULL, &op->o_req_ndn,
|
rc = backend_attribute( op, NULL, &op->o_req_ndn,
|
||||||
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
slap_schema.si_ad_entry, NULL, ACL_DISCLOSE );
|
||||||
@ -770,7 +755,6 @@ done:;
|
|||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -850,7 +834,6 @@ dds_op_rename( Operation *op, SlapReply *rs )
|
|||||||
slap_schema.si_oc_dynamicObject, NULL, 0, &e );
|
slap_schema.si_oc_dynamicObject, NULL, 0, &e );
|
||||||
if ( rc == LDAP_SUCCESS && e != NULL ) {
|
if ( rc == LDAP_SUCCESS && e != NULL ) {
|
||||||
if ( !is_dynamicObject ) {
|
if ( !is_dynamicObject ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return referral only if "disclose"
|
/* return referral only if "disclose"
|
||||||
* is granted on the object */
|
* is granted on the object */
|
||||||
if ( ! access_allowed( op, e,
|
if ( ! access_allowed( op, e,
|
||||||
@ -860,9 +843,7 @@ dds_op_rename( Operation *op, SlapReply *rs )
|
|||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
send_ldap_result( op, rs );
|
send_ldap_result( op, rs );
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
send_ldap_error( op, rs, LDAP_CONSTRAINT_VIOLATION,
|
send_ldap_error( op, rs, LDAP_CONSTRAINT_VIOLATION,
|
||||||
"static entry cannot have dynamicObject as newSuperior" );
|
"static entry cannot have dynamicObject as newSuperior" );
|
||||||
}
|
}
|
||||||
@ -1072,7 +1053,6 @@ dds_op_extended( Operation *op, SlapReply *rs )
|
|||||||
rs->sr_err = be_entry_get_rw( op, &op->o_req_ndn,
|
rs->sr_err = be_entry_get_rw( op, &op->o_req_ndn,
|
||||||
NULL, NULL, 0, &e );
|
NULL, NULL, 0, &e );
|
||||||
if ( rs->sr_err == LDAP_SUCCESS && e != NULL ) {
|
if ( rs->sr_err == LDAP_SUCCESS && e != NULL ) {
|
||||||
#ifdef SLAP_ACL_HONOR_DISCLOSE
|
|
||||||
/* return referral only if "disclose"
|
/* return referral only if "disclose"
|
||||||
* is granted on the object */
|
* is granted on the object */
|
||||||
if ( ! access_allowed( op, e,
|
if ( ! access_allowed( op, e,
|
||||||
@ -1081,9 +1061,7 @@ dds_op_extended( Operation *op, SlapReply *rs )
|
|||||||
{
|
{
|
||||||
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
#endif /* SLAP_ACL_HONOR_DISCLOSE */
|
|
||||||
{
|
|
||||||
rs->sr_err = LDAP_OBJECT_CLASS_VIOLATION;
|
rs->sr_err = LDAP_OBJECT_CLASS_VIOLATION;
|
||||||
rs->sr_text = "refresh operation only applies to dynamic objects";
|
rs->sr_text = "refresh operation only applies to dynamic objects";
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,6 @@ LDAP_SLAPD_F (int) access_allowed_mask LDAP_P((
|
|||||||
AccessControlState *state,
|
AccessControlState *state,
|
||||||
slap_mask_t *mask ));
|
slap_mask_t *mask ));
|
||||||
#define access_allowed(op,e,desc,val,access,state) access_allowed_mask(op,e,desc,val,access,state,NULL)
|
#define access_allowed(op,e,desc,val,access,state) access_allowed_mask(op,e,desc,val,access,state,NULL)
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
LDAP_SLAPD_F (int) slap_access_allowed LDAP_P((
|
LDAP_SLAPD_F (int) slap_access_allowed LDAP_P((
|
||||||
Operation *op,
|
Operation *op,
|
||||||
Entry *e,
|
Entry *e,
|
||||||
@ -67,7 +66,6 @@ LDAP_SLAPD_F (int) slap_access_always_allowed LDAP_P((
|
|||||||
slap_access_t access,
|
slap_access_t access,
|
||||||
AccessControlState *state,
|
AccessControlState *state,
|
||||||
slap_mask_t *maskp ));
|
slap_mask_t *maskp ));
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
LDAP_SLAPD_F (int) acl_check_modlist LDAP_P((
|
LDAP_SLAPD_F (int) acl_check_modlist LDAP_P((
|
||||||
Operation *op, Entry *e, Modifications *ml ));
|
Operation *op, Entry *e, Modifications *ml ));
|
||||||
@ -1440,7 +1438,6 @@ LDAP_SLAPD_F (int) slap_sasl_rewrite_config LDAP_P((
|
|||||||
int argc,
|
int argc,
|
||||||
char **argv ));
|
char **argv ));
|
||||||
#endif /* SLAP_AUTH_REWRITE */
|
#endif /* SLAP_AUTH_REWRITE */
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
LDAP_SLAPD_F (int) authzValidate LDAP_P((
|
LDAP_SLAPD_F (int) authzValidate LDAP_P((
|
||||||
Syntax *syn, struct berval *in ));
|
Syntax *syn, struct berval *in ));
|
||||||
#if 0
|
#if 0
|
||||||
@ -1464,7 +1461,6 @@ LDAP_SLAPD_F (int) authzNormalize LDAP_P((
|
|||||||
struct berval *val,
|
struct berval *val,
|
||||||
struct berval *normalized,
|
struct berval *normalized,
|
||||||
void *ctx ));
|
void *ctx ));
|
||||||
#endif /* SLAP_AUTHZ_SYNTAX */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* schema.c
|
* schema.c
|
||||||
|
@ -202,7 +202,6 @@ int slap_parse_user( struct berval *id, struct berval *user,
|
|||||||
return LDAP_SUCCESS;
|
return LDAP_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
int
|
int
|
||||||
authzValidate(
|
authzValidate(
|
||||||
Syntax *syntax,
|
Syntax *syntax,
|
||||||
@ -919,7 +918,6 @@ authzPretty(
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SLAP_AUTHZ_SYNTAX */
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
slap_parseURI(
|
slap_parseURI(
|
||||||
@ -936,9 +934,7 @@ slap_parseURI(
|
|||||||
int rc;
|
int rc;
|
||||||
LDAPURLDesc *ludp;
|
LDAPURLDesc *ludp;
|
||||||
|
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
struct berval idx;
|
struct berval idx;
|
||||||
#endif /* SLAP_ORDERED_PRETTYNORM */
|
|
||||||
|
|
||||||
assert( uri != NULL && !BER_BVISNULL( uri ) );
|
assert( uri != NULL && !BER_BVISNULL( uri ) );
|
||||||
BER_BVZERO( base );
|
BER_BVZERO( base );
|
||||||
@ -952,7 +948,6 @@ slap_parseURI(
|
|||||||
|
|
||||||
rc = LDAP_PROTOCOL_ERROR;
|
rc = LDAP_PROTOCOL_ERROR;
|
||||||
|
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
idx = *uri;
|
idx = *uri;
|
||||||
if ( idx.bv_val[ 0 ] == '{' ) {
|
if ( idx.bv_val[ 0 ] == '{' ) {
|
||||||
char *ptr;
|
char *ptr;
|
||||||
@ -965,7 +960,6 @@ slap_parseURI(
|
|||||||
idx.bv_val = ptr;
|
idx.bv_val = ptr;
|
||||||
uri = &idx;
|
uri = &idx;
|
||||||
}
|
}
|
||||||
#endif /* SLAP_ORDERED_PRETTYNORM */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dn[.<dnstyle>]:<dnpattern>
|
* dn[.<dnstyle>]:<dnpattern>
|
||||||
@ -1677,13 +1671,7 @@ slap_sasl_match( Operation *opx, struct berval *rule,
|
|||||||
|
|
||||||
/* NOTE: don't normalize rule if authz syntax is enabled */
|
/* NOTE: don't normalize rule if authz syntax is enabled */
|
||||||
rc = slap_parseURI( opx, rule, &base, &op.o_req_ndn,
|
rc = slap_parseURI( opx, rule, &base, &op.o_req_ndn,
|
||||||
&op.ors_scope, &op.ors_filter, &op.ors_filterstr,
|
&op.ors_scope, &op.ors_filter, &op.ors_filterstr, 0 );
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
0
|
|
||||||
#else /* ! SLAP_AUTHZ_SYNTAX */
|
|
||||||
1
|
|
||||||
#endif /* ! SLAP_AUTHZ_SYNTAX */
|
|
||||||
);
|
|
||||||
|
|
||||||
if( rc != LDAP_SUCCESS ) goto CONCLUDED;
|
if( rc != LDAP_SUCCESS ) goto CONCLUDED;
|
||||||
|
|
||||||
|
@ -67,10 +67,8 @@
|
|||||||
#define csnIndexer generalizedTimeIndexer
|
#define csnIndexer generalizedTimeIndexer
|
||||||
#define csnFilter generalizedTimeFilter
|
#define csnFilter generalizedTimeFilter
|
||||||
|
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
/* FIXME: temporary */
|
/* FIXME: temporary */
|
||||||
#define authzMatch octetStringMatch
|
#define authzMatch octetStringMatch
|
||||||
#endif /* SLAP_AUTHZ_SYNTAX */
|
|
||||||
|
|
||||||
unsigned int index_substr_if_minlen = SLAP_INDEX_SUBSTR_IF_MINLEN_DEFAULT;
|
unsigned int index_substr_if_minlen = SLAP_INDEX_SUBSTR_IF_MINLEN_DEFAULT;
|
||||||
unsigned int index_substr_if_maxlen = SLAP_INDEX_SUBSTR_IF_MAXLEN_DEFAULT;
|
unsigned int index_substr_if_maxlen = SLAP_INDEX_SUBSTR_IF_MAXLEN_DEFAULT;
|
||||||
@ -4180,11 +4178,9 @@ static slap_syntax_defs_rec syntax_defs[] = {
|
|||||||
{"( 1.3.6.1.4.1.4203.1.1.1 DESC 'OpenLDAP void' )" ,
|
{"( 1.3.6.1.4.1.4203.1.1.1 DESC 'OpenLDAP void' )" ,
|
||||||
SLAP_SYNTAX_HIDE, inValidate, NULL},
|
SLAP_SYNTAX_HIDE, inValidate, NULL},
|
||||||
|
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
/* FIXME: OID is unused, but not registered yet */
|
/* FIXME: OID is unused, but not registered yet */
|
||||||
{"( 1.3.6.1.4.1.4203.666.2.7 DESC 'OpenLDAP authz' )",
|
{"( 1.3.6.1.4.1.4203.666.2.7 DESC 'OpenLDAP authz' )",
|
||||||
SLAP_SYNTAX_HIDE, authzValidate, authzPretty},
|
SLAP_SYNTAX_HIDE, authzValidate, authzPretty},
|
||||||
#endif /* SLAP_AUTHZ_SYNTAX */
|
|
||||||
|
|
||||||
{NULL, 0, NULL, NULL}
|
{NULL, 0, NULL, NULL}
|
||||||
};
|
};
|
||||||
@ -4618,7 +4614,6 @@ static slap_mrule_defs_rec mrule_defs[] = {
|
|||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
"CSNMatch" },
|
"CSNMatch" },
|
||||||
|
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
/* FIXME: OID is unused, but not registered yet */
|
/* FIXME: OID is unused, but not registered yet */
|
||||||
{"( 1.3.6.1.4.1.4203.666.4.12 NAME 'authzMatch' "
|
{"( 1.3.6.1.4.1.4203.666.4.12 NAME 'authzMatch' "
|
||||||
"SYNTAX 1.3.6.1.4.1.4203.666.2.7 )",
|
"SYNTAX 1.3.6.1.4.1.4203.666.2.7 )",
|
||||||
@ -4626,7 +4621,6 @@ static slap_mrule_defs_rec mrule_defs[] = {
|
|||||||
NULL, authzNormalize, authzMatch,
|
NULL, authzNormalize, authzMatch,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
NULL},
|
NULL},
|
||||||
#endif /* SLAP_AUTHZ_SYNTAX */
|
|
||||||
|
|
||||||
{NULL, SLAP_MR_NONE, NULL,
|
{NULL, SLAP_MR_NONE, NULL,
|
||||||
NULL, NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL, NULL,
|
||||||
|
@ -855,16 +855,9 @@ static struct slap_schema_ad_map {
|
|||||||
{ "authzTo", "( 1.3.6.1.4.1.4203.666.1.8 "
|
{ "authzTo", "( 1.3.6.1.4.1.4203.666.1.8 "
|
||||||
"NAME ( 'authzTo' 'saslAuthzTo' ) "
|
"NAME ( 'authzTo' 'saslAuthzTo' ) "
|
||||||
"DESC 'proxy authorization targets' "
|
"DESC 'proxy authorization targets' "
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
"EQUALITY authzMatch "
|
"EQUALITY authzMatch "
|
||||||
"SYNTAX 1.3.6.1.4.1.4203.666.2.7 "
|
"SYNTAX 1.3.6.1.4.1.4203.666.2.7 "
|
||||||
#else /* ! SLAP_AUTHZ_SYNTAX */
|
|
||||||
"EQUALITY caseExactMatch "
|
|
||||||
"SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 "
|
|
||||||
#endif /* ! SLAP_AUTHZ_SYNTAX */
|
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
"X-ORDERED 'VALUES' "
|
"X-ORDERED 'VALUES' "
|
||||||
#endif /* SLAP_ORDERED_PRETTYNORM */
|
|
||||||
"USAGE distributedOperation )",
|
"USAGE distributedOperation )",
|
||||||
NULL, SLAP_AT_HIDE,
|
NULL, SLAP_AT_HIDE,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
@ -873,16 +866,9 @@ static struct slap_schema_ad_map {
|
|||||||
{ "authzFrom", "( 1.3.6.1.4.1.4203.666.1.9 "
|
{ "authzFrom", "( 1.3.6.1.4.1.4203.666.1.9 "
|
||||||
"NAME ( 'authzFrom' 'saslAuthzFrom' ) "
|
"NAME ( 'authzFrom' 'saslAuthzFrom' ) "
|
||||||
"DESC 'proxy authorization sources' "
|
"DESC 'proxy authorization sources' "
|
||||||
#ifdef SLAP_AUTHZ_SYNTAX
|
|
||||||
"EQUALITY authzMatch "
|
"EQUALITY authzMatch "
|
||||||
"SYNTAX 1.3.6.1.4.1.4203.666.2.7 "
|
"SYNTAX 1.3.6.1.4.1.4203.666.2.7 "
|
||||||
#else /* ! SLAP_AUTHZ_SYNTAX */
|
|
||||||
"EQUALITY caseExactMatch "
|
|
||||||
"SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 "
|
|
||||||
#endif /* ! SLAP_AUTHZ_SYNTAX */
|
|
||||||
#ifdef SLAP_ORDERED_PRETTYNORM
|
|
||||||
"X-ORDERED 'VALUES' "
|
"X-ORDERED 'VALUES' "
|
||||||
#endif /* SLAP_ORDERED_PRETTYNORM */
|
|
||||||
"USAGE distributedOperation )",
|
"USAGE distributedOperation )",
|
||||||
NULL, SLAP_AT_HIDE,
|
NULL, SLAP_AT_HIDE,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
|
@ -64,26 +64,19 @@ LDAP_BEGIN_DECL
|
|||||||
#define SLAP_SEM_LOAD_CONTROL
|
#define SLAP_SEM_LOAD_CONTROL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SLAP_ACL_HONOR_DISCLOSE /* partially implemented */
|
#ifdef LDAP_DEVEL
|
||||||
#define SLAP_ACL_HONOR_MANAGE /* not yet implemented */
|
|
||||||
#define SLAP_OVERLAY_ACCESS
|
|
||||||
#define LDAP_COMP_MATCH
|
|
||||||
#define LDAP_DYNAMIC_OBJECTS
|
|
||||||
#define LDAP_SYNC_TIMESTAMP
|
|
||||||
#define LDAP_COLLECTIVE_ATTRIBUTES
|
#define LDAP_COLLECTIVE_ATTRIBUTES
|
||||||
#define SLAP_CONTROL_X_TREE_DELETE LDAP_CONTROL_X_TREE_DELETE
|
#define LDAP_COMP_MATCH
|
||||||
|
#define LDAP_SYNC_TIMESTAMP
|
||||||
|
#endif
|
||||||
|
|
||||||
#define SLAP_ORDERED_PRETTYNORM
|
#define LDAP_DYNAMIC_OBJECTS
|
||||||
#define SLAP_AUTHZ_SYNTAX
|
#define SLAP_CONTROL_X_TREE_DELETE LDAP_CONTROL_X_TREE_DELETE
|
||||||
|
|
||||||
#ifdef ENABLE_REWRITE
|
#ifdef ENABLE_REWRITE
|
||||||
#define SLAP_AUTH_REWRITE 1 /* use librewrite for sasl-regexp */
|
#define SLAP_AUTH_REWRITE 1 /* use librewrite for sasl-regexp */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(LDAP_SLAPI) && !defined(SLAP_OVERLAY_ACCESS)
|
|
||||||
#define SLAP_OVERLAY_ACCESS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SLAPD Memory allocation macros
|
* SLAPD Memory allocation macros
|
||||||
*
|
*
|
||||||
@ -2019,7 +2012,6 @@ typedef int (BI_entry_get_rw) LDAP_P(( struct slap_op *op, struct berval *ndn,
|
|||||||
typedef int (BI_operational) LDAP_P(( struct slap_op *op, struct slap_rep *rs ));
|
typedef int (BI_operational) LDAP_P(( struct slap_op *op, struct slap_rep *rs ));
|
||||||
typedef int (BI_has_subordinates) LDAP_P(( struct slap_op *op,
|
typedef int (BI_has_subordinates) LDAP_P(( struct slap_op *op,
|
||||||
Entry *e, int *hasSubs ));
|
Entry *e, int *hasSubs ));
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
typedef int (BI_access_allowed) LDAP_P(( struct slap_op *op, Entry *e,
|
typedef int (BI_access_allowed) LDAP_P(( struct slap_op *op, Entry *e,
|
||||||
AttributeDescription *desc, struct berval *val, slap_access_t access,
|
AttributeDescription *desc, struct berval *val, slap_access_t access,
|
||||||
AccessControlState *state, slap_mask_t *maskp ));
|
AccessControlState *state, slap_mask_t *maskp ));
|
||||||
@ -2029,7 +2021,6 @@ typedef int (BI_acl_group) LDAP_P(( struct slap_op *op, Entry *target,
|
|||||||
typedef int (BI_acl_attribute) LDAP_P(( struct slap_op *op, Entry *target,
|
typedef int (BI_acl_attribute) LDAP_P(( struct slap_op *op, Entry *target,
|
||||||
struct berval *entry_ndn, AttributeDescription *entry_at,
|
struct berval *entry_ndn, AttributeDescription *entry_at,
|
||||||
BerVarray *vals, slap_access_t access ));
|
BerVarray *vals, slap_access_t access ));
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
typedef int (BI_conn_func) LDAP_P(( BackendDB *bd, struct slap_conn *c ));
|
typedef int (BI_conn_func) LDAP_P(( BackendDB *bd, struct slap_conn *c ));
|
||||||
typedef BI_conn_func BI_connection_init;
|
typedef BI_conn_func BI_connection_init;
|
||||||
@ -2128,11 +2119,9 @@ struct slap_backend_info {
|
|||||||
BI_entry_release_rw *bi_entry_release_rw;
|
BI_entry_release_rw *bi_entry_release_rw;
|
||||||
|
|
||||||
BI_has_subordinates *bi_has_subordinates;
|
BI_has_subordinates *bi_has_subordinates;
|
||||||
#ifdef SLAP_OVERLAY_ACCESS
|
|
||||||
BI_access_allowed *bi_access_allowed;
|
BI_access_allowed *bi_access_allowed;
|
||||||
BI_acl_group *bi_acl_group;
|
BI_acl_group *bi_acl_group;
|
||||||
BI_acl_attribute *bi_acl_attribute;
|
BI_acl_attribute *bi_acl_attribute;
|
||||||
#endif /* SLAP_OVERLAY_ACCESS */
|
|
||||||
|
|
||||||
BI_connection_init *bi_connection_init;
|
BI_connection_init *bi_connection_init;
|
||||||
BI_connection_destroy *bi_connection_destroy;
|
BI_connection_destroy *bi_connection_destroy;
|
||||||
|
Loading…
Reference in New Issue
Block a user