xref: /spdk/test/iscsi_tgt/chap/chap_common.sh (revision d6fb18e5e06bfa278259d0a6dc8b0a5dfff63b08)
1#!/usr/bin/env bash
2#  SPDX-License-Identifier: BSD-3-Clause
3#  Copyright (C) 2018 Intel Corporation
4#  All rights reserved.
5#
6
7TARGET_NAME="iqn.2016-06.io.spdk:disk1"
8TARGET_ALIAS_NAME="disk1_alias"
9MALLOC_BDEV_SIZE=64
10MALLOC_BLOCK_SIZE=512
11
12function parse_cmd_line() {
13	OPTIND=0
14	DURING_DISCOVERY=0
15	DURING_LOGIN=0
16	BI_DIRECT=0
17	CHAP_USER="chapo"
18	CHAP_PASS="123456789123"
19	CHAP_MUSER=""
20	CHAP_MUSER=""
21	AUTH_GROUP_ID=1
22
23	while getopts ":t:u:s:r:m:dlb" opt; do
24		case ${opt} in
25			t)
26				AUTH_GROUP_ID=$OPTARG
27				;;
28			u)
29				CHAP_USER=$OPTARG
30				;;
31			s)
32				CHAP_PASS=$OPTARG
33				;;
34			r)
35				CHAP_MUSER=$OPTARG
36				;;
37			m)
38				CHAP_MPASS=$OPTARG
39				;;
40			d)
41				DURING_DISCOVERY=1
42				;;
43			l)
44				DURING_LOGIN=1
45				;;
46			b)
47				BI_DIRECT=1
48				;;
49			\?)
50				echo "Usage: config_chap_credentials_for_target/config_chap_credentials_for_initiator [-t auth_group id] \
51            [-u user] [-s password] [-r muser] [-m mpassword] [-d] [-l] [-b]"
52				;;
53		esac
54	done
55}
56
57function restart_iscsid() {
58	sleep 3
59	systemctl restart iscsid
60	sleep 1
61}
62
63function default_initiator_chap_credentials() {
64	iscsiadm -m node --logout || true
65	iscsiadm -m node -o delete || true
66
67	sed -i "s/^node.session.auth.authmethod = CHAP/#node.session.auth.authmethod = CHAP/" /etc/iscsi/iscsid.conf
68	sed -i "s/^node.session.auth.username =.*/#node.session.auth.username = username/" /etc/iscsi/iscsid.conf
69	sed -i "s/^node.session.auth.password =.*/#node.session.auth.password = password/" /etc/iscsi/iscsid.conf
70	sed -i "s/^node.session.auth.username_in =.*/#node.session.auth.username_in = username_in/" /etc/iscsi/iscsid.conf
71	sed -i "s/^node.session.auth.password_in =.*/#node.session.auth.password_in = password_in/" /etc/iscsi/iscsid.conf
72
73	sed -i 's/^discovery.sendtargets.auth.authmethod = CHAP/#discovery.sendtargets.auth.authmethod = CHAP/' /etc/iscsi/iscsid.conf
74	sed -i 's/^discovery.sendtargets.auth.username =.*/#discovery.sendtargets.auth.username = username/' /etc/iscsi/iscsid.conf
75	sed -i 's/^discovery.sendtargets.auth.password =.*/#discovery.sendtargets.auth.password = password/' /etc/iscsi/iscsid.conf
76	sed -i "s/^discovery.sendtargets.auth.username_in =.*/#discovery.sendtargets.auth.username_in = username_in/" /etc/iscsi/iscsid.conf
77	sed -i "s/^discovery.sendtargets.auth.password_in =.*/#discovery.sendtargets.auth.password_in = password_in/" /etc/iscsi/iscsid.conf
78	restart_iscsid
79	trap "trap - ERR; print_backtrace >&2" ERR
80}
81
82function config_chap_credentials_for_target() {
83
84	parse_cmd_line "$@"
85	#create auth group $AUTH_GROUP_ID
86	$rpc_py iscsi_create_auth_group $AUTH_GROUP_ID
87	#add secret + msecret to the auth group
88	if [ -z "$CHAP_MUSER" ] || [ -z "$CHAP_MPASS" ]; then
89		$rpc_py iscsi_auth_group_add_secret -u $CHAP_USER -s $CHAP_PASS $AUTH_GROUP_ID
90	else
91		$rpc_py iscsi_auth_group_add_secret -u $CHAP_USER -s $CHAP_PASS -m $CHAP_MUSER -r $CHAP_MPASS $AUTH_GROUP_ID
92	fi
93
94	#set chap authentication method during discovery phase
95	if [ $DURING_LOGIN -eq 1 ]; then
96		if [ $BI_DIRECT -eq 1 ]; then
97			$rpc_py iscsi_target_node_set_auth -g $AUTH_GROUP_ID -r -m $TARGET_NAME
98		else
99			$rpc_py iscsi_target_node_set_auth -g $AUTH_GROUP_ID -r $TARGET_NAME
100		fi
101	fi
102	if [ $DURING_DISCOVERY -eq 1 ]; then
103		if [ $BI_DIRECT -eq 1 ]; then
104			$rpc_py iscsi_set_discovery_auth -r -m -g $AUTH_GROUP_ID
105		else
106			$rpc_py iscsi_set_discovery_auth -r -g $AUTH_GROUP_ID
107		fi
108	fi
109}
110
111function config_chap_credentials_for_initiator() {
112
113	parse_cmd_line "$@"
114	default_initiator_chap_credentials
115
116	if [ $DURING_LOGIN -eq 1 ]; then
117		sed -i "s/#node.session.auth.authmethod = CHAP/node.session.auth.authmethod = CHAP/" /etc/iscsi/iscsid.conf
118		sed -i "s/#node.session.auth.username =.*/node.session.auth.username = ${CHAP_USER}/" /etc/iscsi/iscsid.conf
119		sed -i "s/#node.session.auth.password =.*/node.session.auth.password = ${CHAP_PASS}/" /etc/iscsi/iscsid.conf
120		if [ $BI_DIRECT -eq 1 ] && [ -n "$CHAP_MPASS" ] && [ -n "$CHAP_MUSER" ]; then
121			sed -i "s/#node.session.auth.username_in =.*/node.session.auth.username_in = ${CHAP_MUSER}/" /etc/iscsi/iscsid.conf
122			sed -i "s/#node.session.auth.password_in =.*/node.session.auth.password_in = ${CHAP_MPASS}/" /etc/iscsi/iscsid.conf
123		fi
124	fi
125
126	if [ $DURING_DISCOVERY -eq 1 ]; then
127		sed -i "s/#discovery.sendtargets.auth.authmethod = CHAP/discovery.sendtargets.auth.authmethod = CHAP/" /etc/iscsi/iscsid.conf
128		sed -i "s/#discovery.sendtargets.auth.username =.*/discovery.sendtargets.auth.username = ${CHAP_USER}/" /etc/iscsi/iscsid.conf
129		sed -i "s/#discovery.sendtargets.auth.password =.*/discovery.sendtargets.auth.password = ${CHAP_PASS}/" /etc/iscsi/iscsid.conf
130		if [ $BI_DIRECT -eq 1 ] && [ -n "$CHAP_MPASS" ] && [ -n "$CHAP_MUSER" ]; then
131			sed -i "s/#discovery.sendtargets.auth.username_in =.*/discovery.sendtargets.auth.username_in = ${CHAP_MUSER}/" /etc/iscsi/iscsid.conf
132			sed -i "s/#discovery.sendtargets.auth.password_in =.*/discovery.sendtargets.auth.password_in = ${CHAP_MPASS}/" /etc/iscsi/iscsid.conf
133		fi
134	fi
135	restart_iscsid
136	trap "trap - ERR; default_initiator_chap_credentials; print_backtrace >&2" ERR
137}
138
139function set_up_iscsi_target() {
140	timing_enter start_iscsi_tgt
141	"${ISCSI_APP[@]}" -m 0x2 -p 1 -s 512 --wait-for-rpc &
142	pid=$!
143	echo "iSCSI target launched. pid: $pid"
144	trap 'killprocess $pid;exit 1' SIGINT SIGTERM EXIT
145	waitforlisten $pid
146	$rpc_py iscsi_set_options -o 30 -a 4
147	$rpc_py framework_start_init
148	echo "iscsi_tgt is listening. Running tests..."
149	timing_exit start_iscsi_tgt
150
151	$rpc_py iscsi_create_portal_group $PORTAL_TAG $TARGET_IP:$ISCSI_PORT
152	$rpc_py iscsi_create_initiator_group $INITIATOR_TAG $INITIATOR_NAME $NETMASK
153	$rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE
154	$rpc_py iscsi_create_target_node $TARGET_NAME $TARGET_ALIAS_NAME 'Malloc0:0' $PORTAL_TAG:$INITIATOR_TAG 256 -d
155	sleep 1
156	trap 'killprocess $pid; iscsitestfini; exit 1' SIGINT SIGTERM EXIT
157}
158