]> git.sur5r.net Git - openldap/commitdiff
More verbose error messages for Reject log
authorHoward Chu <hyc@openldap.org>
Wed, 19 Nov 2003 10:23:08 +0000 (10:23 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 19 Nov 2003 10:23:08 +0000 (10:23 +0000)
servers/slurpd/ldap_op.c
servers/slurpd/proto-slurp.h
servers/slurpd/ri.c

index 879932f806edc3b7ab68ad94e478c6032122bcbe..8b68c15c5778ce359f32367d8b4bc3e15107f2ee 100644 (file)
 
 /* Forward references */
 static struct berval **make_singlevalued_berval LDAP_P(( char  *, int ));
-static int op_ldap_add LDAP_P(( Ri *, Re *, char ** ));
-static int op_ldap_modify LDAP_P(( Ri *, Re *, char ** ));
-static int op_ldap_delete LDAP_P(( Ri *, Re *, char ** ));
-static int op_ldap_modrdn LDAP_P(( Ri *, Re *, char ** ));
+static int op_ldap_add LDAP_P(( Ri *, Re *, char **, int * ));
+static int op_ldap_modify LDAP_P(( Ri *, Re *, char **, int * ));
+static int op_ldap_delete LDAP_P(( Ri *, Re *, char **, int * ));
+static int op_ldap_modrdn LDAP_P(( Ri *, Re *, char **, int * ));
 static LDAPMod *alloc_ldapmod LDAP_P(( void ));
 static void free_ldapmod LDAP_P(( LDAPMod * ));
 static void free_ldmarr LDAP_P(( LDAPMod ** ));
@@ -64,11 +64,13 @@ int
 do_ldap(
        Ri              *ri,
        Re              *re,
-       char    **errmsg
+       char    **errmsg,
+       int     *errfree
 )
 {
        int     retry = 2;
        *errmsg = NULL;
+       *errfree = 0;
 
        do {
                int lderr;
@@ -82,7 +84,7 @@ do_ldap(
 
                switch ( re->re_changetype ) {
                case T_ADDCT:
-                       lderr = op_ldap_add( ri, re, errmsg );
+                       lderr = op_ldap_add( ri, re, errmsg, errfree );
                        if ( lderr != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG ( OPERATION, ERR, "do_ldap: "
@@ -99,7 +101,7 @@ do_ldap(
                        break;
 
                case T_MODIFYCT:
-                       lderr = op_ldap_modify( ri, re, errmsg );
+                       lderr = op_ldap_modify( ri, re, errmsg, errfree );
                        if ( lderr != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG ( OPERATION, ERR, "do_ldap: "
@@ -116,7 +118,7 @@ do_ldap(
                        break;
 
                case T_DELETECT:
-                       lderr = op_ldap_delete( ri, re, errmsg );
+                       lderr = op_ldap_delete( ri, re, errmsg, errfree );
                        if ( lderr != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG ( OPERATION, ERR, "do_ldap: "
@@ -133,7 +135,7 @@ do_ldap(
                        break;
 
                case T_MODRDNCT:
-                       lderr = op_ldap_modrdn( ri, re, errmsg );
+                       lderr = op_ldap_modrdn( ri, re, errmsg, errfree );
                        if ( lderr != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
                                LDAP_LOG ( OPERATION, ERR, "do_ldap: "
@@ -192,7 +194,8 @@ static int
 op_ldap_add(
     Ri         *ri,
     Re         *re,
-    char       **errmsg
+    char       **errmsg,
+    int                *errfree
 )
 {
     Mi         *mi;
@@ -235,6 +238,8 @@ op_ldap_add(
        rc = ldap_add_s( ri->ri_ldp, re->re_dn, ldmarr );
 
        ldap_get_option( ri->ri_ldp, LDAP_OPT_ERROR_NUMBER, &lderr);
+       ldap_get_option( ri->ri_ldp, LDAP_OPT_ERROR_STRING, errmsg);
+       *errfree = 1;
 
     } else {
        *errmsg = "No modifications to do";
@@ -261,7 +266,8 @@ static int
 op_ldap_modify(
     Ri         *ri,
     Re         *re,
-    char       **errmsg
+    char       **errmsg,
+    int                *errfree
 )
 {
     Mi         *mi;
@@ -397,6 +403,8 @@ op_ldap_modify(
                ri->ri_hostname, ri->ri_port, re->re_dn );
 #endif
        rc = ldap_modify_s( ri->ri_ldp, re->re_dn, ldmarr );
+       ldap_get_option( ri->ri_ldp, LDAP_OPT_ERROR_STRING, errmsg);
+       *errfree = 1;
     }
     free_ldmarr( ldmarr );
     return( rc );
@@ -412,7 +420,8 @@ static int
 op_ldap_delete(
     Ri         *ri,
     Re         *re,
-    char       **errmsg
+    char       **errmsg,
+    int                *errfree
 )
 {
     int                rc;
@@ -426,6 +435,8 @@ op_ldap_delete(
            ri->ri_hostname, ri->ri_port, re->re_dn );
 #endif
     rc = ldap_delete_s( ri->ri_ldp, re->re_dn );
+    ldap_get_option( ri->ri_ldp, LDAP_OPT_ERROR_STRING, errmsg);
+    *errfree = 1;
 
     return( rc );
 }
@@ -446,7 +457,8 @@ static int
 op_ldap_modrdn(
     Ri         *ri,
     Re         *re,
-    char       **errmsg
+    char       **errmsg,
+    int                *errfree
 )
 {
     int                rc = 0;
@@ -603,6 +615,8 @@ op_ldap_modrdn(
     rc = ldap_rename2_s( ri->ri_ldp, re->re_dn, newrdn, newsup, drdnflag );
 
        ldap_get_option( ri->ri_ldp, LDAP_OPT_ERROR_NUMBER, &lderr);
+       ldap_get_option( ri->ri_ldp, LDAP_OPT_ERROR_STRING, errmsg);
+       *errfree = 1;
     return( lderr );
 }
 
index d91ba666569c725f0d2892b077ba9c0caba9b794..2c5e28b3a2ef338bdc7df6c0fe82ba2b84b56bc3 100644 (file)
@@ -53,7 +53,7 @@ extern int ldap_debug;
 extern struct globals *init_globals    LDAP_P((void));
 
 /* ldap_op.c */
-int do_ldap    LDAP_P((Ri *ri, Re *re, char **errmsg));
+int do_ldap    LDAP_P((Ri *ri, Re *re, char **errmsg, int *errfree));
 
 /* lock.c */
 FILE *lock_fopen       LDAP_P((const char *fname, const char *type, FILE **lfp));
index 0e30f551c9dae185bb6160ea1de586714e158080..38d48870ac2c27d0e7c59ac14cc4de84912440e5 100644 (file)
@@ -51,6 +51,7 @@ Ri_process(
     Re         *re = NULL, *new_re = NULL;
     int                rc ;
     char       *errmsg;
+    int                errfree;
 
     (void) SIGNAL( LDAP_SIGUSR1, do_nothing );
 #ifdef SIGPIPE
@@ -113,7 +114,7 @@ Ri_process(
                        ri->ri_hostname, ri->ri_port, re->re_dn );
 #endif
            } else {
-               rc = do_ldap( ri, re, &errmsg );
+               rc = do_ldap( ri, re, &errmsg, &errfree );
                switch ( rc ) {
                case DO_LDAP_ERR_RETRYABLE:
                    ldap_pvt_thread_sleep( RETRY_SLEEP_TIME );
@@ -145,6 +146,9 @@ Ri_process(
                    (void) sglob->st->st_write( sglob->st );
                    break;
                }
+               if ( errfree && errmsg ) {
+                   ch_free( errmsg );
+               }
            }
        } else {
 #ifdef NEW_LOGGING