OSDN Git Service

scsi: target: iscsi: Allow AuthMethod=None
authorDmitry Bogdanov <d.bogdanov@yadro.com>
Mon, 18 Jul 2022 15:25:54 +0000 (18:25 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 27 Jul 2022 02:13:28 +0000 (22:13 -0400)
Allow negotiating AuthMethod=None at CSG=0 (Security Negotiation) when
authentication is not required. That is required by the CHAP test in
Windows HLK.

Link: https://lore.kernel.org/r/20220718152555.17084-4-d.bogdanov@yadro.com
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/iscsi/iscsi_target_login.c
drivers/target/iscsi/iscsi_target_nego.c
drivers/target/iscsi/iscsi_target_nego.h

index 0778591..27e448c 100644 (file)
@@ -341,6 +341,7 @@ static int iscsi_login_zero_tsih_s2(
 {
        struct iscsi_node_attrib *na;
        struct iscsit_session *sess = conn->sess;
+       struct iscsi_param *param;
        bool iser = false;
 
        sess->tpg = conn->tpg;
@@ -375,6 +376,18 @@ static int iscsi_login_zero_tsih_s2(
        na = iscsit_tpg_get_node_attrib(sess);
 
        /*
+        * If ACL allows non-authorized access in TPG with CHAP,
+        * then set None to AuthMethod.
+        */
+       param = iscsi_find_param_from_key(AUTHMETHOD, conn->param_list);
+       if (param && !strstr(param->value, NONE)) {
+               if (!iscsi_conn_auth_required(conn))
+                       if (iscsi_change_param_sprintf(conn, "AuthMethod=%s",
+                                                      NONE))
+                               return -1;
+       }
+
+       /*
         * Need to send TargetPortalGroupTag back in first login response
         * on any iSCSI connection where the Initiator provides TargetName.
         * See 5.3.1.  Login Phase Start
index 7676464..a167fab 100644 (file)
@@ -814,7 +814,7 @@ static int iscsi_target_do_authentication(
        return 0;
 }
 
-static bool iscsi_conn_auth_required(struct iscsit_conn *conn)
+bool iscsi_conn_auth_required(struct iscsit_conn *conn)
 {
        struct iscsi_node_acl *nacl;
        struct se_node_acl *se_nacl;
index 21d3cab..41c3db3 100644 (file)
@@ -22,5 +22,5 @@ extern int iscsi_target_locate_portal(struct iscsi_np *, struct iscsit_conn *,
 extern int iscsi_target_start_negotiation(
                struct iscsi_login *, struct iscsit_conn *);
 extern void iscsi_target_nego_release(struct iscsit_conn *);
-
+extern bool iscsi_conn_auth_required(struct iscsit_conn *conn);
 #endif /* ISCSI_TARGET_NEGO_H */