usr/src/uts/common/io/comstar/port/iscsit/iscsit_auth.c
author Peter Dunlap <Peter.Dunlap@Sun.COM>
Tue, 24 Mar 2009 17:50:49 -0600
changeset 9162 b011b0287065
parent 8872 16322ca7ce0d
child 12571 05943d9c379f
permissions -rw-r--r--
PSARC 2008/395 iSER: iSCSI Extensions for RDMA 6702590 iSCSI initiator needs to support iSER transport 6702591 COMSTAR iSCSI port provider needs to support iSER transport 6797024 COMSTAR iscsit asserted at iscsit_login.c line: 679 6776635 panic[cpu0]/thread=ffffff000f874c60,assertion failed: 0, file: ../../common/io/idm/idm.c, line: 1465 6802232 Bad kernel fault at addr=0x0 from idm_crc32c call
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7978
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     1
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     2
 * CDDL HEADER START
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     3
 *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     7
 *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    11
 * and limitations under the License.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    12
 *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    18
 *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    19
 * CDDL HEADER END
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    20
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    21
/*
8872
16322ca7ce0d PSARC/2008/740 Cross-Platform DDI Interface for Converting Strings to 64-bit Integers
jv227347 <Jordan.Vaughan@Sun.com>
parents: 7978
diff changeset
    22
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
7978
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    23
 * Use is subject to license terms.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    24
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    25
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    26
#include <sys/cpuvar.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    27
#include <sys/types.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    28
#include <sys/conf.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    29
#include <sys/file.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    30
#include <sys/ddi.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    31
#include <sys/sunddi.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    32
#include <sys/modctl.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    33
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    34
#include <sys/socket.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    35
#include <sys/strsubr.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    36
#include <sys/sysmacros.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    37
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    38
#include <sys/stmf.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    39
#include <sys/stmf_ioctl.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    40
#include <sys/portif.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    41
#include <sys/idm/idm.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    42
#include <sys/idm/idm_text.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    43
#include <iscsit.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    44
#include <iscsit_auth.h>
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    45
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    46
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    47
iscsit_select_auth(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    48
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    49
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    50
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    51
auth_propose_chap(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    52
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    53
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    54
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    55
auth_chap_select_alg(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    56
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    57
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    58
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    59
auth_chap_recv_n(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    60
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    61
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    62
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    63
auth_chap_recv_r(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    64
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    65
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    66
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    67
auth_chap_recv_i(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    68
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    69
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    70
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    71
auth_chap_recv_c(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    72
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    73
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    74
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    75
iscsit_auth_propose(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    76
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    77
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    78
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    79
iscsit_auth_expect_key(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    80
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    81
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    82
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    83
auth_chap_expect_r(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    84
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    85
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    86
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    87
auth_chap_done(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    88
    const idm_kv_xlate_t *ikvx);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    89
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    90
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    91
iscsit_auth_gen_challenge(iscsit_conn_t *ict);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    92
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    93
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    94
iscsit_auth_gen_response(iscsit_conn_t *ict);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    95
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    96
typedef struct {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    97
	iscsit_auth_phase_t	phase;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    98
	iscsikey_id_t		kv_id;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    99
	iscsit_auth_handler_t	handler;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   100
} auth_phase_entry_t;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   101
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   102
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   103
 * This table defines all authentication phases which have valid
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   104
 * handler. The entries which have a non-zero key index are for
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   105
 * a key/value pair handling when a key/value is being received,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   106
 * the rest of entries are for target checking the authentication
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   107
 * phase after all key/value pair(s) are handled.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   108
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   109
static const auth_phase_entry_t	apet[] = {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   110
	/* by key */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   111
	{ AP_AM_UNDECIDED,	KI_AUTH_METHOD,	iscsit_select_auth },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   112
	{ AP_AM_PROPOSED,	KI_CHAP_A,	auth_propose_chap  },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   113
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   114
	{ AP_CHAP_A_WAITING,	KI_CHAP_A,	auth_chap_select_alg },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   115
	{ AP_CHAP_R_WAITING,	KI_CHAP_N,	auth_chap_recv_n },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   116
	{ AP_CHAP_R_WAITING,	KI_CHAP_R,	auth_chap_recv_r },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   117
	{ AP_CHAP_R_WAITING,	KI_CHAP_I,	auth_chap_recv_i },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   118
	{ AP_CHAP_R_WAITING,	KI_CHAP_C,	auth_chap_recv_c },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   119
	{ AP_CHAP_R_RCVD,	KI_CHAP_N,	auth_chap_recv_n },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   120
	{ AP_CHAP_R_RCVD,	KI_CHAP_R,	auth_chap_recv_r },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   121
	{ AP_CHAP_R_RCVD,	KI_CHAP_I,	auth_chap_recv_i },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   122
	{ AP_CHAP_R_RCVD,	KI_CHAP_C,	auth_chap_recv_c },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   123
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   124
	/* by target */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   125
	{ AP_AM_UNDECIDED,	0,		iscsit_auth_propose },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   126
	{ AP_AM_DECIDED,	0,		iscsit_auth_expect_key },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   127
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   128
	{ AP_CHAP_A_RCVD,	0,		auth_chap_expect_r },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   129
	{ AP_CHAP_R_RCVD,	0,		auth_chap_done }
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   130
};
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   131
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   132
typedef struct {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   133
	iscsit_auth_method_t	am_id;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   134
	char			*am_name;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   135
} auth_id_name_t;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   136
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   137
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   138
 * a table of mapping from the authentication index to name.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   139
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   140
static const auth_id_name_t aint[] = {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   141
	{ AM_CHAP,	"CHAP" },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   142
	{ AM_NONE,	"None" },
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   143
	/* { AM_KRB5,	"KRB5" }, */	/* Not supported */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   144
	/* { AM_SPKM1,	"SPKM1" }, */	/* Not supported */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   145
	/* { AM_SPKM2,	"SPKM2" }, */	/* Not supported */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   146
	/* { AM_SRP,	"SRP" },  */	/* Not supported */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   147
};
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   148
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   149
#define	ARRAY_LENGTH(ARRAY)	(sizeof (ARRAY) / sizeof (ARRAY[0]))
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   150
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   151
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   152
 * get the authentication method name for the method id.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   153
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   154
static const char *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   155
am_id_to_name(int id)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   156
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   157
	int			i;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   158
	const auth_id_name_t	*p;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   159
	i = 0;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   160
	while (i < ARRAY_LENGTH(aint)) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   161
		p = &(aint[i]);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   162
		if (id == p->am_id) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   163
			return (p->am_name);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   164
		}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   165
		i ++;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   166
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   167
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   168
	return (NULL);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   169
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   170
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   171
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   172
 * Look for an apporiate function handler which is defined for
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   173
 * current authentication phase and matches the key which is
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   174
 * being handled. The key index is passed in as zero when it
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   175
 * is looking for an handler for checking the authentication phase
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   176
 * after all security keys are handled.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   177
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   178
iscsit_auth_handler_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   179
iscsit_auth_get_handler(iscsit_auth_client_t *client, iscsikey_id_t kv_id)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   180
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   181
	iscsit_auth_phase_t		phase = client->phase;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   182
	int				i;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   183
	const auth_phase_entry_t	*p;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   184
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   185
	i = 0;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   186
	p = NULL;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   187
	while (i < ARRAY_LENGTH(apet)) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   188
		p = &(apet[i]);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   189
		if (phase == p->phase &&
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   190
		    kv_id == p->kv_id) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   191
			return (p->handler);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   192
		}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   193
		i ++;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   194
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   195
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   196
	/* No handler can be found, it must be an invalid requst. */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   197
	return (NULL);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   198
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   199
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   200
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   201
 * Select an authentication method from a list of values proposed
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   202
 * by initiator. After a valid method is selected, shift the
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   203
 * authentication phase to AP_AM_DECIDED.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   204
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   205
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   206
iscsit_select_auth(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   207
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   208
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   209
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   210
	conn_auth_t		*auth = &lsm->icl_auth;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   211
	iscsit_auth_method_t	*am_list = &auth->ca_method_valid_list[0];
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   212
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   213
	int			nvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   214
	kv_status_t		kvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   215
	nvpair_t		*am_choice;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   216
	char			*am;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   217
	const char		*am_name;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   218
	const char		*text;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   219
	iscsit_auth_method_t	am_id;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   220
	int			i;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   221
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   222
	client->phase = AP_AM_DECIDED;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   223
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   224
	/* select a valid authentication method */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   225
	am_choice = idm_get_next_listvalue(nvp, NULL);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   226
	while (am_choice != NULL) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   227
		nvrc = nvpair_value_string(am_choice, &am);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   228
		ASSERT(nvrc == 0);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   229
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   230
		i = 0;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   231
		am_id = am_list[i];
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   232
		while (am_id != 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   233
			am_name = am_id_to_name(am_id);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   234
			if (strcasecmp(am, am_name) == 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   235
				text = am;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   236
				goto am_decided;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   237
			}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   238
			i++;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   239
			am_id = am_list[i];
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   240
		}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   241
		am_choice = idm_get_next_listvalue(nvp, am_choice);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   242
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   243
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   244
	/* none of authentication method is valid */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   245
	am_id = 0;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   246
	text = ISCSI_TEXT_REJECT;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   247
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   248
am_decided:
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   249
	client->negotiatedMethod = am_id;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   250
	/* add the selected method to the response nvlist */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   251
	nvrc = nvlist_add_string(lsm->icl_response_nvlist,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   252
	    ikvx->ik_key_name, text);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   253
	kvrc = idm_nvstat_to_kvstat(nvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   254
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   255
	return (kvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   256
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   257
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   258
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   259
 * Initiator chooses to use CHAP after target proposed a list of
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   260
 * authentication method. Set the authentication method to CHAP and
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   261
 * continue on chap authentication phase.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   262
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   263
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   264
auth_propose_chap(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   265
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   266
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   267
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   268
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   269
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   270
	client->negotiatedMethod = AM_CHAP;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   271
	client->phase = AP_AM_DECIDED;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   272
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   273
	return (auth_chap_select_alg(ict, nvp, ikvx));
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   274
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   275
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   276
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   277
 * Select a CHAP algorithm from a list of values proposed by
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   278
 * initiator and shift the authentication phase to AP_CHAP_A_RCVD.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   279
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   280
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   281
auth_chap_select_alg(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   282
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   283
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   284
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   285
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   286
	int			nvrc, rc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   287
	kv_status_t		kvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   288
	nvpair_t		*alg_choice;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   289
	char			*alg_string;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   290
	uint64_t		alg;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   291
	const char		*text;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   292
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   293
	client->phase = AP_CHAP_A_RCVD;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   294
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   295
	alg_choice = idm_get_next_listvalue(nvp, NULL);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   296
	while (alg_choice != NULL) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   297
		nvrc = nvpair_value_string(alg_choice, &alg_string);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   298
		ASSERT(nvrc == 0);
8872
16322ca7ce0d PSARC/2008/740 Cross-Platform DDI Interface for Converting Strings to 64-bit Integers
jv227347 <Jordan.Vaughan@Sun.com>
parents: 7978
diff changeset
   299
		rc = ddi_strtoull(alg_string, NULL, 0, (u_longlong_t *)&alg);
7978
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   300
		if (rc == 0 && alg == 5) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   301
			/* only MD5 is supported */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   302
			text = alg_string;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   303
			goto alg_selected;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   304
		}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   305
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   306
		alg_choice = idm_get_next_listvalue(nvp, alg_choice);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   307
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   308
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   309
	/* none of algorithm is selected */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   310
	alg = 0;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   311
	text = ISCSI_TEXT_REJECT;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   312
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   313
alg_selected:
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   314
	/* save the selected algorithm or zero for none is selected */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   315
	client_set_numeric_data(
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   316
	    &client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   317
	    AKT_CHAP_A,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   318
	    (uint32_t)alg);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   319
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   320
	/* add the selected algorithm to the response nvlist */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   321
	nvrc = nvlist_add_string(lsm->icl_response_nvlist,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   322
	    ikvx->ik_key_name, text);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   323
	if (alg == 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   324
		kvrc = KV_AUTH_FAILED; /* No algorithm selected */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   325
	} else {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   326
		kvrc = idm_nvstat_to_kvstat(nvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   327
		if (kvrc == 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   328
			kvrc = iscsit_auth_gen_challenge(ict);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   329
		}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   330
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   331
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   332
	return (kvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   333
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   334
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   335
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   336
 * Validate and save the the chap name which is sent by initiator
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   337
 * and shift the authentication phase to AP_CHAP_R_RCVD.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   338
 *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   339
 * Note: the CHAP_N, CHAP_R, optionally CHAP_I and CHAP_C key/value
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   340
 * pairs need to be received in one packet, we handle each of them
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   341
 * separately, in order to track the authentication phase, we set
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   342
 * the authentication phase to AP_CHAP_R_RCVD once one of them is
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   343
 * handled. So both of AP_CHAP_R_WAITING and AP_CHAP_R_RCVD phases
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   344
 * are valid for these keys. The function auth_chap_done is going
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   345
 * to detect if any of these keys is missing.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   346
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   347
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   348
/*ARGSUSED*/
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   349
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   350
auth_chap_recv_n(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   351
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   352
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   353
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   354
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   355
	int			nvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   356
	char			*chap_name;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   357
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   358
	nvrc = nvpair_value_string(nvp, &chap_name);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   359
	ASSERT(nvrc == 0);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   360
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   361
	client_set_string_data(&client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   362
	    AKT_CHAP_N,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   363
	    chap_name);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   364
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   365
	client->phase = AP_CHAP_R_RCVD;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   366
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   367
	return (KV_HANDLED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   368
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   369
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   370
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   371
 * Validate and save the the chap response which is sent by initiator
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   372
 * and shift the authentication phase to AP_CHAP_R_RCVD.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   373
 *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   374
 * Note: see function auth_chap_recv_n.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   375
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   376
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   377
/*ARGSUSED*/
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   378
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   379
auth_chap_recv_r(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   380
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   381
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   382
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   383
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   384
	int			nvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   385
	unsigned char		*chap_resp;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   386
	uint_t			len;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   387
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   388
	nvrc = nvpair_value_byte_array(nvp, &chap_resp, &len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   389
	ASSERT(nvrc == 0);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   390
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   391
	client_set_binary_data(&client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   392
	    AKT_CHAP_R,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   393
	    chap_resp, len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   394
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   395
	client->phase = AP_CHAP_R_RCVD;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   396
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   397
	return (KV_HANDLED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   398
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   399
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   400
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   401
 * Validate and save the the chap identifier which is sent by initiator
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   402
 * and shift the authentication phase to AP_CHAP_R_RCVD.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   403
 *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   404
 * Note: see function auth_chap_recv_n.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   405
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   406
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   407
/*ARGSUSED*/
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   408
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   409
auth_chap_recv_i(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   410
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   411
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   412
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   413
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   414
	int			nvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   415
	uint64_t		chap_id;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   416
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   417
	nvrc = nvpair_value_uint64(nvp, &chap_id);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   418
	ASSERT(nvrc == 0);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   419
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   420
	client_set_numeric_data(&client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   421
	    AKT_CHAP_I,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   422
	    chap_id);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   423
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   424
	client->phase = AP_CHAP_R_RCVD;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   425
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   426
	return (KV_HANDLED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   427
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   428
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   429
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   430
 * Validate and save the the chap challenge which is sent by initiator
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   431
 * and shift the authentication phase to AP_CHAP_R_RCVD.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   432
 *
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   433
 * Note: see function auth_chap_recv_n.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   434
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   435
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   436
/*ARGSUSED*/
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   437
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   438
auth_chap_recv_c(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   439
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   440
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   441
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   442
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   443
	int			nvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   444
	unsigned char		*chap_challenge;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   445
	uint_t			len;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   446
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   447
	nvrc = nvpair_value_byte_array(nvp, &chap_challenge, &len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   448
	ASSERT(nvrc == 0);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   449
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   450
	client_set_binary_data(
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   451
	    &client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   452
	    AKT_CHAP_C,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   453
	    chap_challenge, len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   454
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   455
	client->phase = AP_CHAP_R_RCVD;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   456
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   457
	return (KV_HANDLED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   458
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   459
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   460
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   461
 * Shift the authentication phase to AP_CHAP_R_WAITING after target
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   462
 * has successfully selected a chap algorithm.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   463
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   464
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   465
/*ARGSUSED*/
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   466
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   467
auth_chap_expect_r(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   468
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   469
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   470
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   471
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   472
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   473
	uint32_t		alg;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   474
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   475
	client_get_numeric_data(&client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   476
	    AKT_CHAP_A,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   477
	    &alg);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   478
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   479
	if (alg != 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   480
		client->phase = AP_CHAP_R_WAITING;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   481
	} else {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   482
		/* none of proposed algorithm is supported or understood. */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   483
		client->phase = AP_CHAP_A_WAITING;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   484
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   485
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   486
	return (KV_HANDLED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   487
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   488
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   489
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   490
 * Initiator does not propose security negotiation, target needs to
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   491
 * verify if we can bypass the security negotiation phase or propose
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   492
 * a security negotiation for the initiator.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   493
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   494
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   495
/*ARGSUSED*/
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   496
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   497
iscsit_auth_propose(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   498
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   499
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   500
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   501
	conn_auth_t		*auth = &lsm->icl_auth;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   502
	iscsit_auth_method_t	*am_list = &auth->ca_method_valid_list[0];
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   503
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   504
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   505
	int			nvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   506
	kv_status_t		kvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   507
	const char		*am_name;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   508
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   509
	if (am_list[0] == AM_NONE || am_list[0] == 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   510
		lsm->icl_auth_pass = 1;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   511
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   512
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   513
	if (lsm->icl_auth_pass == 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   514
		/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   515
		 * It should be noted that the negotiation might also
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   516
		 * be directed by the target if the initiator does
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   517
		 * support security, but is not ready to direct the
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   518
		 * negotiation (propose options).
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   519
		 * - RFC3720 section 5.3.2.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   520
		 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   521
		am_name = am_id_to_name(am_list[0]);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   522
		nvrc = nvlist_add_string(
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   523
		    lsm->icl_response_nvlist,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   524
		    "AuthMethod", am_name);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   525
		kvrc = idm_nvstat_to_kvstat(nvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   526
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   527
		client->phase = AP_AM_PROPOSED;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   528
	} else {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   529
		kvrc = KV_HANDLED;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   530
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   531
		client->phase = AP_DONE;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   532
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   533
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   534
	return (kvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   535
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   536
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   537
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   538
 * Shift the authentication phase according to the authentication
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   539
 * method once it is selected.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   540
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   541
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   542
/*ARGSUSED*/
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   543
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   544
iscsit_auth_expect_key(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   545
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   546
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   547
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   548
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   549
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   550
	if (client->negotiatedMethod != 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   551
		/* Shift security negotiation phase. */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   552
		switch (client->negotiatedMethod) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   553
		case AM_CHAP:
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   554
			client->phase = AP_CHAP_A_WAITING;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   555
			break;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   556
		case AM_NONE:
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   557
			client->phase = AP_DONE;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   558
			lsm->icl_auth_pass = 1;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   559
			break;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   560
		default:
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   561
			ASSERT(0);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   562
			break;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   563
		}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   564
	} else {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   565
		/* None of proposed method is supported or understood. */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   566
		client->phase = AP_AM_UNDECIDED;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   567
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   568
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   569
	return (KV_HANDLED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   570
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   571
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   572
/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   573
 * The last step of the chap authentication. We will validate the
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   574
 * chap parameters we received and authenticate the client here.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   575
 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   576
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   577
/*ARGSUSED*/
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   578
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   579
auth_chap_done(iscsit_conn_t *ict, nvpair_t *nvp,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   580
    const idm_kv_xlate_t *ikvx)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   581
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   582
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   583
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   584
	kv_status_t		kvrc = KV_HANDLED;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   585
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   586
	conn_auth_t		*auth = &lsm->icl_auth;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   587
	char			*username_in;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   588
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   589
	uint32_t		chap_id;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   590
	unsigned char		*chap_challenge;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   591
	unsigned int		challenge_len;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   592
	char			*chap_name;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   593
	unsigned char		*chap_resp;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   594
	unsigned int		resp_len;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   595
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   596
	int			bi_auth;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   597
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   598
	username_in = auth->ca_ini_chapuser;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   599
	if (username_in[0] == '\0')
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   600
		return (KV_AUTH_FAILED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   601
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   602
	/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   603
	 * Check if we have received a valid list of response keys.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   604
	 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   605
	if (!client_auth_key_present(&client->recvKeyBlock, AKT_CHAP_N) ||
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   606
	    !client_auth_key_present(&client->recvKeyBlock, AKT_CHAP_R) ||
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   607
	    ((bi_auth =
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   608
	    client_auth_key_present(&client->recvKeyBlock, AKT_CHAP_I)) ^
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   609
	    client_auth_key_present(&client->recvKeyBlock, AKT_CHAP_C))) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   610
		return (KV_MISSING_FIELDS);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   611
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   612
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   613
	client->phase = AP_DONE;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   614
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   615
	client_get_string_data(&client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   616
	    AKT_CHAP_N,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   617
	    &chap_name);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   618
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   619
	/* check username */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   620
	if (strcmp(username_in, chap_name) != 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   621
		return (KV_AUTH_FAILED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   622
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   623
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   624
	client_get_numeric_data(&client->sendKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   625
	    AKT_CHAP_I,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   626
	    &chap_id);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   627
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   628
	client_get_binary_data(&client->sendKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   629
	    AKT_CHAP_C,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   630
	    &chap_challenge, &challenge_len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   631
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   632
	client_get_binary_data(&client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   633
	    AKT_CHAP_R,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   634
	    &chap_resp, &resp_len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   635
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   636
	if (iscsit_verify_chap_resp(lsm,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   637
	    chap_id, chap_challenge, challenge_len,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   638
	    chap_resp, resp_len) != ISCSI_AUTH_PASSED) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   639
		return (KV_AUTH_FAILED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   640
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   641
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   642
	/* bi-direction authentication is required */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   643
	if (bi_auth != 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   644
		kvrc = iscsit_auth_gen_response(ict);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   645
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   646
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   647
	lsm->icl_auth_pass = 1;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   648
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   649
	return (kvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   650
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   651
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   652
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   653
iscsit_auth_gen_challenge(iscsit_conn_t *ict)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   654
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   655
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   656
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   657
	int			nvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   658
	kv_status_t		kvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   659
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   660
	unsigned char		idData[1];
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   661
	unsigned char		*bin;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   662
	int			len;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   663
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   664
	auth_random_set_data(idData, 1);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   665
	client_set_numeric_data(&client->sendKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   666
	    AKT_CHAP_I,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   667
	    idData[0]);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   668
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   669
	/* send chap identifier */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   670
	nvrc = nvlist_add_uint64(
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   671
	    lsm->icl_response_nvlist,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   672
	    "CHAP_I", idData[0]);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   673
	kvrc = idm_nvstat_to_kvstat(nvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   674
	if (kvrc != 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   675
		return (kvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   676
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   677
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   678
	bin = &(client->auth_send_binary_block.largeBinary[0]);
9162
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents: 8872
diff changeset
   679
	len = iscsitAuthChapResponseLength;
7978
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   680
	auth_random_set_data(bin, len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   681
	client_set_binary_data(&client->sendKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   682
	    AKT_CHAP_C,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   683
	    bin, len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   684
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   685
	/* send chap challenge */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   686
	nvrc = nvlist_add_byte_array(
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   687
	    lsm->icl_response_nvlist,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   688
	    "CHAP_C", bin, len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   689
	kvrc = idm_nvstat_to_kvstat(nvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   690
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   691
	return (kvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   692
}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   693
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   694
static kv_status_t
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   695
iscsit_auth_gen_response(iscsit_conn_t *ict)
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   696
{
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   697
	iscsit_conn_login_t	*lsm = &ict->ict_login_sm;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   698
	iscsit_auth_client_t	*client = &lsm->icl_auth_client;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   699
	int			nvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   700
	kv_status_t		kvrc;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   701
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   702
	conn_auth_t		*auth = &lsm->icl_auth;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   703
	char			*tgt_username;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   704
	uint8_t			*tgt_password;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   705
	int			tgt_password_length;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   706
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   707
	uint32_t		chap_id;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   708
	unsigned char		*chap_challenge;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   709
	unsigned int		challenge_len;
9162
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents: 8872
diff changeset
   710
	uchar_t			resp[iscsitAuthChapResponseLength];
7978
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   711
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   712
	tgt_username = auth->ca_tgt_chapuser;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   713
	tgt_password = auth->ca_tgt_chapsecret;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   714
	tgt_password_length = auth->ca_tgt_chapsecretlen;
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   715
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   716
	/*
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   717
	 * We can't know in advance whether the initiator will attempt
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   718
	 * mutual authentication, so now we need to check whether we
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   719
	 * have a target CHAP secret configured.
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   720
	 */
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   721
	if (tgt_password_length == 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   722
		return (KV_AUTH_FAILED);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   723
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   724
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   725
	client_get_numeric_data(&client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   726
	    AKT_CHAP_I,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   727
	    &chap_id);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   728
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   729
	client_get_binary_data(&client->recvKeyBlock,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   730
	    AKT_CHAP_C,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   731
	    &chap_challenge, &challenge_len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   732
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   733
	client_compute_chap_resp(
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   734
	    &resp[0],
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   735
	    chap_id,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   736
	    tgt_password, tgt_password_length,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   737
	    chap_challenge, challenge_len);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   738
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   739
	nvrc = nvlist_add_string(
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   740
	    lsm->icl_response_nvlist,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   741
	    "CHAP_N", tgt_username);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   742
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   743
	if (nvrc == 0) {
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   744
		nvrc = nvlist_add_byte_array(
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   745
		    lsm->icl_response_nvlist,
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   746
		    "CHAP_R", resp, sizeof (resp));
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   747
	}
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   748
	kvrc = idm_nvstat_to_kvstat(nvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   749
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   750
	return (kvrc);
4559e57ec313 PSARC 2008/587 iSCSI Port Provider for COMSTAR
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   751
}