From a42908f2e75d555b49eb762c4ebd22998e6d74ef Mon Sep 17 00:00:00 2001
From: Hallvard Furuseth <hallvard@openldap.org>
Date: Mon, 9 Dec 2002 11:02:28 +0000
Subject: [PATCH] Update '-c' error handling, so error in any operation returns
 error from main.

---
 clients/tools/ldapdelete.c | 14 ++++++++++----
 clients/tools/ldapmodrdn.c | 12 +++++++-----
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/clients/tools/ldapdelete.c b/clients/tools/ldapdelete.c
index 5095d9d424..b46e38791e 100644
--- a/clients/tools/ldapdelete.c
+++ b/clients/tools/ldapdelete.c
@@ -99,7 +99,8 @@ main( int argc, char **argv )
 {
 	char		buf[ 4096 ];
 	FILE		*fp;
-	int		i, rc, authmethod, referrals, want_bindpw, version, debug, manageDSAit, noop, crit;
+	int		i, rc, retval, authmethod, referrals, want_bindpw;
+	int		version, debug, manageDSAit, noop, crit;
 	char	*pw_file;
 	char	*control, *cvalue;
 	char	*authzid = NULL;
@@ -770,14 +771,17 @@ main( int argc, char **argv )
 		}
 	}
 
-	rc = 0;
+	retval = rc = 0;
 
     if ( fp == NULL ) {
 		for ( ; optind < argc; ++optind ) {
 			rc = dodelete( ld, argv[ optind ] );
 
 			/* Stop on error and no -c option */
-			if( rc != 0 && contoper == 0) break;
+			if( rc != 0 ) {
+				retval = rc;
+				if( contoper == 0 ) break;
+			}
 		}
 	} else {
 		while ((rc == 0 || contoper) && fgets(buf, sizeof(buf), fp) != NULL) {
@@ -785,13 +789,15 @@ main( int argc, char **argv )
 
 			if ( *buf != '\0' ) {
 				rc = dodelete( ld, buf );
+				if ( rc != 0 )
+					retval = rc;
 			}
 		}
 	}
 
     ldap_unbind( ld );
 
-	return( rc );
+    return( retval );
 }
 
 
diff --git a/clients/tools/ldapmodrdn.c b/clients/tools/ldapmodrdn.c
index 6f09348f73..eeedfee48a 100644
--- a/clients/tools/ldapmodrdn.c
+++ b/clients/tools/ldapmodrdn.c
@@ -112,7 +112,8 @@ main(int argc, char **argv)
 {
     char		*infile, *entrydn = NULL, *rdn = NULL, buf[ 4096 ];
     FILE		*fp;
-	int		rc, i, remove, havedn, authmethod, version, want_bindpw, debug, manageDSAit, noop, crit;
+	int		rc, retval, i, remove, havedn, authmethod, version;
+	int		want_bindpw, debug, manageDSAit, noop, crit;
 	int		referrals;
     char	*newSuperior=NULL;
 	char	*pw_file = NULL;
@@ -805,9 +806,9 @@ main(int argc, char **argv)
 		}
 	}
 
-    rc = 0;
+    retval = rc = 0;
     if (havedn)
-	rc = domodrdn( ld, entrydn, rdn, newSuperior, remove );
+	retval = domodrdn( ld, entrydn, rdn, newSuperior, remove );
     else while ((rc == 0 || contoper) && fgets(buf, sizeof(buf), fp) != NULL) {
 	if ( *buf != '\0' ) {	/* blank lines optional, skip */
 	    buf[ strlen( buf ) - 1 ] = '\0';	/* remove nl */
@@ -818,6 +819,8 @@ main(int argc, char **argv)
                     return( EXIT_FAILURE );
 		}
 		rc = domodrdn(ld, entrydn, rdn, newSuperior, remove );
+		if ( rc != 0 )
+			retval = rc;
 		havedn = 0;
 	    } else if ( !havedn ) {	/* don't have DN yet */
 	        if (( entrydn = strdup( buf )) == NULL ) {
@@ -831,8 +834,7 @@ main(int argc, char **argv)
 
     ldap_unbind( ld );
 
-	/* UNREACHABLE */
-	return( rc );
+    return( retval );
 }
 
 static int domodrdn(
-- 
GitLab