{
        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;
                }
        }
 
-       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) {
 
                        if ( *buf != '\0' ) {
                                rc = dodelete( ld, buf );
+                               if ( rc != 0 )
+                                       retval = rc;
                        }
                }
        }
 
     ldap_unbind( ld );
 
-       return( rc );
+    return( retval );
 }
 
 
 
 {
     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;
                }
        }
 
-    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 */
                     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 ) {
 
     ldap_unbind( ld );
 
-       /* UNREACHABLE */
-       return( rc );
+    return( retval );
 }
 
 static int domodrdn(