changeset 13132:75437b9749d3

6977005 ndmp: cannot span tapes with OSB 10.3.0.2 + 2010.Q1.2 6966171 directories with exactly 255 chars silently omitted from backups
author Reza Sabdar <Reza.Sabdar@Sun.COM>
date Mon, 16 Aug 2010 17:29:49 -0400
parents 374aa7839ed5
children 8c553b17498a
files usr/src/cmd/ndmpd/ndmp/ndmpd_util.c usr/src/cmd/ndmpd/tlm/tlm_traverse.c
diffstat 2 files changed, 8 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/ndmpd/ndmp/ndmpd_util.c	Mon Aug 16 13:30:30 2010 -0700
+++ b/usr/src/cmd/ndmpd/ndmp/ndmpd_util.c	Mon Aug 16 17:29:49 2010 -0400
@@ -1359,19 +1359,17 @@
 		}
 
 		cmd.uscsi_buflen = request->datain_len;
-		cmd.uscsi_rqlen = sizeof (rq_buf);
-		cmd.uscsi_rqbuf = rq_buf;
 	} else if (request->flags == NDMP_SCSI_DATA_OUT) {
-		cmd.uscsi_flags = USCSI_WRITE;
+		cmd.uscsi_flags = USCSI_WRITE | USCSI_RQENABLE;
 		cmd.uscsi_bufaddr = request->dataout.dataout_val;
 		cmd.uscsi_buflen = request->dataout.dataout_len;
 	} else {
 		cmd.uscsi_flags = USCSI_RQENABLE;
 		cmd.uscsi_bufaddr = 0;
 		cmd.uscsi_buflen = 0;
-		cmd.uscsi_rqlen = sizeof (rq_buf);
-		cmd.uscsi_rqbuf = rq_buf;
 	}
+	cmd.uscsi_rqlen = sizeof (rq_buf);
+	cmd.uscsi_rqbuf = rq_buf;
 
 	cmd.uscsi_timeout = (request->timeout < 1000) ?
 	    1 : (request->timeout / 1000);
--- a/usr/src/cmd/ndmpd/tlm/tlm_traverse.c	Mon Aug 16 13:30:30 2010 -0700
+++ b/usr/src/cmd/ndmpd/tlm/tlm_traverse.c	Mon Aug 16 17:29:49 2010 -0400
@@ -1,6 +1,5 @@
 /*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
 /*
@@ -252,7 +251,7 @@
 			goto skip_entry;
 
 		(void) snprintf(file_path, PATH_MAX, "%s/", pn_path);
-		(void) strlcat(file_path, ptr->d_name, PATH_MAX);
+		(void) strlcat(file_path, ptr->d_name, PATH_MAX + 1);
 		(void) memset(&fh, 0, sizeof (fs_fhandle_t));
 
 		if (lstat64(file_path, &st) != 0) {
@@ -301,12 +300,12 @@
 		*el = 0;
 	} else {
 		(void) snprintf(file_path, PATH_MAX, "%s/", path);
-		(void) strlcat(file_path, dp->d_name, PATH_MAX);
+		(void) strlcat(file_path, dp->d_name, PATH_MAX + 1);
 
 		rv = fs_getstat(file_path, efh, est);
 		if (rv == 0) {
 			*dpos = telldir(dirp);
-			(void) strlcpy(nm, dp->d_name, NAME_MAX);
+			(void) strlcpy(nm, dp->d_name, NAME_MAX + 1);
 			*el = strlen(dp->d_name);
 		} else {
 			*el = 0;
@@ -674,10 +673,8 @@
 
 			NDMP_LOG(LOG_DEBUG, "Error %d on readdir(%s) pos %d",
 			    rv, pnp->tn_path, tsp->ts_dpos);
-			if (STOP_ONERR(ftp)) {
-				NEGATE(rv);
+			if (STOP_ONERR(ftp))
 				break;
-			}
 			/*
 			 * We cannot read the directory entry, we should
 			 * skip to the next directory.