Commit 80b5255f authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

ITS#6159

parent a7f4102b
......@@ -14,6 +14,7 @@ OpenLDAP 2.4.17 Engineering
Fixed slapd global alloc handling (ITS#6054)
Fixed slapd moduleload with static backends and modules (ITS#6016)
Fixed slapd normalization of updated schema attributes (ITS#5540)
Fixed slapd olcLimits handling (ITS#6159)
Fixed slapd pagedresults stacked control with overlays (ITS#6056)
Fixed slapd password-hash incorrect limit on arg length (ITS#6139)
Fixed slapd readonly restrictions (ITS#6109)
......
......@@ -1385,6 +1385,36 @@ config_generic(ConfigArgs *c) {
case CFG_LIMITS:
/* FIXME: there is no limits_free function */
if ( c->valx < 0 ) {
limits_destroy( c->be->be_limits );
c->be->be_limits = NULL;
} else {
int cnt, num = -1;
if ( c->be->be_limits ) {
for ( num = 0; c->be->be_limits[ num ]; num++ )
/* just count */ ;
}
if ( c->valx >= num ) {
return 1;
}
if ( num == 1 ) {
limits_destroy( c->be->be_limits );
c->be->be_limits = NULL;
} else {
limits_free_one( c->be->be_limits[ c->valx ] );
for ( cnt = c->valx; cnt < num; cnt++ ) {
c->be->be_limits[ cnt ] = c->be->be_limits[ cnt + 1 ];
}
}
}
break;
case CFG_ATOPT:
/* FIXME: there is no ad_option_free function */
case CFG_ROOTDSE:
......
......@@ -1324,6 +1324,19 @@ limits_check( Operation *op, SlapReply *rs )
return 0;
}
void
limits_free_one(
struct slap_limits *lm )
{
if ( ( lm->lm_flags & SLAP_LIMITS_MASK ) == SLAP_LIMITS_REGEX )
regfree( &lm->lm_regex );
if ( !BER_BVISNULL( &lm->lm_pat ) )
ch_free( lm->lm_pat.bv_val );
ch_free( lm );
}
void
limits_destroy(
struct slap_limits **lm )
......@@ -1335,13 +1348,7 @@ limits_destroy(
}
for ( i = 0; lm[ i ]; i++ ) {
if ( (lm[ i ]->lm_flags & SLAP_LIMITS_MASK) == SLAP_LIMITS_REGEX )
regfree( &lm[ i ]->lm_regex );
if ( !BER_BVISNULL( &lm[ i ]->lm_pat ) )
ch_free( lm[ i ]->lm_pat.bv_val );
ch_free( lm[ i ] );
limits_free_one( lm[ i ] );
}
ch_free( lm );
......
......@@ -1144,6 +1144,8 @@ LDAP_SLAPD_F (int) limits_unparse_one LDAP_P((
struct slap_limits_set *limit, int which, struct berval *bv, ber_len_t buflen ));
LDAP_SLAPD_F (int) limits_unparse LDAP_P((
struct slap_limits *limit, struct berval *bv, ber_len_t buflen ));
LDAP_SLAPD_F (void) limits_free_one LDAP_P((
struct slap_limits *lm ));
LDAP_SLAPD_F (void) limits_destroy LDAP_P(( struct slap_limits **lm ));
/*
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment