[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