Skip to content
Snippets Groups Projects
Commit 6644e0e3 authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

Use ConfigReply to return error messages to the client

parent e8d6ae08
No related branches found
No related tags found
No related merge requests found
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "slap.h" #include "slap.h"
#include "back-bdb.h" #include "back-bdb.h"
#include "config.h"
#include "lutil.h" #include "lutil.h"
/* Find the ad, return -1 if not found, /* Find the ad, return -1 if not found,
...@@ -92,7 +93,8 @@ bdb_attr_index_config( ...@@ -92,7 +93,8 @@ bdb_attr_index_config(
const char *fname, const char *fname,
int lineno, int lineno,
int argc, int argc,
char **argv ) char **argv,
struct config_reply_s *c_reply)
{ {
int rc = 0; int rc = 0;
int i; int i;
...@@ -132,9 +134,14 @@ bdb_attr_index_config( ...@@ -132,9 +134,14 @@ bdb_attr_index_config(
rc = slap_str2index( indexes[i], &index ); rc = slap_str2index( indexes[i], &index );
if( rc != LDAP_SUCCESS ) { if( rc != LDAP_SUCCESS ) {
fprintf( stderr, "%s: line %d: " if ( c_reply )
"index type \"%s\" undefined\n", {
fname, lineno, indexes[i] ); snprintf(c_reply->msg, sizeof(c_reply->msg),
"index type \"%s\" undefined", indexes[i] );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
rc = LDAP_PARAM_ERROR; rc = LDAP_PARAM_ERROR;
goto done; goto done;
} }
...@@ -144,9 +151,13 @@ bdb_attr_index_config( ...@@ -144,9 +151,13 @@ bdb_attr_index_config(
} }
if( !mask ) { if( !mask ) {
fprintf( stderr, "%s: line %d: " if ( c_reply )
"no indexes selected\n", {
fname, lineno ); snprintf(c_reply->msg, sizeof(c_reply->msg),
"no indexes selected" );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
rc = LDAP_PARAM_ERROR; rc = LDAP_PARAM_ERROR;
goto done; goto done;
} }
...@@ -169,9 +180,14 @@ bdb_attr_index_config( ...@@ -169,9 +180,14 @@ bdb_attr_index_config(
if ( is_component_reference( attrs[i] ) ) { if ( is_component_reference( attrs[i] ) ) {
rc = extract_component_reference( attrs[i], &cr ); rc = extract_component_reference( attrs[i], &cr );
if ( rc != LDAP_SUCCESS ) { if ( rc != LDAP_SUCCESS ) {
fprintf( stderr, "%s: line %d: " if ( c_reply )
"index component reference\"%s\" undefined\n", {
fname, lineno, attrs[i] ); snprintf(c_reply->msg, sizeof(c_reply->msg),
"index component reference\"%s\" undefined",
attrs[i] );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
goto done; goto done;
} }
cr->cr_indexmask = mask; cr->cr_indexmask = mask;
...@@ -187,16 +203,25 @@ bdb_attr_index_config( ...@@ -187,16 +203,25 @@ bdb_attr_index_config(
rc = slap_str2ad( attrs[i], &ad, &text ); rc = slap_str2ad( attrs[i], &ad, &text );
if( rc != LDAP_SUCCESS ) { if( rc != LDAP_SUCCESS ) {
fprintf( stderr, "%s: line %d: " if ( c_reply )
"index attribute \"%s\" undefined\n", {
fname, lineno, attrs[i] ); snprintf(c_reply->msg, sizeof(c_reply->msg),
"index attribute \"%s\" undefined",
attrs[i] );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
goto done; goto done;
} }
if( slap_ad_is_binary( ad ) ) { if( slap_ad_is_binary( ad ) ) {
fprintf( stderr, "%s: line %d: " if (c_reply) {
"index of attribute \"%s\" disallowed\n", snprintf(c_reply->msg, sizeof(c_reply->msg),
fname, lineno, attrs[i] ); "index of attribute \"%s\" disallowed", attrs[i] );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
rc = LDAP_UNWILLING_TO_PERFORM; rc = LDAP_UNWILLING_TO_PERFORM;
goto done; goto done;
} }
...@@ -206,9 +231,12 @@ bdb_attr_index_config( ...@@ -206,9 +231,12 @@ bdb_attr_index_config(
&& ad->ad_type->sat_approx->smr_indexer && ad->ad_type->sat_approx->smr_indexer
&& ad->ad_type->sat_approx->smr_filter ) ) && ad->ad_type->sat_approx->smr_filter ) )
{ {
fprintf( stderr, "%s: line %d: " if (c_reply) {
"approx index of attribute \"%s\" disallowed\n", snprintf(c_reply->msg, sizeof(c_reply->msg),
fname, lineno, attrs[i] ); "approx index of attribute \"%s\" disallowed", attrs[i] );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
rc = LDAP_INAPPROPRIATE_MATCHING; rc = LDAP_INAPPROPRIATE_MATCHING;
goto done; goto done;
} }
...@@ -218,9 +246,12 @@ bdb_attr_index_config( ...@@ -218,9 +246,12 @@ bdb_attr_index_config(
&& ad->ad_type->sat_equality->smr_indexer && ad->ad_type->sat_equality->smr_indexer
&& ad->ad_type->sat_equality->smr_filter ) ) && ad->ad_type->sat_equality->smr_filter ) )
{ {
fprintf( stderr, "%s: line %d: " if (c_reply) {
"equality index of attribute \"%s\" disallowed\n", snprintf(c_reply->msg, sizeof(c_reply->msg),
fname, lineno, attrs[i] ); "equality index of attribute \"%s\" disallowed", attrs[i] );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
rc = LDAP_INAPPROPRIATE_MATCHING; rc = LDAP_INAPPROPRIATE_MATCHING;
goto done; goto done;
} }
...@@ -230,9 +261,12 @@ bdb_attr_index_config( ...@@ -230,9 +261,12 @@ bdb_attr_index_config(
&& ad->ad_type->sat_substr->smr_indexer && ad->ad_type->sat_substr->smr_indexer
&& ad->ad_type->sat_substr->smr_filter ) ) && ad->ad_type->sat_substr->smr_filter ) )
{ {
fprintf( stderr, "%s: line %d: " if (c_reply) {
"substr index of attribute \"%s\" disallowed\n", snprintf(c_reply->msg, sizeof(c_reply->msg),
fname, lineno, attrs[i] ); "substr index of attribute \"%s\" disallowed", attrs[i] );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
rc = LDAP_INAPPROPRIATE_MATCHING; rc = LDAP_INAPPROPRIATE_MATCHING;
goto done; goto done;
} }
...@@ -295,9 +329,13 @@ bdb_attr_index_config( ...@@ -295,9 +329,13 @@ bdb_attr_index_config(
rc = 0; rc = 0;
continue; continue;
} }
fprintf( stderr, if (c_reply) {
"%s: line %d: duplicate index definition for attr \"%s\".\n", snprintf(c_reply->msg, sizeof(c_reply->msg),
fname, lineno, attrs[i] ); "duplicate index definition for attr \"%s\"",
attrs[i] );
fprintf( stderr, "%s: line %d: %s\n",
fname, lineno, c_reply->msg );
}
rc = LDAP_PARAM_ERROR; rc = LDAP_PARAM_ERROR;
goto done; goto done;
......
...@@ -736,7 +736,7 @@ bdb_cf_gen( ConfigArgs *c ) ...@@ -736,7 +736,7 @@ bdb_cf_gen( ConfigArgs *c )
case BDB_INDEX: case BDB_INDEX:
rc = bdb_attr_index_config( bdb, c->fname, c->lineno, rc = bdb_attr_index_config( bdb, c->fname, c->lineno,
c->argc - 1, &c->argv[1] ); c->argc - 1, &c->argv[1], &c->reply);
if( rc != LDAP_SUCCESS ) return 1; if( rc != LDAP_SUCCESS ) return 1;
if (( bdb->bi_flags & BDB_IS_OPEN ) && !bdb->bi_index_task ) { if (( bdb->bi_flags & BDB_IS_OPEN ) && !bdb->bi_index_task ) {
......
...@@ -49,7 +49,7 @@ int bdb_attr_slot( struct bdb_info *bdb, ...@@ -49,7 +49,7 @@ int bdb_attr_slot( struct bdb_info *bdb,
int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb, int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
const char *fname, int lineno, const char *fname, int lineno,
int argc, char **argv )); int argc, char **argv, struct config_reply_s *cr ));
void bdb_attr_index_unparse LDAP_P(( struct bdb_info *bdb, BerVarray *bva )); void bdb_attr_index_unparse LDAP_P(( struct bdb_info *bdb, BerVarray *bva ));
void bdb_attr_index_destroy LDAP_P(( struct bdb_info *bdb )); void bdb_attr_index_destroy LDAP_P(( struct bdb_info *bdb ));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment