]> git.sur5r.net Git - openldap/commitdiff
free LDIF handler in case of failure
authorQuanah Gibson-Mount <quanah@openldap.org>
Tue, 22 Nov 2011 00:55:43 +0000 (16:55 -0800)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 22 Nov 2011 00:55:43 +0000 (16:55 -0800)
clients/tools/ldapmodify.c

index 54dd37912036259db873706f78f27aa1a9776ab3..3d867b7c93c48389cba8aeee970ff43021fc1788 100644 (file)
@@ -263,7 +263,8 @@ main( int argc, char **argv )
        if ( rejfile != NULL ) {
                if (( rejfp = fopen( rejfile, "w" )) == NULL ) {
                        perror( rejfile );
-                       return( EXIT_FAILURE );
+                       retval = EXIT_FAILURE;
+                       goto fail;
                }
        } else {
                rejfp = NULL;
@@ -272,7 +273,8 @@ main( int argc, char **argv )
        if ( infile != NULL ) {
                if (( ldiffp = ldif_open( infile, "r" )) == NULL ) {
                        perror( infile );
-                       return( EXIT_FAILURE );
+                       retval = EXIT_FAILURE;
+                       goto fail;
                }
        } else {
                ldifdummy.fp = stdin;
@@ -293,7 +295,10 @@ main( int argc, char **argv )
                rc = ldap_txn_start_s( ld, NULL, NULL, &txn_id );
                if( rc != LDAP_SUCCESS ) {
                        tool_perror( "ldap_txn_start_s", rc, NULL, NULL, NULL, NULL );
-                       if( txn > 1 ) return EXIT_FAILURE;
+                       if( txn > 1 ) {
+                               retval = EXIT_FAILURE;
+                               goto fail;
+                       }
                        txn = 0;
                }
        }
@@ -327,7 +332,8 @@ main( int argc, char **argv )
                        len = strlen( rbuf );
                        if (( rejbuf = (char *)ber_memalloc( len+1 )) == NULL ) {
                                perror( "malloc" );
-                               exit( EXIT_FAILURE );
+                               retval = EXIT_FAILURE;
+                               goto fail;
                        }
                        memcpy( rejbuf, rbuf, len+1 );
                }
@@ -382,15 +388,21 @@ main( int argc, char **argv )
        }
 #endif
 
-       if ( !dont ) {
+       if ( !dont && ld != NULL ) {
                tool_unbind( ld );
        }
 
+       tool_destroy();
+
+fail:;
        if ( rejfp != NULL ) {
                fclose( rejfp );
        }
 
-       tool_destroy();
+       if ( ldiffp != NULL && ldiffp != &ldifdummy ) {
+               ldif_close( ldiffp );
+       }
+
        return( retval );
 }