]> git.sur5r.net Git - openldap/commitdiff
Use ConfigReply to return error messages to the client
authorRalf Haferkamp <ralf@openldap.org>
Tue, 23 Sep 2008 15:30:48 +0000 (15:30 +0000)
committerRalf Haferkamp <ralf@openldap.org>
Tue, 23 Sep 2008 15:30:48 +0000 (15:30 +0000)
servers/slapd/back-bdb/attr.c
servers/slapd/back-bdb/config.c
servers/slapd/back-bdb/proto-bdb.h

index 42151afdd5274a913df352c739a08c37324de347..dd9d06f2db6c2cf9290452504fcb982e1b934c96 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "slap.h"
 #include "back-bdb.h"
+#include "config.h"
 #include "lutil.h"
 
 /* Find the ad, return -1 if not found,
@@ -92,7 +93,8 @@ bdb_attr_index_config(
        const char              *fname,
        int                     lineno,
        int                     argc,
-       char            **argv )
+       char            **argv,
+       struct          config_reply_s *c_reply)
 {
        int rc = 0;
        int     i;
@@ -132,9 +134,14 @@ bdb_attr_index_config(
                        rc = slap_str2index( indexes[i], &index );
 
                        if( rc != LDAP_SUCCESS ) {
-                               fprintf( stderr, "%s: line %d: "
-                                       "index type \"%s\" undefined\n",
-                                       fname, lineno, indexes[i] );
+                               if ( c_reply )
+                               {
+                                       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;
                                goto done;
                        }
@@ -144,9 +151,13 @@ bdb_attr_index_config(
        }
 
        if( !mask ) {
-               fprintf( stderr, "%s: line %d: "
-                       "no indexes selected\n",
-                       fname, lineno );
+               if ( c_reply )
+               {
+                       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;
                goto done;
        }
@@ -169,9 +180,14 @@ bdb_attr_index_config(
                if ( is_component_reference( attrs[i] ) ) {
                        rc = extract_component_reference( attrs[i], &cr );
                        if ( rc != LDAP_SUCCESS ) {
-                               fprintf( stderr, "%s: line %d: "
-                                       "index component reference\"%s\" undefined\n",
-                                       fname, lineno, attrs[i] );
+                               if ( c_reply )
+                               {
+                                       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;
                        }
                        cr->cr_indexmask = mask;
@@ -187,16 +203,25 @@ bdb_attr_index_config(
                rc = slap_str2ad( attrs[i], &ad, &text );
 
                if( rc != LDAP_SUCCESS ) {
-                       fprintf( stderr, "%s: line %d: "
-                               "index attribute \"%s\" undefined\n",
-                               fname, lineno, attrs[i] );
+                       if ( c_reply )
+                       {
+                               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;
                }
 
                if( slap_ad_is_binary( ad ) ) {
-                       fprintf( stderr, "%s: line %d: "
-                               "index of attribute \"%s\" disallowed\n",
-                               fname, lineno, attrs[i] );
+                       if (c_reply) {
+                               snprintf(c_reply->msg, sizeof(c_reply->msg),
+                                       "index of attribute \"%s\" disallowed", attrs[i] );
+                               fprintf( stderr, "%s: line %d: %s\n",
+                                       fname, lineno, c_reply->msg );
+                       }
                        rc = LDAP_UNWILLING_TO_PERFORM;
                        goto done;
                }
@@ -206,9 +231,12 @@ bdb_attr_index_config(
                                && ad->ad_type->sat_approx->smr_indexer
                                && ad->ad_type->sat_approx->smr_filter ) )
                {
-                       fprintf( stderr, "%s: line %d: "
-                               "approx index of attribute \"%s\" disallowed\n",
-                               fname, lineno, attrs[i] );
+                       if (c_reply) {
+                               snprintf(c_reply->msg, sizeof(c_reply->msg),
+                                       "approx index of attribute \"%s\" disallowed", attrs[i] );
+                               fprintf( stderr, "%s: line %d: %s\n",
+                                       fname, lineno, c_reply->msg );
+                       }
                        rc = LDAP_INAPPROPRIATE_MATCHING;
                        goto done;
                }
@@ -218,9 +246,12 @@ bdb_attr_index_config(
                                && ad->ad_type->sat_equality->smr_indexer
                                && ad->ad_type->sat_equality->smr_filter ) )
                {
-                       fprintf( stderr, "%s: line %d: "
-                               "equality index of attribute \"%s\" disallowed\n",
-                               fname, lineno, attrs[i] );
+                       if (c_reply) {
+                               snprintf(c_reply->msg, sizeof(c_reply->msg),
+                                       "equality index of attribute \"%s\" disallowed", attrs[i] );
+                               fprintf( stderr, "%s: line %d: %s\n",
+                                       fname, lineno, c_reply->msg );
+                       }
                        rc = LDAP_INAPPROPRIATE_MATCHING;
                        goto done;
                }
@@ -230,9 +261,12 @@ bdb_attr_index_config(
                                && ad->ad_type->sat_substr->smr_indexer
                                && ad->ad_type->sat_substr->smr_filter ) )
                {
-                       fprintf( stderr, "%s: line %d: "
-                               "substr index of attribute \"%s\" disallowed\n",
-                               fname, lineno, attrs[i] );
+                       if (c_reply) {
+                               snprintf(c_reply->msg, sizeof(c_reply->msg),
+                                       "substr index of attribute \"%s\" disallowed", attrs[i] );
+                               fprintf( stderr, "%s: line %d: %s\n",
+                                       fname, lineno, c_reply->msg );
+                       }
                        rc = LDAP_INAPPROPRIATE_MATCHING;
                        goto done;
                }
@@ -295,9 +329,13 @@ bdb_attr_index_config(
                                rc = 0;
                                continue;
                        }
-                       fprintf( stderr,
-                               "%s: line %d: duplicate index definition for attr \"%s\".\n",
-                               fname, lineno, attrs[i] );
+                       if (c_reply) {
+                               snprintf(c_reply->msg, sizeof(c_reply->msg),
+                                       "duplicate index definition for attr \"%s\"",
+                                       attrs[i] );
+                               fprintf( stderr, "%s: line %d: %s\n",
+                                       fname, lineno, c_reply->msg );
+                       }
 
                        rc = LDAP_PARAM_ERROR;
                        goto done;
index adf5747a40e44e3b615d392fd2c4fbe43ec993db..c8c3c2509b12f6c8b4c87fd0764edcdf6b4aff66 100644 (file)
@@ -736,7 +736,7 @@ bdb_cf_gen( ConfigArgs *c )
 
        case BDB_INDEX:
                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 (( bdb->bi_flags & BDB_IS_OPEN ) && !bdb->bi_index_task ) {
index 1f9335421b860bd065235155c7787d99e1258f74..188d68e13c9dbfaa1bc48a65e88e775c1ac7c927 100644 (file)
@@ -49,7 +49,7 @@ int bdb_attr_slot( struct bdb_info *bdb,
 
 int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
        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_destroy LDAP_P(( struct bdb_info *bdb ));