[Pkg-iscsi-maintainers] [SCM] Debian Open-iSCSI Packaging branch, upstream-mnc, updated. 2.0-872-101-g2616afb

Mike Christie michaelc at cs.wisc.edu
Mon May 2 18:56:30 UTC 2011


The following commit has been merged in the upstream-mnc branch:
commit a1d833f3e1b851282004482d5f0c4dcc1d41dbdb
Author: Mike Christie <michaelc at cs.wisc.edu>
Date:   Sun Jan 30 22:52:17 2011 -0600

    iscsid: add new auth error code
    
    Add a new auth error code to make it easier for users
    to tell if it failed due to a auth error vs other
    target login error.

diff --git a/doc/iscsiadm.8 b/doc/iscsiadm.8
index b4a5165..8e4868e 100644
--- a/doc/iscsiadm.8
+++ b/doc/iscsiadm.8
@@ -430,6 +430,12 @@ ISCSI_ERR_SYSFS_LOOKUP - could not lookup object in sysfs.
 23
 ISCSI_ERR_HOST_NOT_FOUND - could not lookup host.
 
+.TP
+.B
+24
+ISCSI_ERR_LOGIN_AUTH_FAILED - login failed due to authorization failure.
+
+
 .SH EXAMPLES
 
 .nf
diff --git a/include/iscsi_err.h b/include/iscsi_err.h
index c54edee..9f7475e 100644
--- a/include/iscsi_err.h
+++ b/include/iscsi_err.h
@@ -52,6 +52,8 @@ enum {
 	ISCSI_ERR_SYSFS_LOOKUP		= 22,
 	/* Could not lookup host */
 	ISCSI_ERR_HOST_NOT_FOUND	= 23,
+	/* Login failed due to authorization failure */
+	ISCSI_ERR_LOGIN_AUTH_FAILED	= 24,
 
 	/* Always last. Indicates end of error code space */
 	ISCSI_MAX_ERR_VAL,
diff --git a/usr/initiator.c b/usr/initiator.c
index 927bdba..b1cbc9e 100644
--- a/usr/initiator.c
+++ b/usr/initiator.c
@@ -192,11 +192,11 @@ __check_iscsi_status_class(iscsi_session_t *session, int cid,
 			log_error("session %d login rejected: Initiator "
 			       "failed authentication with target",
 				session->id);
-			return CONN_LOGIN_FAILED;
+			return CONN_LOGIN_AUTH_FAILED;
 		case ISCSI_LOGIN_STATUS_TGT_FORBIDDEN:
 			log_error("conn %d login rejected: initiator "
 			       "failed authorization with target", conn->id);
-			return CONN_LOGIN_FAILED;
+			return CONN_LOGIN_AUTH_FAILED;
 		case ISCSI_LOGIN_STATUS_TGT_NOT_FOUND:
 			log_error("conn %d login rejected: initiator "
 			       "error - target not found (%02x/%02x)",
@@ -654,6 +654,14 @@ static int iscsi_retry_initial_login(struct iscsi_conn *conn)
 	return 1;
 }
 
+static int iscsi_login_is_fatal_err(int err)
+{
+	if (err == ISCSI_ERR_LOGIN_AUTH_FAILED ||
+	    err == ISCSI_ERR_FATAL_LOGIN)
+		return 1;
+	return 0;
+}
+
 static void iscsi_login_eh(struct iscsi_conn *conn, struct queue_task *qtask,
 			   int err)
 {
@@ -673,7 +681,7 @@ static void iscsi_login_eh(struct iscsi_conn *conn, struct queue_task *qtask,
 				  "R_STAGE_NO_CHANGE");
 			/* timeout during initial connect.
 			 * clean connection. write ipc rsp or retry */
-			if (err == ISCSI_ERR_FATAL_LOGIN ||
+			if (iscsi_login_is_fatal_err(err) ||
 			    !iscsi_retry_initial_login(conn))
 				session_conn_shutdown(conn, qtask, err);
 			else {
@@ -689,7 +697,7 @@ static void iscsi_login_eh(struct iscsi_conn *conn, struct queue_task *qtask,
 				  "R_STAGE_SESSION_REDIRECT");
 			/* timeout during initial redirect connect
 			 * clean connection. write ipc rsp or retry */
-			if (err == ISCSI_ERR_FATAL_LOGIN ||
+			if (iscsi_login_is_fatal_err(err) ||
 			    !iscsi_retry_initial_login(conn))
 				session_conn_shutdown(conn, qtask, err);
 			else
@@ -722,7 +730,7 @@ static void iscsi_login_eh(struct iscsi_conn *conn, struct queue_task *qtask,
 			 * initial redirected connect. Clean connection
 			 * and write rsp or retry.
 			 */
-			if (err == ISCSI_ERR_FATAL_LOGIN ||
+			if (iscsi_login_is_fatal_err(err) ||
 			    !iscsi_retry_initial_login(conn))
 				session_conn_shutdown(conn, qtask, err);
 			else
@@ -1213,6 +1221,7 @@ static void iscsi_recv_login_rsp(struct iscsi_conn *conn)
 { 
 	struct iscsi_session *session = conn->session;
 	iscsi_login_context_t *c = &conn->login_context;
+	int err = ISCSI_ERR_FATAL_LOGIN;
 
 	if (iscsi_login_rsp(session, c)) {
 		log_debug(1, "login_rsp ret (%d)", c->ret);
@@ -1233,6 +1242,9 @@ static void iscsi_recv_login_rsp(struct iscsi_conn *conn)
 		switch (__check_iscsi_status_class(session, conn->id,
 						   c->status_class,
 						   c->status_detail)) {
+		case CONN_LOGIN_AUTH_FAILED:
+			err = ISCSI_ERR_LOGIN_AUTH_FAILED;
+			goto failed;
 		case CONN_LOGIN_FAILED:
 			goto failed;
 		case CONN_LOGIN_IMM_REDIRECT_RETRY:
@@ -1264,7 +1276,7 @@ retry:
 failed:
 	/* force failure if initial login */
 	session->reopen_cnt = session->nrec.session.initial_login_retry_max;
-	iscsi_login_eh(conn, c->qtask, ISCSI_ERR_FATAL_LOGIN);
+	iscsi_login_eh(conn, c->qtask, err);
 	return;
 }
 
diff --git a/usr/initiator.h b/usr/initiator.h
index 0fb2b7a..93e9b3b 100644
--- a/usr/initiator.h
+++ b/usr/initiator.h
@@ -67,6 +67,7 @@ typedef enum conn_login_status_e {
 	CONN_LOGIN_RETRY		= 3,
 	CONN_LOGIN_IMM_RETRY		= 4,
 	CONN_LOGIN_IMM_REDIRECT_RETRY	= 5,
+	CONN_LOGIN_AUTH_FAILED		= 6,
 } conn_login_status_e;
 
 enum iscsi_login_status {
diff --git a/usr/iscsi_err.c b/usr/iscsi_err.c
index c922b6d..360a7ae 100644
--- a/usr/iscsi_err.c
+++ b/usr/iscsi_err.c
@@ -46,6 +46,7 @@ static char *iscsi_err_msgs[] = {
 	/* 21 */ "no objects found",
 	/* 23 */ "sysfs lookup failure",
 	/* 23 */ "host not found",
+	/* 24 */ "iSCSI login failed due to authorization failure",
 };
 
 char *iscsi_err_to_str(int err)

-- 
Debian Open-iSCSI Packaging



More information about the Pkg-iscsi-maintainers mailing list