git: 48cb3fee2586 - main - Retire obsolete iscsi_initiator(4)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 26 Oct 2021 20:17:55 UTC
The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=48cb3fee25862a6adc10fe0b2c2dc15c7fd7fd9e commit 48cb3fee25862a6adc10fe0b2c2dc15c7fd7fd9e Author: Ed Maste <emaste@FreeBSD.org> AuthorDate: 2021-10-26 17:24:30 +0000 Commit: Ed Maste <emaste@FreeBSD.org> CommitDate: 2021-10-26 20:17:35 +0000 Retire obsolete iscsi_initiator(4) The new iSCSI initiator iscsi(4) was introduced with FreeBSD 10.0, and the old intiator was marked obsolete shortly thereafter (in commit d32789d95cfbf, MFC'd to stable/10 in ba54910169c4). Remove it now. Reviewed by: jhb, mav Relnotes: yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D32673 --- ObsoleteFiles.inc | 5 + sbin/Makefile | 1 - sbin/iscontrol/Makefile | 14 - sbin/iscontrol/Makefile.depend | 21 - sbin/iscontrol/auth_subr.c | 206 ----- sbin/iscontrol/config.c | 382 --------- sbin/iscontrol/fsm.c | 759 ------------------ sbin/iscontrol/iscontrol.8 | 141 ---- sbin/iscontrol/iscontrol.c | 264 ------- sbin/iscontrol/iscontrol.h | 167 ---- sbin/iscontrol/login.c | 442 ----------- sbin/iscontrol/misc.c | 228 ------ sbin/iscontrol/pdu.c | 178 ----- share/man/man4/Makefile | 1 - share/man/man4/iscsi_initiator.4 | 118 --- sys/conf/NOTES | 1 - sys/conf/files | 6 - sys/dev/iscsi_initiator/isc_cam.c | 351 -------- sys/dev/iscsi_initiator/isc_sm.c | 750 ------------------ sys/dev/iscsi_initiator/isc_soc.c | 680 ---------------- sys/dev/iscsi_initiator/isc_subr.c | 184 ----- sys/dev/iscsi_initiator/iscsi.c | 880 --------------------- sys/dev/iscsi_initiator/iscsi.h | 502 ------------ sys/dev/iscsi_initiator/iscsi_subr.c | 603 -------------- sys/dev/iscsi_initiator/iscsivar.h | 571 ------------- sys/modules/Makefile | 1 - sys/modules/iscsi_initiator/Makefile | 14 - targets/pseudo/userland/Makefile.depend | 1 - tools/build/mk/OptionalObsoleteFiles.inc | 3 - .../kerneldoc/subsys/Doxyfile-dev_iscsi_initiator | 21 - usr.bin/iscsictl/iscsi.conf.5 | 5 +- usr.bin/iscsictl/iscsictl.8 | 15 - 32 files changed, 6 insertions(+), 7509 deletions(-) diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index b6a2d299bc8c..c60629197386 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -40,6 +40,11 @@ # xargs -n1 | sort | uniq -d; # done +# 20211026: retire obsolete iscsi initiator +OLD_FILES+=sbin/iscontrol +OLD_FILES+=usr/share/man/man4/iscsi_initiator.4.gz +OLD_FILES+=usr/share/man/man8/iscontrol.8.gz + # 20211022 OLD_FILES+=sbin/spppcontrol .if ${TARGET_ARCH} == "i386" diff --git a/sbin/Makefile b/sbin/Makefile index b4da58680458..7eb497e3e3dd 100644 --- a/sbin/Makefile +++ b/sbin/Makefile @@ -76,7 +76,6 @@ SUBDIR.${MK_INET6}+= rtsol SUBDIR.${MK_IPFILTER}+= ipf SUBDIR.${MK_IPFW}+= ipfw SUBDIR.${MK_IPFW}+= natd -SUBDIR.${MK_ISCSI}+= iscontrol SUBDIR.${MK_NVME}+= nvmecontrol SUBDIR.${MK_OPENSSL}+= decryptcore SUBDIR.${MK_PF}+= pfctl diff --git a/sbin/iscontrol/Makefile b/sbin/iscontrol/Makefile deleted file mode 100644 index 613444a468f4..000000000000 --- a/sbin/iscontrol/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# $FreeBSD$ - -PACKAGE=iscsilegacy -SRCS= iscontrol.c pdu.c fsm.c config.c login.c auth_subr.c misc.c -PROG= iscontrol -LIBADD= cam md -S= ${SRCTOP}/sys - -WARNS?= 3 -CFLAGS+= -I$S - -MAN= iscontrol.8 - -.include <bsd.prog.mk> diff --git a/sbin/iscontrol/Makefile.depend b/sbin/iscontrol/Makefile.depend deleted file mode 100644 index c800a3df77c3..000000000000 --- a/sbin/iscontrol/Makefile.depend +++ /dev/null @@ -1,21 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - gnu/lib/csu \ - include \ - include/arpa \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - lib/libcam \ - lib/libcompiler_rt \ - lib/libmd \ - lib/libsbuf \ - - -.include <dirdeps.mk> - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/sbin/iscontrol/auth_subr.c b/sbin/iscontrol/auth_subr.c deleted file mode 100644 index a4c17ba20868..000000000000 --- a/sbin/iscontrol/auth_subr.c +++ /dev/null @@ -1,206 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2005-2010 Daniel Braniss <danny@cs.huji.ac.il> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* - | $Id: auth_subr.c,v 2.2 2007/06/01 08:09:37 danny Exp $ - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/sysctl.h> - -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <arpa/inet.h> -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <fcntl.h> - -#include <md5.h> -#include <sha.h> - -#include <dev/iscsi_initiator/iscsi.h> -#include "iscontrol.h" - -static int -chapMD5(char id, char *cp, char *chapSecret, unsigned char *digest) -{ - MD5_CTX ctx; - char *tmp; - int len; - - debug_called(3); - - MD5Init(&ctx); - - MD5Update(&ctx, &id, 1); - - if((len = str2bin(chapSecret, &tmp)) == 0) { - // print error - return -1; - } - MD5Update(&ctx, tmp, len); - free(tmp); - - if((len = str2bin(cp, &tmp)) == 0) { - // print error - return -1; - } - MD5Update(&ctx, tmp, len); - free(tmp); - - MD5Final(digest, &ctx); - - - return 0; -} - -static int -chapSHA1(char id, char *cp, char *chapSecret, unsigned char *digest) -{ - SHA1_CTX ctx; - char *tmp; - int len; - - debug_called(3); - - SHA1_Init(&ctx); - - SHA1_Update(&ctx, &id, 1); - - if((len = str2bin(chapSecret, &tmp)) == 0) { - // print error - return -1; - } - SHA1_Update(&ctx, tmp, len); - free(tmp); - - if((len = str2bin(cp, &tmp)) == 0) { - // print error - return -1; - } - SHA1_Update(&ctx, tmp, len); - free(tmp); - - SHA1_Final(digest, &ctx); - - return 0; - -} -/* - | the input text format can be anything that the rfc3270 defines - | (see section 5.1 and str2bin) - | digest length for md5 is 128bits, and for sha1 is 160bits. - | digest is an ASCII string which represents the bits in - | hexadecimal or base64 according to the challenge(cp) format - */ -char * -chapDigest(char *ap, char id, char *cp, char *chapSecret) -{ - int len; - unsigned char digest[20]; - char encoding[3]; - - debug_called(3); - - len = 0; - if(strcmp(ap, "5") == 0 && chapMD5(id, cp, chapSecret, digest) == 0) - len = 16; - else - if(strcmp(ap, "7") == 0 && chapSHA1(id, cp, chapSecret, digest) == 0) - len = 20; - - if(len) { - sprintf(encoding, "%.2s", cp); - return bin2str(encoding, digest, len); - } - - return NULL; -} - -char * -genChapChallenge(char *encoding, uint len) -{ - int fd; - unsigned char tmp[1024]; - - if(len > sizeof(tmp)) - return NULL; - - if((fd = open("/dev/random", O_RDONLY)) != -1) { - read(fd, tmp, len); - close(fd); - return bin2str(encoding, tmp, len); - } - perror("/dev/random"); - // make up something ... - return NULL; -} - -#ifdef TEST_AUTH -static void -puke(char *str, unsigned char *dg, int len) -{ - printf("%3d] %s\n 0x", len, str); - while(len-- > 0) - printf("%02x", *dg++); - printf("\n"); -} - -main(int cc, char **vv) -{ - char *p, *ap, *ip, *cp, *chapSecret, *digest; - int len; - -#if 0 - ap = "5"; - chapSecret = "0xa5aff013dd839b1edd31ee73a1df0b1b"; -// chapSecret = "abcdefghijklmnop"; - len = str2bin(chapSecret, &cp); - puke(chapSecret, cp, len); - - ip = "238"; - cp = "0xbd456029"; - - - if((digest = chapDigest(ap, ip, cp, chapSecret)) != NULL) { - len = str2bin(digest, &cp); - puke(digest, cp, len); - } -#else - printf("%d] %s\n", 24, genChallenge("0X", 24)); -#endif -} -#endif diff --git a/sbin/iscontrol/config.c b/sbin/iscontrol/config.c deleted file mode 100644 index 2fe44512f311..000000000000 --- a/sbin/iscontrol/config.c +++ /dev/null @@ -1,382 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2005-2009 Daniel Braniss <danny@cs.huji.ac.il> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -/* - | $Id: config.c,v 2.1 2006/11/12 08:06:51 danny Exp danny $ - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <fcntl.h> -#include <time.h> -#include <ctype.h> -#include <camlib.h> - -#include <dev/iscsi_initiator/iscsi.h> -#include "iscontrol.h" - -/* - | ints - */ -#define OPT_port 1 -#define OPT_tags 2 - -#define OPT_maxConnections 3 -#define OPT_maxRecvDataSegmentLength 4 -#define OPT_maxXmitDataSegmentLength 5 -#define OPT_maxBurstLength 6 -#define OPT_firstBurstLength 7 -#define OPT_defaultTime2Wait 8 -#define OPT_defaultTime2Retain 9 -#define OPT_maxOutstandingR2T 10 -#define OPT_errorRecoveryLevel 11 -#define OPT_targetPortalGroupTag 12 -#define OPT_headerDigest 13 -#define OPT_dataDigest 14 -/* - | Booleans - */ -#define OPT_initialR2T 16 -#define OPT_immediateData 17 -#define OPT_dataPDUInOrder 18 -#define OPT_dataSequenceInOrder 19 -/* - | strings - */ -#define OPT_sessionType 15 - -#define OPT_targetAddress 21 -#define OPT_targetAlias 22 -#define OPT_targetName 23 -#define OPT_initiatorName 24 -#define OPT_initiatorAlias 25 -#define OPT_authMethod 26 - -#define OPT_chapSecret 27 -#define OPT_chapIName 28 -#define OPT_chapDigest 29 -#define OPT_tgtChapName 30 -#define OPT_tgtChapSecret 31 -#define OPT_tgtChallengeLen 32 -/* - | private - */ -#define OPT_maxluns 33 -#define OPT_iqn 34 -#define OPT_sockbufsize 35 - -/* - | sentinel - */ -#define OPT_end 0 - -#define _OFF(v) ((int)&((isc_opt_t *)NULL)->v) -#define _E(u, s, v) {.usage=u, .scope=s, .name=#v, .tokenID=OPT_##v} - -textkey_t keyMap[] = { - _E(U_PR, S_PR, port), - _E(U_PR, S_PR, tags), - _E(U_PR, S_PR, maxluns), - _E(U_PR, S_PR, sockbufsize), - - _E(U_PR, S_PR, iqn), - _E(U_PR, S_PR, chapSecret), - _E(U_PR, S_PR, chapIName), - _E(U_PR, S_PR, chapDigest), - _E(U_PR, S_PR, tgtChapName), - _E(U_PR, S_PR, tgtChapSecret), - _E(U_PR, S_PR, tgtChallengeLen), - - _E(U_IO, S_CO, headerDigest), - _E(U_IO, S_CO, dataDigest), - - _E(U_IO, S_CO, authMethod), - - _E(U_LO, S_SW, maxConnections), - _E(U_IO, S_SW, targetName), - - _E(U_IO, S_SW, initiatorName), - _E(U_ALL,S_SW, targetAlias), - _E(U_ALL,S_SW, initiatorAlias), - _E(U_ALL,S_SW, targetAddress), - - _E(U_ALL,S_SW, targetPortalGroupTag), - - _E(U_LO, S_SW, initialR2T), - _E(U_LO, S_SW, immediateData), - - _E(U_ALL,S_CO, maxRecvDataSegmentLength), - _E(U_ALL,S_CO, maxXmitDataSegmentLength), - - _E(U_LO, S_SW, maxBurstLength), - _E(U_LO, S_SW, firstBurstLength), - _E(U_LO, S_SW, defaultTime2Wait), - _E(U_LO, S_SW, defaultTime2Retain), - - _E(U_LO, S_SW, maxOutstandingR2T), - _E(U_LO, S_SW, dataPDUInOrder), - _E(U_LO, S_SW, dataSequenceInOrder), - - _E(U_LO, S_SW, errorRecoveryLevel), - - _E(U_LO, S_SW, sessionType), - - _E(0, 0, end) -}; - -#define _OPT_INT(w) strtol((char *)w, NULL, 0) -#define _OPT_STR(w) (char *)(w) - -static __inline int -_OPT_BOOL(char *w) -{ - if(isalpha((unsigned char)*w)) - return strcasecmp(w, "TRUE") == 0; - else - return _OPT_INT(w); -} - -#define _CASE(k, v) case OPT_##k: op->k = v; break -static void -setOption(isc_opt_t *op, int which, void *rval) -{ - switch(which) { - _CASE(port, _OPT_INT(rval)); - _CASE(tags, _OPT_INT(rval)); - _CASE(maxluns, _OPT_INT(rval)); - _CASE(iqn, _OPT_STR(rval)); - _CASE(sockbufsize, _OPT_INT(rval)); - - _CASE(maxConnections, _OPT_INT(rval)); - _CASE(maxRecvDataSegmentLength, _OPT_INT(rval)); - _CASE(maxXmitDataSegmentLength, _OPT_INT(rval)); - _CASE(maxBurstLength, _OPT_INT(rval)); - _CASE(firstBurstLength, _OPT_INT(rval)); - _CASE(defaultTime2Wait, _OPT_INT(rval)); - _CASE(defaultTime2Retain, _OPT_INT(rval)); - _CASE(maxOutstandingR2T, _OPT_INT(rval)); - _CASE(errorRecoveryLevel, _OPT_INT(rval)); - _CASE(targetPortalGroupTag, _OPT_INT(rval)); - _CASE(headerDigest, _OPT_STR(rval)); - _CASE(dataDigest, _OPT_STR(rval)); - - _CASE(targetAddress, _OPT_STR(rval)); - _CASE(targetAlias, _OPT_STR(rval)); - _CASE(targetName, _OPT_STR(rval)); - _CASE(initiatorName, _OPT_STR(rval)); - _CASE(initiatorAlias, _OPT_STR(rval)); - _CASE(authMethod, _OPT_STR(rval)); - _CASE(chapSecret, _OPT_STR(rval)); - _CASE(chapIName, _OPT_STR(rval)); - _CASE(chapDigest, _OPT_STR(rval)); - - _CASE(tgtChapName, _OPT_STR(rval)); - _CASE(tgtChapSecret, _OPT_STR(rval)); - - _CASE(initialR2T, _OPT_BOOL(rval)); - _CASE(immediateData, _OPT_BOOL(rval)); - _CASE(dataPDUInOrder, _OPT_BOOL(rval)); - _CASE(dataSequenceInOrder, _OPT_BOOL(rval)); - } -} - -static char * -get_line(FILE *fd) -{ - static char *sp, line[BUFSIZ]; - char *lp, *p; - - do { - if(sp == NULL) - sp = fgets(line, sizeof line, fd); - - if((lp = sp) == NULL) - break; - if((p = strchr(lp, '\n')) != NULL) - *p = 0; - if((p = strchr(lp, '#')) != NULL) - *p = 0; - if((p = strchr(lp, ';')) != NULL) { - *p++ = 0; - sp = p; - } else - sp = NULL; - if(*lp) - return lp; - } while (feof(fd) == 0); - return NULL; -} - -static int -getConfig(FILE *fd, char *key, char **Ar, int *nargs) -{ - char *lp, *p, **ar; - int state, len, n; - - ar = Ar; - if(key) - len = strlen(key); - else - len = 0; - state = 0; - while((lp = get_line(fd)) != NULL) { - for(; isspace((unsigned char)*lp); lp++) - ; - switch(state) { - case 0: - if((p = strchr(lp, '{')) != NULL) { - while((--p > lp) && *p && isspace((unsigned char)*p)); - n = p - lp; - if(len && strncmp(lp, key, MAX(n, len)) == 0) - state = 2; - else - state = 1; - continue; - } - break; - - case 1: - if(*lp == '}') - state = 0; - continue; - - case 2: - if(*lp == '}') - goto done; - - break; - } - - - for(p = &lp[strlen(lp)-1]; isspace((unsigned char)*p); p--) - *p = 0; - if((*nargs)-- > 0) - *ar++ = strdup(lp); - } - - done: - if(*nargs > 0) - *ar = 0; - *nargs = ar - Ar; - return ar - Ar; -} - -static textkey_t * -keyLookup(char *key) -{ - textkey_t *tk; - - for(tk = keyMap; tk->name && strcmp(tk->name, "end"); tk++) { - if(strcasecmp(key, tk->name) == 0) - return tk; - } - return NULL; -} - -static void -puke(isc_opt_t *op) -{ - printf("%24s = %d\n", "port", op->port); - printf("%24s = %d\n", "tags", op->tags); - printf("%24s = %d\n", "maxluns", op->maxluns); - printf("%24s = %s\n", "iqn", op->iqn); - - printf("%24s = %d\n", "maxConnections", op->maxConnections); - printf("%24s = %d\n", "maxRecvDataSegmentLength", op->maxRecvDataSegmentLength); - printf("%24s = %d\n", "maxXmitDataSegmentLength", op->maxRecvDataSegmentLength); - printf("%24s = %d\n", "maxBurstLength", op->maxBurstLength); - printf("%24s = %d\n", "firstBurstLength", op->firstBurstLength); - printf("%24s = %d\n", "defaultTime2Wait", op->defaultTime2Wait); - printf("%24s = %d\n", "defaultTime2Retain", op->defaultTime2Retain); - printf("%24s = %d\n", "maxOutstandingR2T", op->maxOutstandingR2T); - printf("%24s = %d\n", "errorRecoveryLevel", op->errorRecoveryLevel); - printf("%24s = %d\n", "targetPortalGroupTag", op->targetPortalGroupTag); - - printf("%24s = %s\n", "headerDigest", op->headerDigest); - printf("%24s = %s\n", "dataDigest", op->dataDigest); - - printf("%24s = %d\n", "initialR2T", op->initialR2T); - printf("%24s = %d\n", "immediateData", op->immediateData); - printf("%24s = %d\n", "dataPDUInOrder", op->dataPDUInOrder); - printf("%24s = %d\n", "dataSequenceInOrder", op->dataSequenceInOrder); - - printf("%24s = %s\n", "sessionType", op->sessionType); - printf("%24s = %s\n", "targetAddress", op->targetAddress); - printf("%24s = %s\n", "targetAlias", op->targetAlias); - printf("%24s = %s\n", "targetName", op->targetName); - printf("%24s = %s\n", "initiatorName", op->initiatorName); - printf("%24s = %s\n", "initiatorAlias", op->initiatorAlias); - printf("%24s = %s\n", "authMethod", op->authMethod); - printf("%24s = %s\n", "chapSecret", op->chapSecret); - printf("%24s = %s\n", "chapIName", op->chapIName); - printf("%24s = %s\n", "tgtChapName", op->tgtChapName); - printf("%24s = %s\n", "tgtChapSecret", op->tgtChapSecret); - printf("%24s = %d\n", "tgttgtChallengeLen", op->tgtChallengeLen); -} - -void -parseArgs(int nargs, char **args, isc_opt_t *op) -{ - char **ar; - char *p, *v; - textkey_t *tk; - - for(ar = args; nargs > 0; nargs--, ar++) { - p = strchr(*ar, '='); - if(p == NULL) - continue; - *p = 0; - v = p + 1; - while(isspace((unsigned char)*--p)) - *p = 0; - while(isspace((unsigned char)*v)) - v++; - if((tk = keyLookup(*ar)) == NULL) - continue; - setOption(op, tk->tokenID, v); - } -} - -void -parseConfig(FILE *fd, char *key, isc_opt_t *op) -{ - char *Ar[256]; - int cc; - - cc = 256; - if(getConfig(fd, key, Ar, &cc)) - parseArgs(cc, Ar, op); - if(vflag) - puke(op); -} diff --git a/sbin/iscontrol/fsm.c b/sbin/iscontrol/fsm.c deleted file mode 100644 index 8efbe6667b16..000000000000 --- a/sbin/iscontrol/fsm.c +++ /dev/null @@ -1,759 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2005-2010 Daniel Braniss <danny@cs.huji.ac.il> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* - | $Id: fsm.c,v 2.8 2007/05/19 16:34:21 danny Exp danny $ - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/sysctl.h> - -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <arpa/inet.h> -#include <sys/ioctl.h> -#include <netdb.h> -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <fcntl.h> -#include <time.h> -#include <syslog.h> -#include <stdarg.h> -#include <camlib.h> - -#include <dev/iscsi_initiator/iscsi.h> -#include "iscontrol.h" - -typedef enum { - T1 = 1, - T2, /*T3,*/ T4, T5, /*T6,*/ T7, T8, T9, - T10, T11, T12, T13, T14, T15, T16, T18 -} trans_t; - -/* - | now supports IPV6 - | thanks to: - | Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan - | ume@mahoroba.org ume@{,jp.}FreeBSD.org - | http://www.imasy.org/~ume/ - */ -static trans_t -tcpConnect(isess_t *sess) -{ - isc_opt_t *op = sess->op; - int val, sv_errno, soc; - struct addrinfo *res, *res0, hints; - char pbuf[10]; - - debug_called(3); - if(sess->flags & (SESS_RECONNECT|SESS_REDIRECT)) { - syslog(LOG_INFO, "%s", (sess->flags & SESS_RECONNECT) - ? "Reconnect": "Redirected"); - - debug(1, "%s", (sess->flags & SESS_RECONNECT) ? "Reconnect": "Redirected"); - shutdown(sess->soc, SHUT_RDWR); - //close(sess->soc); - sess->soc = -1; - - sess->flags &= ~SESS_CONNECTED; - if(sess->flags & SESS_REDIRECT) { - sess->redirect_cnt++; - sess->flags |= SESS_RECONNECT; - } else - sleep(2); // XXX: actually should be ? -#ifdef notyet - { - time_t sec; - // make sure we are not in a loop - // XXX: this code has to be tested - sec = time(0) - sess->reconnect_time; - if(sec > (5*60)) { - // if we've been connected for more that 5 minutes - // then just reconnect - sess->reconnect_time = sec; - sess->reconnect_cnt1 = 0; - } - else { - // - sess->reconnect_cnt1++; - if((sec / sess->reconnect_cnt1) < 2) { - // if less that 2 seconds from the last reconnect - // we are most probably looping - syslog(LOG_CRIT, "too many reconnects %d", sess->reconnect_cnt1); - return 0; - } - } - } -#endif - sess->reconnect_cnt++; - } - - snprintf(pbuf, sizeof(pbuf), "%d", op->port); - memset(&hints, 0, sizeof(hints)); - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - debug(1, "targetAddress=%s port=%d", op->targetAddress, op->port); - if((val = getaddrinfo(op->targetAddress, pbuf, &hints, &res0)) != 0) { - fprintf(stderr, "getaddrinfo(%s): %s\n", op->targetAddress, gai_strerror(val)); - return 0; - } - sess->flags &= ~SESS_CONNECTED; - sv_errno = 0; - soc = -1; - for(res = res0; res; res = res->ai_next) { - soc = socket(res->ai_family, res->ai_socktype, res->ai_protocol); - if (soc == -1) - continue; - - // from Patrick.Guelat@imp.ch: - // iscontrol can be called without waiting for the socket entry to time out - val = 1; - if(setsockopt(soc, SOL_SOCKET, SO_REUSEADDR, &val, (socklen_t)sizeof(val)) < 0) { - fprintf(stderr, "Cannot set socket SO_REUSEADDR %d: %s\n\n", - errno, strerror(errno)); - } - - if(connect(soc, res->ai_addr, res->ai_addrlen) == 0) - break; - sv_errno = errno; - close(soc); - soc = -1; - } - freeaddrinfo(res0); - if(soc != -1) { - sess->soc = soc; - -#if 0 - struct timeval timeout; - - val = 1; - if(setsockopt(sess->soc, IPPROTO_TCP, TCP_KEEPALIVE, &val, sizeof(val)) < 0) - fprintf(stderr, "Cannot set socket KEEPALIVE option err=%d %s\n", - errno, strerror(errno)); - - if(setsockopt(sess->soc, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)) < 0) - fprintf(stderr, "Cannot set socket NO delay option err=%d %s\n", - errno, strerror(errno)); - - timeout.tv_sec = 10; - timeout.tv_usec = 0; - if((setsockopt(sess->soc, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)) < 0) - || (setsockopt(sess->soc, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0)) { - fprintf(stderr, "Cannot set socket timeout to %ld err=%d %s\n", - timeout.tv_sec, errno, strerror(errno)); - } -#endif -#ifdef CURIOUS - { - int len = sizeof(val); - if(getsockopt(sess->soc, SOL_SOCKET, SO_SNDBUF, &val, &len) == 0) - fprintf(stderr, "was: SO_SNDBUF=%dK\n", val/1024); - } -#endif - if(sess->op->sockbufsize) { - val = sess->op->sockbufsize * 1024; - if((setsockopt(sess->soc, SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)) < 0) - || (setsockopt(sess->soc, SOL_SOCKET, SO_RCVBUF, &val, sizeof(val)) < 0)) { - fprintf(stderr, "Cannot set socket sndbuf & rcvbuf to %d err=%d %s\n", - val, errno, strerror(errno)); - return 0; - } - } - sess->flags |= SESS_CONNECTED; - return T1; - } - - fprintf(stderr, "errno=%d\n", sv_errno); - perror("connect"); - switch(sv_errno) { - case ECONNREFUSED: - case EHOSTUNREACH: - case ENETUNREACH: - case ETIMEDOUT: - if((sess->flags & SESS_REDIRECT) == 0) { - if(strcmp(op->targetAddress, sess->target.address) != 0) { - syslog(LOG_INFO, "reconnecting to original target address"); - free(op->targetAddress); - op->targetAddress = sess->target.address; - op->port = sess->target.port; - op->targetPortalGroupTag = sess->target.pgt; - return T1; - } - } - sleep(5); // for now ... - return T1; - default: - return 0; // terminal error - } -} - -int -setOptions(isess_t *sess, int flag) -{ - isc_opt_t oop; - char *sep; - - debug_called(3); - - bzero(&oop, sizeof(isc_opt_t)); - - if((flag & SESS_FULLFEATURE) == 0) { - oop.initiatorName = sess->op->initiatorName; - oop.targetAddress = sess->op->targetAddress; - if(sess->op->targetName != 0) - oop.targetName = sess->op->targetName; - - oop.maxRecvDataSegmentLength = sess->op->maxRecvDataSegmentLength; - oop.maxXmitDataSegmentLength = sess->op->maxXmitDataSegmentLength; // XXX: - oop.maxBurstLength = sess->op->maxBurstLength; - oop.maxluns = sess->op->maxluns; - } - else { - /* - | turn on digestion only after login - */ - if(sess->op->headerDigest != NULL) { - sep = strchr(sess->op->headerDigest, ','); - if(sep == NULL) *** 6836 LINES SKIPPED ***