[stgt] [PATCH] fix tid testing

Doron Shoham dorons at Voltaire.COM
Wed Oct 22 10:08:20 CEST 2008


return error if tid is not a postive integer

Signed-off-by: Doron Shoham <dorons at voltaire.com>
---
 usr/tgtadm.c |   26 ++++++++++++++++++++------
 1 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/usr/tgtadm.c b/usr/tgtadm.c
index 23dbc53..1102312 100644
--- a/usr/tgtadm.c
+++ b/usr/tgtadm.c
@@ -385,6 +385,7 @@ int main(int argc, char **argv)
 	char *bstype;
 	char *user, *password;
 	char *buf;
+	char *endptr;
 	struct tgtadm_req *req;
 
 	op = tid = mode = -1;
@@ -416,9 +417,22 @@ int main(int argc, char **argv)
 			mode = str_to_mode(optarg);
 			break;
 		case 't':
-			tid = strtol(optarg, NULL, 10);
-			if (errno == EINVAL) {
+			tid = strtol(optarg, &endptr, 10);
+			if ((errno == ERANGE) || (errno != 0 && tid == 0)) {
 				eprintf("invalid tid '%s'\n", optarg);
+				eprintf("'tid' must be a positive integer\n");
+				exit(EINVAL);
+			}
+
+			if (endptr == optarg) {
+				eprintf("invalid tid '%s'\n", optarg);
+				eprintf("'tid' must be a positive integer\n");
+				exit(EINVAL);
+			}
+
+			if (tid < 0) {
+				eprintf("invalid tid '%s'\n", optarg);
+				eprintf("'tid' must be a positive integer\n");
 				exit(EINVAL);
 			}
 			break;
@@ -507,7 +521,7 @@ int main(int argc, char **argv)
 	}
 
 	if (mode == MODE_TARGET) {
-		if ((tid <= 0 && (op != OP_SHOW))) {
+		if ((tid < 0 && (op != OP_SHOW))) {
 			eprintf("'tid' option is necessary\n");
 			exit(EINVAL);
 		}
@@ -608,7 +622,7 @@ int main(int argc, char **argv)
 				eprintf("'user' option is necessary\n");
 				exit(EINVAL);
 			}
-			if (tid <= 0) {
+			if (tid < 0) {
 				eprintf("'tid' option is necessary\n");
 				exit(EINVAL);
 			}
@@ -624,7 +638,7 @@ int main(int argc, char **argv)
 				eprintf("'user' option is necessary\n");
 				exit(EINVAL);
 			}
-			if (tid <= 0) {
+			if (tid < 0) {
 				eprintf("'tid' option is necessary\n");
 				exit(EINVAL);
 			}
@@ -637,7 +651,7 @@ int main(int argc, char **argv)
 	}
 
 	if (mode == MODE_DEVICE) {
-		if (tid <= 0) {
+		if (tid < 0) {
 			eprintf("'tid' option is necessary\n");
 			exit(EINVAL);
 		}
-- 
1.5.3.8

--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list