diff --git a/.gitignore b/.gitignore index 3a636d8..2786bf0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/open-iscsi-d791ce0.tar.gz +SOURCES/open-iscsi-a8fcb37.tar.gz diff --git a/.iscsi-initiator-utils.metadata b/.iscsi-initiator-utils.metadata index 4309b0f..75f5be0 100644 --- a/.iscsi-initiator-utils.metadata +++ b/.iscsi-initiator-utils.metadata @@ -1 +1 @@ -8724d0141bb4777e5728c3c16b2f89f123e0f8b0 SOURCES/open-iscsi-d791ce0.tar.gz +3d93416258a292dbb4ce43a8ef2be2d94bbb85f2 SOURCES/open-iscsi-a8fcb37.tar.gz diff --git a/SOURCES/0001-Fix-bug-with-libopeniscsiusr.pc.patch b/SOURCES/0001-Fix-bug-with-libopeniscsiusr.pc.patch deleted file mode 100644 index d2c3ea1..0000000 --- a/SOURCES/0001-Fix-bug-with-libopeniscsiusr.pc.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0c3953aebf69e23d7012a813ca2b35c5709acb02 Mon Sep 17 00:00:00 2001 -From: Patrick McCarty -Date: Wed, 8 Jan 2020 11:04:17 -0800 -Subject: [PATCH] Fix bug with libopeniscsiusr.pc - -The library name is libopeniscsiusr, so the -l linker option should be -`-lopeniscsiusr` instead of `-liscsiusr`. ---- - libopeniscsiusr/libopeniscsiusr.pc.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libopeniscsiusr/libopeniscsiusr.pc.in b/libopeniscsiusr/libopeniscsiusr.pc.in -index f0fb583..6bbee47 100644 ---- a/libopeniscsiusr/libopeniscsiusr.pc.in -+++ b/libopeniscsiusr/libopeniscsiusr.pc.in -@@ -5,5 +5,5 @@ Name: libopeniscsiusr - Version: __VERSION__ - Description: iSCSI userspace library - Requires: --Libs: -L${libdir} -liscsiusr -+Libs: -L${libdir} -lopeniscsiusr - Cflags: -I${includedir} --- -2.21.1 - diff --git a/SOURCES/0001-Revert-Out-of-bounds-read-Overrunning-array-of-8-2-b.patch b/SOURCES/0001-Revert-Out-of-bounds-read-Overrunning-array-of-8-2-b.patch deleted file mode 100644 index 1292efa..0000000 --- a/SOURCES/0001-Revert-Out-of-bounds-read-Overrunning-array-of-8-2-b.patch +++ /dev/null @@ -1,29 +0,0 @@ -From e9c9117b7a84866366691110496984fc651e3e43 Mon Sep 17 00:00:00 2001 -From: Chris Leech -Date: Fri, 17 Jan 2020 13:42:10 -0800 -Subject: [PATCH 1/1] Revert "Out-of-bounds read: Overrunning array of 8 2-byte - elements" - -It's been reported that this breaks IPv6 discovery with qedi controllers - -This reverts commit af48f0d68db48cd492d0e27e046fc011be236fd3. ---- - iscsiuio/src/uip/ipv6.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/iscsiuio/src/uip/ipv6.c b/iscsiuio/src/uip/ipv6.c -index 5710199..05efa73 100644 ---- a/iscsiuio/src/uip/ipv6.c -+++ b/iscsiuio/src/uip/ipv6.c -@@ -521,7 +521,7 @@ static void ipv6_insert_protocol_chksum(struct ipv6_hdr *ipv6) - sum = 0; - ptr = (u16_t *)&ipv6->ipv6_src; - -- for (i = 0; i < sizeof(struct ipv6_addr); i += 2) { -+ for (i = 0; i < sizeof(struct ipv6_addr); i++) { - sum += HOST_TO_NET16(*ptr); - ptr++; - } --- -2.21.1 - diff --git a/SOURCES/0001-configuration-support-for-CHAP-algorithms.patch b/SOURCES/0001-configuration-support-for-CHAP-algorithms.patch deleted file mode 100644 index 1e3dfeb..0000000 --- a/SOURCES/0001-configuration-support-for-CHAP-algorithms.patch +++ /dev/null @@ -1,661 +0,0 @@ -From 9d36121534183195bd2892447ca07724013cef57 Mon Sep 17 00:00:00 2001 -From: Chris Leech -Date: Sun, 24 Nov 2019 13:51:09 -0800 -Subject: [PATCH 1/1] configuration support for CHAP algorithms - -Introduces support for preference lists in configuration files, and uses -that for the 'node.session.auth.chap_algs' setting. - -This is also re-used for discovery authentication, rather than have two -different configurations. ---- - etc/iscsid.conf | 7 ++ - libopeniscsiusr/default.c | 3 + - libopeniscsiusr/idbm.c | 95 +++++++++++++++++++++++++ - libopeniscsiusr/idbm.h | 9 +++ - libopeniscsiusr/idbm_fields.h | 1 + - usr/auth.c | 64 ++++++++++++----- - usr/auth.h | 3 + - usr/config.h | 1 + - usr/idbm.c | 126 ++++++++++++++++++++++++++++++---- - usr/idbm.h | 2 + - usr/idbm_fields.h | 1 + - usr/initiator.h | 1 + - usr/initiator_common.c | 2 + - usr/login.c | 11 +++ - 14 files changed, 294 insertions(+), 32 deletions(-) - -diff --git a/etc/iscsid.conf b/etc/iscsid.conf -index 2f3a28c..420145b 100644 ---- a/etc/iscsid.conf -+++ b/etc/iscsid.conf -@@ -57,6 +57,13 @@ node.leading_login = No - # to CHAP. The default is None. - #node.session.auth.authmethod = CHAP - -+# To configure which CHAP algorithms to enable set -+# node.session.auth.chap_algs to a comma seperated list. -+# The algorithms should be listen with most prefered first. -+# Valid values are MD5, SHA1, SHA256, and SHA3-256. -+# The default is MD5. -+#node.session.auth.chap_algs = SHA3-256,SHA256,SHA1,MD5 -+ - # To set a CHAP username and password for initiator - # authentication by the target(s), uncomment the following lines: - #node.session.auth.username = username -diff --git a/libopeniscsiusr/default.c b/libopeniscsiusr/default.c -index d01d892..d3b3da3 100644 ---- a/libopeniscsiusr/default.c -+++ b/libopeniscsiusr/default.c -@@ -78,6 +78,9 @@ void _default_node(struct iscsi_node *node) - node->session.initial_login_retry_max = DEF_INITIAL_LOGIN_RETRIES_MAX; - node->session.reopen_max = DEF_SESSION_REOPEN_MAX; - node->session.auth.authmethod = 0; -+ /* TYPE_INT_LIST fields should be initialized to ~0 to indicate unset values */ -+ memset(node->session.auth.chap_algs, ~0, sizeof(node->session.auth.chap_algs)); -+ node->session.auth.chap_algs[0] = ISCSI_AUTH_CHAP_ALG_MD5; - node->session.auth.password_length = 0; - node->session.auth.password_in_length = 0; - node->session.err_tmo.abort_timeout = DEF_ABORT_TIMEO; -diff --git a/libopeniscsiusr/idbm.c b/libopeniscsiusr/idbm.c -index 342aab5..d1fc03d 100644 ---- a/libopeniscsiusr/idbm.c -+++ b/libopeniscsiusr/idbm.c -@@ -73,6 +73,7 @@ - #define TYPE_INT32 6 - #define TYPE_INT64 7 - #define TYPE_BOOL 8 -+#define TYPE_INT_LIST 9 - #define MAX_KEYS 256 /* number of keys total(including CNX_MAX) */ - #define NAME_MAXVAL 128 /* the maximum length of key name */ - #define VALUE_MAXVAL 256 /* the maximum length of 223 bytes in the RFC. */ -@@ -248,6 +249,39 @@ do { \ - _n++; \ - } while(0) - -+#define ARRAY_LEN(x) ( sizeof(x) / sizeof((x)[0]) ) -+ -+/* Options list type, rather than matching a single value this populates an -+ * array with a list of values in user specified order. -+ * Requires a table matching config strings to values. -+ **/ -+#define _rec_int_list(_key, _recs, _org, _name, _show, _tbl, _n, _mod) \ -+do {\ -+ _recs[_n].type = TYPE_INT_LIST; \ -+ _strncpy(_recs[_n].name, _key, NAME_MAXVAL); \ -+ for (unsigned int _i = 0; _i < ARRAY_LEN(_org->_name); _i++) { \ -+ if (_org->_name[_i] != ~0UL) { \ -+ for (unsigned int _j = 0; _j < ARRAY_LEN(_tbl); _j++) { \ -+ if (_tbl[_j].value == _org->_name[_i]) { \ -+ strcat(_recs[_n].value, _tbl[_j].name); \ -+ strcat(_recs[_n].value, ","); \ -+ break; \ -+ } \ -+ } \ -+ } \ -+ } \ -+ /* delete traling ',' */ \ -+ if (strrchr(_recs[_n].value, ',')) \ -+ *strrchr(_recs[_n].value, ',') = '\0'; \ -+ _recs[_n].data = &_org->_name; \ -+ _recs[_n].data_len = sizeof(_org->_name); \ -+ _recs[_n].visible = _show; \ -+ _recs[_n].opts[0] = (void *)&_tbl; \ -+ _recs[_n].numopts = ARRAY_LEN(_tbl); \ -+ _recs[_n].can_modify = _mod; \ -+ _n++; \ -+} while(0) -+ - enum modify_mode { - _CANNOT_MODIFY, - _CAN_MODIFY, -@@ -557,6 +591,11 @@ void _idbm_node_print(struct iscsi_node *node, FILE *f, bool show_secret) - _idbm_recs_free(recs); - } - -+struct int_list_tbl { -+ const char *name; -+ unsigned int value; -+}; -+ - static int _idbm_rec_update_param(struct iscsi_context *ctx, - struct idbm_rec *recs, char *name, - char *value, int line_number) -@@ -564,8 +603,14 @@ static int _idbm_rec_update_param(struct iscsi_context *ctx, - int rc = LIBISCSI_OK; - int i = 0; - int j = 0; -+ int k = 0; - int passwd_done = 0; - char passwd_len[8]; -+ struct int_list_tbl *tbl = NULL; -+ char *tmp_value; -+ int *tmp_data; -+ bool *found; -+ char *token; - - assert(ctx != NULL); - assert(recs != NULL); -@@ -642,6 +687,47 @@ setup_passwd_len: - else - goto unknown_value; - goto updated; -+ case TYPE_INT_LIST: -+ if (!recs[i].data) -+ continue; -+ tbl = (void *)recs[i].opts[0]; -+ /* strsep is destructive, make a copy to work with */ -+ tmp_value = strdup(value); -+ k = 0; -+ tmp_data = malloc(recs[i].data_len); -+ memset(tmp_data, ~0, recs[i].data_len); -+ found = calloc(recs[i].numopts, sizeof(bool)); -+next_token: while ((token = strsep(&tmp_value, ", \n"))) { -+ if (!strlen(token)) -+ continue; -+ if ((k * (int)sizeof(int)) >= (recs[i].data_len)) { -+ _warn(ctx, "Too many values set for '%s'" -+ ", continuing without processing them all", -+ recs[i].name); -+ break; -+ } -+ for (j = 0; j < recs[i].numopts; j++) { -+ if (!strcmp(token, tbl[j].name)) { -+ if ((found[j])) { -+ _warn(ctx, "Ignoring repeated value '%s'" -+ " for '%s'", token, recs[i].name); -+ goto next_token; -+ } -+ ((unsigned *)tmp_data)[k++] = tbl[j].value; -+ found[j] = true; -+ goto next_token; -+ } -+ } -+ _warn(ctx, "Ignoring unknown value '%s'" -+ " for '%s'", token, recs[i].name); -+ } -+ memcpy(recs[i].data, tmp_data, recs[i].data_len); -+ free(tmp_value); -+ free(tmp_data); -+ tmp_value = NULL; -+ tmp_data = NULL; -+ token = NULL; -+ goto updated; - default: - unknown_value: - _error(ctx, "Got unknown data type %d " -@@ -881,6 +967,13 @@ void _idbm_free(struct idbm *db) - free(db); - } - -+static struct int_list_tbl chap_algs[] = { -+ { "MD5", ISCSI_AUTH_CHAP_ALG_MD5 }, -+ { "SHA1", ISCSI_AUTH_CHAP_ALG_SHA1 }, -+ { "SHA256", ISCSI_AUTH_CHAP_ALG_SHA256 }, -+ { "SHA3-256", ISCSI_AUTH_CHAP_ALG_SHA3_256 }, -+}; -+ - static void _idbm_node_rec_link(struct iscsi_node *node, struct idbm_rec *recs) - { - int num = 0; -@@ -943,6 +1036,8 @@ static void _idbm_node_rec_link(struct iscsi_node *node, struct idbm_rec *recs) - _rec_uint32(SESSION_PASSWORD_IN_LEN, recs, node, - session.auth.password_in_length, IDBM_HIDE, num, - _CAN_MODIFY); -+ _rec_int_list(SESSION_CHAP_ALGS, recs, node, session.auth.chap_algs, -+ IDBM_SHOW, chap_algs, num, _CAN_MODIFY); - _rec_int64(SESSION_REPLACEMENT_TMO, recs, node, - session.tmo.replacement_timeout, IDBM_SHOW, num, - _CAN_MODIFY); -diff --git a/libopeniscsiusr/idbm.h b/libopeniscsiusr/idbm.h -index c84d332..5a4d2fa 100644 ---- a/libopeniscsiusr/idbm.h -+++ b/libopeniscsiusr/idbm.h -@@ -49,6 +49,14 @@ enum iscsi_auth_method { - ISCSI_AUTH_METHOD_CHAP, - }; - -+enum iscsi_chap_algs { -+ ISCSI_AUTH_CHAP_ALG_MD5 = 5, -+ ISCSI_AUTH_CHAP_ALG_SHA1 = 6, -+ ISCSI_AUTH_CHAP_ALG_SHA256 = 7, -+ ISCSI_AUTH_CHAP_ALG_SHA3_256 = 8, -+ AUTH_CHAP_ALG_MAX_COUNT = 5, -+}; -+ - enum iscsi_startup_type { - ISCSI_STARTUP_MANUAL, - ISCSI_STARTUP_AUTOMATIC, -@@ -93,6 +101,7 @@ struct iscsi_auth_config { - char username_in[AUTH_STR_MAX_LEN]; - unsigned char password_in[AUTH_STR_MAX_LEN]; - uint32_t password_in_length; -+ unsigned int chap_algs[AUTH_CHAP_ALG_MAX_COUNT]; - }; - - /* all TCP options go in this structure. -diff --git a/libopeniscsiusr/idbm_fields.h b/libopeniscsiusr/idbm_fields.h -index 29a2090..8bf17b0 100644 ---- a/libopeniscsiusr/idbm_fields.h -+++ b/libopeniscsiusr/idbm_fields.h -@@ -120,6 +120,7 @@ - #define SESSION_USERNAME_IN "node.session.auth.username_in" - #define SESSION_PASSWORD_IN "node.session.auth.password_in" - #define SESSION_PASSWORD_IN_LEN "node.session.auth.password_in_length" -+#define SESSION_CHAP_ALGS "node.session.auth.chap_algs" - #define SESSION_REPLACEMENT_TMO "node.session.timeo.replacement_timeout" - #define SESSION_ABORT_TMO "node.session.err_timeo.abort_timeout" - #define SESSION_LU_RESET_TMO "node.session.err_timeo.lu_reset_timeout" -diff --git a/usr/auth.c b/usr/auth.c -index 5c819c2..a222c53 100644 ---- a/usr/auth.c -+++ b/usr/auth.c -@@ -1806,7 +1806,7 @@ acl_chk_chap_alg_list(unsigned int option_count, const int *option_list) - return 0; - } - --static int -+int - acl_set_chap_alg_list(struct iscsi_acl *client, unsigned int option_count, - const int *option_list) - { -@@ -1819,22 +1819,54 @@ acl_set_chap_alg_list(struct iscsi_acl *client, unsigned int option_count, - } - - int --acl_init_chap_digests(int *value_list) { -+acl_init_chap_digests(int *value_list, unsigned *chap_algs, int conf_count) { - EVP_MD_CTX *context = EVP_MD_CTX_new(); - int i = 0; - -- if (EVP_DigestInit_ex(context, EVP_sha3_256(), NULL)) { -- value_list[i++] = AUTH_CHAP_ALG_SHA3_256; -- } -- if (EVP_DigestInit_ex(context, EVP_sha256(), NULL)) { -- value_list[i++] = AUTH_CHAP_ALG_SHA256; -- } -- if (EVP_DigestInit_ex(context, EVP_sha1(), NULL)) { -- value_list[i++] = AUTH_CHAP_ALG_SHA1; -- } -- if (EVP_DigestInit_ex(context, EVP_md5(), NULL)) { -- value_list[i++] = AUTH_CHAP_ALG_MD5; -+ for (int j = 0; j < conf_count; j++) { -+ switch (chap_algs[j]) { -+ case AUTH_CHAP_ALG_MD5: -+ if (EVP_DigestInit_ex(context, EVP_md5(), NULL)) { -+ value_list[i++] = AUTH_CHAP_ALG_MD5; -+ } else { -+ log_warning("Ignoring CHAP algorthm request for " -+ "MD5 due to crypto lib configuration"); -+ } -+ break; -+ case AUTH_CHAP_ALG_SHA1: -+ if (EVP_DigestInit_ex(context, EVP_sha1(), NULL)) { -+ value_list[i++] = AUTH_CHAP_ALG_SHA1; -+ } else { -+ log_warning("Ignoring CHAP algorthm request for " -+ "SHA1 due to crypto lib configuration"); -+ } -+ break; -+ case AUTH_CHAP_ALG_SHA256: -+ if (EVP_DigestInit_ex(context, EVP_sha256(), NULL)) { -+ value_list[i++] = AUTH_CHAP_ALG_SHA256; -+ } else { -+ log_warning("Ignoring CHAP algorthm request for " -+ "SHA256 due to crypto lib configuration"); -+ } -+ break; -+ case AUTH_CHAP_ALG_SHA3_256: -+ if (EVP_DigestInit_ex(context, EVP_sha3_256(), NULL)) { -+ value_list[i++] = AUTH_CHAP_ALG_SHA3_256; -+ } else { -+ log_warning("Ignoring CHAP algorthm request for " -+ "SHA3-256 due to crypto lib configuration"); -+ } -+ break; -+ case ~0: -+ /* unset value in array, just ignore */ -+ break; -+ default: -+ log_warning("Ignoring unknown CHAP algorithm request " -+ "'%d'", chap_algs[j]); -+ break; -+ } - } -+ - return i; - } - -@@ -1926,12 +1958,6 @@ acl_init(int node_type, int buf_desc_count, struct auth_buffer_desc *buff_desc) - return AUTH_STATUS_ERROR; - } - -- if (acl_set_chap_alg_list(client, acl_init_chap_digests(value_list), -- value_list) != AUTH_STATUS_NO_ERROR) { -- client->phase = AUTH_PHASE_ERROR; -- return AUTH_STATUS_ERROR; -- } -- - return AUTH_STATUS_NO_ERROR; - } - -diff --git a/usr/auth.h b/usr/auth.h -index f6dbbe4..16cdb24 100644 ---- a/usr/auth.h -+++ b/usr/auth.h -@@ -271,6 +271,9 @@ extern int acl_send_transit_bit(struct iscsi_acl *client, int *value); - extern int acl_set_user_name(struct iscsi_acl *client, const char *username); - extern int acl_set_passwd(struct iscsi_acl *client, - const unsigned char *pw_data, unsigned int pw_len); -+extern int acl_set_chap_alg_list(struct iscsi_acl *client, unsigned int option_count, -+ const int *option_list); -+extern int acl_init_chap_digests(int *value_list, unsigned int *chap_algs, int count); - extern int acl_set_auth_rmt(struct iscsi_acl *client, int auth_rmt); - extern int acl_set_ip_sec(struct iscsi_acl *client, int ip_sec); - extern int acl_get_dbg_status(struct iscsi_acl *client, int *value); -diff --git a/usr/config.h b/usr/config.h -index 250879d..79059ec 100644 ---- a/usr/config.h -+++ b/usr/config.h -@@ -58,6 +58,7 @@ struct iscsi_auth_config { - char username_in[AUTH_STR_MAX_LEN]; - unsigned char password_in[AUTH_STR_MAX_LEN]; - unsigned int password_in_length; -+ unsigned int chap_algs[AUTH_CHAP_ALG_MAX_COUNT]; - }; - - /* all per-connection timeouts go in this structure. -diff --git a/usr/idbm.c b/usr/idbm.c -index 0c6870c..749203a 100644 ---- a/usr/idbm.c -+++ b/usr/idbm.c -@@ -51,6 +51,8 @@ - - static struct idbm *db; - -+#define ARRAY_LEN(x) ( sizeof(x) / sizeof((x)[0]) ) -+ - #define __recinfo_str(_key, _info, _rec, _name, _show, _n, _mod) do { \ - _info[_n].type = TYPE_STR; \ - strlcpy(_info[_n].name, _key, NAME_MAXVAL); \ -@@ -165,6 +167,42 @@ static struct idbm *db; - _n++; \ - } while(0) - -+#define __recinfo_int_list(_key,_info,_rec,_name,_show,_tbl,_n,_mod) do { \ -+ _info[_n].type = TYPE_INT_LIST; \ -+ strlcpy(_info[_n].name, _key, NAME_MAXVAL); \ -+ for(int _i = 0; _i < ARRAY_LEN(_rec->_name); _i++) { \ -+ if (_rec->_name[_i] != ~0) { \ -+ for (int _j = 0; _j < ARRAY_LEN(_tbl); _j++) { \ -+ if (_tbl[_j].value == _rec->_name[_i]) { \ -+ strcat(_info[_n].value, _tbl[_j].name); \ -+ strcat(_info[_n].value, ","); \ -+ break; \ -+ } \ -+ } \ -+ } \ -+ } \ -+ /* delete trailing ',' */ \ -+ if (strrchr(_info[_n].value, ',')) \ -+ *strrchr(_info[_n].value, ',') = '\0'; \ -+ _info[_n].data = &_rec->_name; \ -+ _info[_n].data_len = sizeof(_rec->_name); \ -+ _info[_n].visible = _show; \ -+ _info[_n].opts[0] = (void *)&_tbl; \ -+ _info[_n].numopts = ARRAY_LEN(_tbl); \ -+ _info[_n].can_modify = _mod; \ -+ _n++; \ -+} while (0) -+ -+static struct int_list_tbl { -+ const char *name; -+ int value; -+} chap_algs [] = { -+ { "MD5", AUTH_CHAP_ALG_MD5 }, -+ { "SHA1", AUTH_CHAP_ALG_SHA1 }, -+ { "SHA256", AUTH_CHAP_ALG_SHA256 }, -+ { "SHA3-256", AUTH_CHAP_ALG_SHA3_256 }, -+}; -+ - static int idbm_remove_disc_to_node_link(node_rec_t *rec, char *portal); - - static void -@@ -199,6 +237,10 @@ idbm_recinfo_discovery(discovery_rec_t *r, recinfo_t *ri) - __recinfo_int(DISC_ST_PASSWORD_IN_LEN, ri, r, - u.sendtargets.auth.password_in_length, IDBM_HIDE, - num, 1); -+ /* reusing SESSION_CHAP_ALGS */ -+ __recinfo_int_list(SESSION_CHAP_ALGS, ri, r, -+ u.sendtargets.auth.chap_algs, -+ IDBM_SHOW, chap_algs, num, 1); - __recinfo_int(DISC_ST_LOGIN_TMO, ri, r, - u.sendtargets.conn_timeo.login_timeout, - IDBM_SHOW, num, 1); -@@ -431,6 +473,8 @@ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri) - session.auth.password_in, IDBM_MASKED, num, 1); - __recinfo_int(SESSION_PASSWORD_IN_LEN, ri, r, - session.auth.password_in_length, IDBM_HIDE, num, 1); -+ __recinfo_int_list(SESSION_CHAP_ALGS, ri, r, -+ session.auth.chap_algs, IDBM_SHOW, chap_algs, num, 1); - __recinfo_int(SESSION_REPLACEMENT_TMO, ri, r, - session.timeo.replacement_timeout, - IDBM_SHOW, num, 1); -@@ -940,6 +984,9 @@ idbm_discovery_setup_defaults(discovery_rec_t *rec, discovery_type_e type) - rec->u.sendtargets.auth.authmethod = 0; - rec->u.sendtargets.auth.password_length = 0; - rec->u.sendtargets.auth.password_in_length = 0; -+ /* TYPE_INT_LIST fields should be initialized to ~0 to indicate unset values */ -+ memset(rec->u.sendtargets.auth.chap_algs, ~0, sizeof(rec->u.sendtargets.auth.chap_algs)); -+ rec->u.sendtargets.auth.chap_algs[0] = AUTH_CHAP_ALG_MD5; - rec->u.sendtargets.conn_timeo.login_timeout=15; - rec->u.sendtargets.conn_timeo.auth_timeout = 45; - rec->u.sendtargets.conn_timeo.active_timeout=30; -@@ -973,59 +1020,109 @@ int idbm_rec_update_param(recinfo_t *info, char *name, char *value, - int i; - int passwd_done = 0; - char passwd_len[8]; -+ char *tmp_value, *token; -+ bool *found; -+ int *tmp_data; - - setup_passwd_len: - for (i=0; i '%s'", name, - info[i].value, value); - /* parse recinfo by type */ -- if (info[i].type == TYPE_INT) { -+ switch (info[i].type) { -+ case TYPE_INT: - if (!info[i].data) - continue; - - *(int*)info[i].data = - strtoul(value, NULL, 10); - goto updated; -- } else if (info[i].type == TYPE_UINT8) { -+ case TYPE_UINT8: - if (!info[i].data) - continue; - - *(uint8_t *)info[i].data = - strtoul(value, NULL, 10); - goto updated; -- } else if (info[i].type == TYPE_UINT16) { -+ case TYPE_UINT16: - if (!info[i].data) - continue; - - *(uint16_t *)info[i].data = - strtoul(value, NULL, 10); - goto updated; -- } else if (info[i].type == TYPE_UINT32) { -+ case TYPE_UINT32: - if (!info[i].data) - continue; - - *(uint32_t *)info[i].data = - strtoul(value, NULL, 10); - goto updated; -- } else if (info[i].type == TYPE_STR) { -+ case TYPE_STR: - if (!info[i].data) - continue; - - strlcpy((char*)info[i].data, - value, info[i].data_len); - goto updated; -- } -- for (j=0; j= (info[i].data_len)) { -+ log_warning("Too many values set for '%s'" -+ ", continuing without processing them all", -+ info[i].name); -+ break; -+ } -+ for (j = 0; j < info[i].numopts; j++) { -+ if (!strcmp(token, tbl[j].name)) { -+ if ((found[j])) { -+ log_warning("Ignoring repeated " -+ "value '%s' " -+ "for '%s'", token, -+ info[i].name); -+ goto next_token; -+ } -+ ((int*)tmp_data)[k++] = tbl[j].value; -+ found[j] = true; -+ goto next_token; -+ } -+ } -+ log_warning("Ignoring unknown value '%s'" -+ " for '%s'", token, info[i].name); - } -+ memcpy(info[i].data, tmp_data, info[i].data_len); -+ free(tmp_value); -+ free(tmp_data); -+ tmp_value = NULL; -+ tmp_data = NULL; -+ token = NULL; -+ goto updated; - } - if (line_number) { - log_warning("config file line %d contains " -@@ -3098,6 +3195,9 @@ void idbm_node_setup_defaults(node_rec_t *rec) - rec->session.initial_login_retry_max = DEF_INITIAL_LOGIN_RETRIES_MAX; - rec->session.reopen_max = DEF_SESSION_REOPEN_MAX; - rec->session.auth.authmethod = 0; -+ /* TYPE_INT_LIST fields should be initialized to ~0 to indicate unset values */ -+ memset(rec->session.auth.chap_algs, ~0, sizeof(rec->session.auth.chap_algs)); -+ rec->session.auth.chap_algs[0] = AUTH_CHAP_ALG_MD5; - rec->session.auth.password_length = 0; - rec->session.auth.password_in_length = 0; - rec->session.err_timeo.abort_timeout = DEF_ABORT_TIMEO; -diff --git a/usr/idbm.h b/usr/idbm.h -index c6982e4..d1a7f63 100644 ---- a/usr/idbm.h -+++ b/usr/idbm.h -@@ -46,6 +46,8 @@ - #define TYPE_UINT8 3 - #define TYPE_UINT16 4 - #define TYPE_UINT32 5 -+#define TYPE_INT_LIST 6 -+ - #define MAX_KEYS 256 /* number of keys total(including CNX_MAX) */ - #define NAME_MAXVAL 128 /* the maximum length of key name */ - #define VALUE_MAXVAL 256 /* the maximum length of 223 bytes in the RFC. */ -diff --git a/usr/idbm_fields.h b/usr/idbm_fields.h -index 142c7ae..4a967fc 100644 ---- a/usr/idbm_fields.h -+++ b/usr/idbm_fields.h -@@ -30,6 +30,7 @@ - #define SESSION_USERNAME_IN "node.session.auth.username_in" - #define SESSION_PASSWORD_IN "node.session.auth.password_in" - #define SESSION_PASSWORD_IN_LEN "node.session.auth.password_in_length" -+#define SESSION_CHAP_ALGS "node.session.auth.chap_algs" - #define SESSION_REPLACEMENT_TMO "node.session.timeo.replacement_timeout" - #define SESSION_ABORT_TMO "node.session.err_timeo.abort_timeout" - #define SESSION_LU_RESET_TMO "node.session.err_timeo.lu_reset_timeout" -diff --git a/usr/initiator.h b/usr/initiator.h -index eccafb9..6a49ea6 100644 ---- a/usr/initiator.h -+++ b/usr/initiator.h -@@ -243,6 +243,7 @@ typedef struct iscsi_session { - char username_in[AUTH_STR_MAX_LEN]; - uint8_t password_in[AUTH_STR_MAX_LEN]; - int password_in_length; -+ unsigned int chap_algs[AUTH_CHAP_ALG_MAX_COUNT]; - iscsi_conn_t conn[ISCSI_CONN_MAX]; - uint64_t param_mask; - -diff --git a/usr/initiator_common.c b/usr/initiator_common.c -index 790f13d..81da8fd 100644 ---- a/usr/initiator_common.c -+++ b/usr/initiator_common.c -@@ -94,6 +94,8 @@ int iscsi_setup_authentication(struct iscsi_session *session, - memcpy(session->password_in, auth_cfg->password_in, - session->password_in_length); - -+ memcpy(session->chap_algs, auth_cfg->chap_algs, sizeof(auth_cfg->chap_algs)); -+ - if (session->password_length || session->password_in_length) { - /* setup the auth buffers */ - session->auth_buffers[0].address = &session->auth_client_block; -diff --git a/usr/login.c b/usr/login.c -index d7dad21..1251e61 100644 ---- a/usr/login.c -+++ b/usr/login.c -@@ -1262,6 +1262,17 @@ check_for_authentication(iscsi_session_t *session, - goto end; - } - -+ int value_list[AUTH_CHAP_ALG_MAX_COUNT]; -+ -+ if (acl_set_chap_alg_list(auth_client, -+ acl_init_chap_digests(value_list, -+ session->chap_algs, -+ AUTH_CHAP_ALG_MAX_COUNT), -+ value_list) != AUTH_STATUS_NO_ERROR) { -+ log_error("Couldn't set CHAP algorithm list"); -+ goto end; -+ } -+ - if (acl_set_ip_sec(auth_client, 1) != AUTH_STATUS_NO_ERROR) { - log_error("Couldn't set IPSec"); - goto end; --- -2.21.1 - diff --git a/SOURCES/0001-service-file-tweaks.patch b/SOURCES/0001-unit-file-tweaks.patch similarity index 56% rename from SOURCES/0001-service-file-tweaks.patch rename to SOURCES/0001-unit-file-tweaks.patch index c83faf3..89378ea 100644 --- a/SOURCES/0001-service-file-tweaks.patch +++ b/SOURCES/0001-unit-file-tweaks.patch @@ -1,24 +1,26 @@ -From 2d84ee02e9ac69928261b38b5876bebb2349bd65 Mon Sep 17 00:00:00 2001 +From 0a6af5e7283ed2733753998043adac090ef12dd0 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Tue, 4 Jun 2019 13:23:32 -0700 -Subject: [PATCH] service file tweaks +Subject: [PATCH] unit file tweaks --- - etc/systemd/iscsi-mark-root-nodes | 30 ++++++++++++++++++++++++++++++ - etc/systemd/iscsi-shutdown.service | 14 ++++++++++++++ - etc/systemd/iscsi.service | 23 +++++++++++++---------- - etc/systemd/iscsid.service | 6 ++++-- - etc/systemd/iscsiuio.service | 2 +- - 5 files changed, 62 insertions(+), 13 deletions(-) + etc/systemd/iscsi-mark-root-nodes | 34 ++++++++++++++++++++++++++++++ + etc/systemd/iscsi-onboot.service | 15 +++++++++++++ + etc/systemd/iscsi-shutdown.service | 15 +++++++++++++ + etc/systemd/iscsi.service | 16 +++++++------- + etc/systemd/iscsid.service | 3 +-- + etc/systemd/iscsiuio.service | 4 +--- + 6 files changed, 74 insertions(+), 13 deletions(-) create mode 100755 etc/systemd/iscsi-mark-root-nodes + create mode 100644 etc/systemd/iscsi-onboot.service create mode 100644 etc/systemd/iscsi-shutdown.service diff --git a/etc/systemd/iscsi-mark-root-nodes b/etc/systemd/iscsi-mark-root-nodes new file mode 100755 -index 0000000..c693707 +index 0000000..9d48805 --- /dev/null +++ b/etc/systemd/iscsi-mark-root-nodes -@@ -0,0 +1,30 @@ +@@ -0,0 +1,34 @@ +#!/bin/bash + +ISCSIADM=/usr/sbin/iscsiadm @@ -30,7 +32,11 @@ index 0000000..c693707 + portal=${p%,*} + transport=${t%:} + -+ $ISCSIADM -m node -p $portal -T $target -o update -n node.startup -v onboot ++ # use session number to find the iface name in use ++ num=${num#[}; num=${num%]} ++ iface=$(iscsiadm -m session -r $num | grep iface.iscsi_ifacename | cut -d= -f2) ++ ++ $ISCSIADM -m node -p $portal -T $target -I $iface -o update -n node.startup -v onboot + + start_iscsid=1 + @@ -49,12 +55,33 @@ index 0000000..c693707 + systemctl --no-block start iscsiuio.service +fi + +diff --git a/etc/systemd/iscsi-onboot.service b/etc/systemd/iscsi-onboot.service +new file mode 100644 +index 0000000..42ced68 +--- /dev/null ++++ b/etc/systemd/iscsi-onboot.service +@@ -0,0 +1,15 @@ ++[Unit] ++Description=Special handling of early boot iSCSI sessions ++Documentation=man:iscsiadm(8) man:iscsid(8) ++DefaultDependencies=no ++RefuseManualStart=true ++Before=iscsi.service ++After=systemd-remount-fs.service ++ConditionDirectoryNotEmpty=/sys/class/iscsi_session ++ ++[Service] ++Type=oneshot ++ExecStart=-/usr/libexec/iscsi-mark-root-nodes ++ ++[Install] ++WantedBy=sysinit.target diff --git a/etc/systemd/iscsi-shutdown.service b/etc/systemd/iscsi-shutdown.service new file mode 100644 -index 0000000..69c1c77 +index 0000000..caee933 --- /dev/null +++ b/etc/systemd/iscsi-shutdown.service -@@ -0,0 +1,14 @@ +@@ -0,0 +1,15 @@ +[Unit] +Description=Logout off all iSCSI sessions on shutdown +Documentation=man:iscsid(8) man:iscsiadm(8) @@ -68,71 +95,72 @@ index 0000000..69c1c77 +[Service] +Type=oneshot +RemainAfterExit=true ++ExecStart=-/usr/bin/true +ExecStop=-/usr/sbin/iscsiadm -m node --logoutall=all diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service -index e475888..eadfcec 100644 +index 2f2bf81..175cb2c 100644 --- a/etc/systemd/iscsi.service +++ b/etc/systemd/iscsi.service -@@ -1,18 +1,21 @@ +@@ -1,18 +1,18 @@ [Unit] Description=Login and scanning of iSCSI devices --Documentation=man:iscsiadm(8) man:iscsid(8) + Documentation=man:iscsiadm(8) man:iscsid(8) -Before=remote-fs.target --After=network.target network-online.target iscsid.service --Requires=iscsid.service --ConditionPathExists=/etc/iscsi/initiatorname.iscsi -+Documentation=man:iscsid(8) man:iscsiadm(8) +-After=network.target network-online.target +-After=iscsid.service iscsi-init.service +-Requires=iscsid.socket iscsi-init.service +DefaultDependencies=no -+Conflicts=shutdown.target -+After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service +Before=remote-fs-pre.target ++After=network.target network-online.target iscsid.service iscsiuio.service systemd-remount-fs.service +Wants=remote-fs-pre.target iscsi-shutdown.service -+ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes -+ConditionDirectoryNotEmpty=|/sys/class/iscsi_session ++ConditionDirectoryNotEmpty=/var/lib/iscsi/nodes [Service] Type=oneshot -ExecStart=/sbin/iscsiadm -m node --loginall=automatic -ExecStop=/sbin/iscsiadm -m node --logoutall=automatic -ExecStop=/sbin/iscsiadm -m node --logoutall=manual --SuccessExitStatus=21 +-SuccessExitStatus=21 15 RemainAfterExit=true -+ExecStart=-/usr/libexec/iscsi-mark-root-nodes +ExecStart=-/usr/sbin/iscsiadm -m node --loginall=automatic +ExecReload=-/usr/sbin/iscsiadm -m node --loginall=automatic +SuccessExitStatus=21 [Install] --WantedBy=remote-fs.target -+WantedBy=sysinit.target + WantedBy=remote-fs.target diff --git a/etc/systemd/iscsid.service b/etc/systemd/iscsid.service -index 4fef168..8d50cf0 100644 +index 648ceea..28402fb 100644 --- a/etc/systemd/iscsid.service +++ b/etc/systemd/iscsid.service -@@ -1,14 +1,16 @@ - [Unit] - Description=Open-iSCSI --Documentation=man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8) -+Documentation=man:iscsid(8) man:iscsiadm(8) +@@ -4,12 +4,11 @@ Documentation=man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8) DefaultDependencies=no -+Conflicts=shutdown.target After=network.target iscsiuio.service Before=remote-fs-pre.target +-Wants=remote-fs-pre.target [Service] Type=notify NotifyAccess=main -ExecStart=/sbin/iscsid -f +ExecStart=/usr/sbin/iscsid -f -+ExecStop=/usr/sbin/iscsiadm -k 0 2 KillMode=mixed Restart=on-failure diff --git a/etc/systemd/iscsiuio.service b/etc/systemd/iscsiuio.service -index e4d9fd0..8620cde 100644 +index 923e019..fc0be93 100644 --- a/etc/systemd/iscsiuio.service +++ b/etc/systemd/iscsiuio.service -@@ -11,7 +11,7 @@ Before=remote-fs-pre.target iscsid.service +@@ -2,17 +2,15 @@ + Description=iSCSI UserSpace I/O driver + Documentation=man:iscsiuio(8) + DefaultDependencies=no +-Conflicts=shutdown.target + Requires=iscsid.service + BindTo=iscsid.service + After=network.target + Before=remote-fs-pre.target iscsid.service +-Wants=remote-fs-pre.target + [Service] Type=notify NotifyAccess=main @@ -142,5 +170,5 @@ index e4d9fd0..8620cde 100644 Restart=on-failure -- -2.21.0 +2.26.2 diff --git a/SOURCES/0002-idmb_rec_write-check-for-tpgt-first.patch b/SOURCES/0002-idmb_rec_write-check-for-tpgt-first.patch index 5b9d247..ba9da6d 100644 --- a/SOURCES/0002-idmb_rec_write-check-for-tpgt-first.patch +++ b/SOURCES/0002-idmb_rec_write-check-for-tpgt-first.patch @@ -1,4 +1,4 @@ -From 97071360caa6868c21a161047ed471790c405efb Mon Sep 17 00:00:00 2001 +From 45878c9461298c9da68a626d990dc4ef99e01baa Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Tue, 13 Aug 2013 10:59:44 -0700 Subject: [PATCH] idmb_rec_write, check for tpgt first @@ -11,10 +11,10 @@ for splitting it up. 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/usr/idbm.c b/usr/idbm.c -index be4d4e3..a7da540 100644 +index 42c2699..e6ede85 100644 --- a/usr/idbm.c +++ b/usr/idbm.c -@@ -2078,6 +2078,10 @@ static int idbm_rec_write(node_rec_t *rec, bool disable_lock) +@@ -2178,6 +2178,10 @@ static int idbm_rec_write(node_rec_t *rec, bool disable_lock) goto free_portal; } @@ -25,7 +25,7 @@ index be4d4e3..a7da540 100644 rc = stat(portal, &statb); if (rc) { rc = 0; -@@ -2086,22 +2090,10 @@ static int idbm_rec_write(node_rec_t *rec, bool disable_lock) +@@ -2186,22 +2190,10 @@ static int idbm_rec_write(node_rec_t *rec, bool disable_lock) * set the tgpt. In new versions you must pass all the info in * from the start */ @@ -50,5 +50,5 @@ index be4d4e3..a7da540 100644 * Old style portal as a file, but with tpgt. Let's update it. */ -- -2.21.0 +2.26.2 diff --git a/SOURCES/0003-idbm_rec_write-seperate-old-and-new-style-writes.patch b/SOURCES/0003-idbm_rec_write-seperate-old-and-new-style-writes.patch index 25cddd3..e311733 100644 --- a/SOURCES/0003-idbm_rec_write-seperate-old-and-new-style-writes.patch +++ b/SOURCES/0003-idbm_rec_write-seperate-old-and-new-style-writes.patch @@ -1,4 +1,4 @@ -From 4c6e7c0fcc6da66cf81c0714bf907762194eedf2 Mon Sep 17 00:00:00 2001 +From cfd9fc81e11c462b682ead4e05721772b20f7546 Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Tue, 13 Aug 2013 11:34:31 -0700 Subject: [PATCH] idbm_rec_write, seperate old and new style writes @@ -9,10 +9,10 @@ Duplicates a small bit of code, but easier to understand and extened. 1 file changed, 86 insertions(+), 43 deletions(-) diff --git a/usr/idbm.c b/usr/idbm.c -index a7da540..2f5e309 100644 +index e6ede85..bc51388 100644 --- a/usr/idbm.c +++ b/usr/idbm.c -@@ -2030,12 +2030,7 @@ mkdir_portal: +@@ -2130,12 +2130,7 @@ mkdir_portal: return f; } @@ -26,7 +26,7 @@ index a7da540..2f5e309 100644 { struct stat statb; FILE *f; -@@ -2048,39 +2043,8 @@ static int idbm_rec_write(node_rec_t *rec, bool disable_lock) +@@ -2148,39 +2143,8 @@ static int idbm_rec_write(node_rec_t *rec, bool disable_lock) return ISCSI_ERR_NOMEM; } @@ -66,7 +66,7 @@ index a7da540..2f5e309 100644 rc = stat(portal, &statb); if (rc) { -@@ -2101,11 +2065,11 @@ static int idbm_rec_write(node_rec_t *rec, bool disable_lock) +@@ -2201,11 +2165,11 @@ static int idbm_rec_write(node_rec_t *rec, bool disable_lock) log_error("Could not convert %s: %s", portal, strerror(errno)); rc = ISCSI_ERR_IDBM; @@ -80,7 +80,7 @@ index a7da540..2f5e309 100644 } mkdir_portal: -@@ -2116,24 +2080,103 @@ mkdir_portal: +@@ -2216,24 +2180,103 @@ mkdir_portal: log_error("Could not make dir %s: %s", portal, strerror(errno)); rc = ISCSI_ERR_IDBM; @@ -189,5 +189,5 @@ index a7da540..2f5e309 100644 idbm_unlock(); free_portal: -- -2.21.0 +2.26.2 diff --git a/SOURCES/0004-idbw_rec_write-pick-tpgt-from-existing-record.patch b/SOURCES/0004-idbw_rec_write-pick-tpgt-from-existing-record.patch index d26e670..4a31b2a 100644 --- a/SOURCES/0004-idbw_rec_write-pick-tpgt-from-existing-record.patch +++ b/SOURCES/0004-idbw_rec_write-pick-tpgt-from-existing-record.patch @@ -1,4 +1,4 @@ -From 6051b9ef3cdf206630969940aba980f4088e2e14 Mon Sep 17 00:00:00 2001 +From 2b1c0c5f1f2dbc516a9b51950a82eac091dbce2c Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Tue, 13 Aug 2013 12:39:07 -0700 Subject: [PATCH] idbw_rec_write, pick tpgt from existing record @@ -12,7 +12,7 @@ updated new style record instead. 1 file changed, 40 insertions(+) diff --git a/usr/idbm.c b/usr/idbm.c -index 2f5e309..a2332cc 100644 +index bc51388..f1e5c88 100644 --- a/usr/idbm.c +++ b/usr/idbm.c @@ -28,6 +28,7 @@ @@ -23,21 +23,21 @@ index 2f5e309..a2332cc 100644 #include #include #include -@@ -164,6 +165,8 @@ static struct idbm *db; - _n++; \ - } while(0) +@@ -203,6 +204,8 @@ static struct int_list_tbl { + { "SHA3-256", AUTH_CHAP_ALG_SHA3_256 }, + }; +static int idbm_remove_disc_to_node_link(node_rec_t *rec, char *portal); + static void idbm_recinfo_discovery(discovery_rec_t *r, recinfo_t *ri) { -@@ -2107,12 +2110,49 @@ static int idbm_rec_write_old(node_rec_t *rec) +@@ -2207,12 +2210,49 @@ static int idbm_rec_write_old(node_rec_t *rec) FILE *f; char *portal; int rc = 0; + glob_t globbuf; -+ int i; ++ size_t i; + int tpgt = PORTAL_GROUP_TAG_UNKNOWN; portal = malloc(PATH_MAX); @@ -83,5 +83,5 @@ index 2f5e309..a2332cc 100644 rec->name, rec->conn[0].address, rec->conn[0].port); -- -2.21.0 +2.26.2 diff --git a/SOURCES/0005-update-initscripts-and-docs.patch b/SOURCES/0005-update-initscripts-and-docs.patch index 0e0bdfb..7d487a5 100644 --- a/SOURCES/0005-update-initscripts-and-docs.patch +++ b/SOURCES/0005-update-initscripts-and-docs.patch @@ -1,16 +1,16 @@ -From 6602f08bfcc2b2e75d1a58671cb160c96cf2d99b Mon Sep 17 00:00:00 2001 +From 97b1242450df25648d203acf7cc297cd46d10e8c Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Mon, 19 Nov 2012 16:37:13 -0800 Subject: [PATCH] update initscripts and docs --- - README | 10 ++++------ - etc/iscsid.conf | 21 ++++++++++----------- + README | 12 +++++------- + etc/iscsid.conf | 23 +++++++++++------------ usr/idbm.c | 4 ++++ - 3 files changed, 18 insertions(+), 17 deletions(-) + 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/README b/README -index 2499d9a..c05814a 100644 +index 508c9d7..b62a14e 100644 --- a/README +++ b/README @@ -77,11 +77,6 @@ the cache sync command will fail. @@ -25,16 +25,21 @@ index 2499d9a..c05814a 100644 The userspace components iscsid, iscsiadm and iscsistart require the open-isns library, which can be found here: https://github.com/gonzoleeman/open-isns/releases -@@ -1151,7 +1146,7 @@ Red Hat or Fedora: +@@ -1163,11 +1158,11 @@ Red Hat or Fedora: ----------------- To start open-iscsi in Red Hat/Fedora you can do: -- service open-iscsi start -+ service iscsi start +- systemctl start open-iscsi ++ systemctl start iscsi To get open-iscsi to automatically start at run time you may have to run: -@@ -1353,6 +1348,9 @@ iscsid will only perform rediscovery when it gets a SCN from the server. +- systemctl enable open-iscsi ++ systemctl enable iscsi + + And, to automatically mount a file system during startup + you must have the partition entry in /etc/fstab marked with the "_netdev" +@@ -1370,6 +1365,9 @@ iscsid will only perform rediscovery when it gets a SCN from the server. # linux-isns (SLES's iSNS server) where it sometimes does not send SCN # events in the proper format, so they may not get handled. @@ -45,18 +50,20 @@ index 2499d9a..c05814a 100644 -------- diff --git a/etc/iscsid.conf b/etc/iscsid.conf -index 70985af..2f3a28c 100644 +index f21ed3d..420145b 100644 --- a/etc/iscsid.conf +++ b/etc/iscsid.conf -@@ -19,7 +19,7 @@ +@@ -19,8 +19,8 @@ # the time then leave this attribute commented out. # # Default for Fedora and RHEL. (uncomment to activate). --# iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.soccket +-# iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket +-# +iscsid.startup = /bin/systemctl start iscsid.socket iscsiuio.socket - # ++# # Default if you are not using systemd (uncomment to activate) # iscsid.startup = /usr/bin/service start iscsid + @@ -41,8 +41,8 @@ # To request that the iscsi initd scripts startup a session set to "automatic". # node.startup = automatic @@ -68,7 +75,7 @@ index 70985af..2f3a28c 100644 # For "automatic" startup nodes, setting this to "Yes" will try logins on each # available iface until one succeeds, and then stop. The default "No" will try -@@ -264,28 +264,27 @@ node.conn[0].iscsi.MaxXmitDataSegmentLength = 0 +@@ -271,28 +271,27 @@ node.conn[0].iscsi.MaxXmitDataSegmentLength = 0 discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768 # To allow the targets to control the setting of the digest checking, @@ -105,10 +112,10 @@ index 70985af..2f3a28c 100644 # For multipath configurations, you may want more than one session to be # created on each iface record. If node.session.nr_sessions is greater diff --git a/usr/idbm.c b/usr/idbm.c -index a2332cc..aed08f2 100644 +index f1e5c88..0f0f17a 100644 --- a/usr/idbm.c +++ b/usr/idbm.c -@@ -521,9 +521,13 @@ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri) +@@ -566,9 +566,13 @@ idbm_recinfo_node(node_rec_t *r, recinfo_t *ri) IDBM_SHOW, "None", "CRC32C", "CRC32C,None", "None,CRC32C", num, 1); sprintf(key, CONN_DATA_DIGEST, i); @@ -123,5 +130,5 @@ index a2332cc..aed08f2 100644 __recinfo_int_o2(key, ri, r, conn[i].iscsi.IFMarker, IDBM_SHOW, "No", "Yes", num, 1); -- -2.21.0 +2.26.2 diff --git a/SOURCES/0006-use-var-for-config.patch b/SOURCES/0006-use-var-for-config.patch index db63b54..1836b16 100644 --- a/SOURCES/0006-use-var-for-config.patch +++ b/SOURCES/0006-use-var-for-config.patch @@ -1,4 +1,4 @@ -From 9cae86dd15bf78ee9d221f722f723062eb6ad3d8 Mon Sep 17 00:00:00 2001 +From b2af45f06a9b4d78c5dbb9421ac94f62d5e6f884 Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Mon, 19 Nov 2012 16:38:45 -0800 Subject: [PATCH] use var for config @@ -147,10 +147,10 @@ index c05814a..326c3b0 100644 Note that for iSNS the poll_interval does not have to be set. If not set, iscsid will only perform rediscovery when it gets a SCN from the server. diff --git a/doc/iscsiadm.8 b/doc/iscsiadm.8 -index bf23dd2..9cfce16 100644 +index 22263eb..f47afac 100644 --- a/doc/iscsiadm.8 +++ b/doc/iscsiadm.8 -@@ -228,7 +228,7 @@ This option is only valid for ping submode. +@@ -229,7 +229,7 @@ This option is only valid for ping submode. .TP \fB\-I\fR, \fB\-\-interface=\fI[iface]\fR The interface argument specifies the iSCSI interface to use for the operation. @@ -159,7 +159,7 @@ index bf23dd2..9cfce16 100644 iSCSI (qla4xxx) the iface config must have the hardware address (iface.hwaddress = port's MAC address) and the driver/transport_name (iface.transport_name). The iface's name is -@@ -301,7 +301,7 @@ If no other options are specified: for \fIdiscovery\fR, \fIdiscoverydb\fR and +@@ -309,7 +309,7 @@ If no other options are specified: for \fIdiscovery\fR, \fIdiscoverydb\fR and \fInode\fR, all of their respective records are displayed; for \fIsession\fR, all active sessions and connections are displayed; for \fIfw\fR, all boot firmware values are displayed; for \fIhost\fR, all iSCSI hosts are displayed; @@ -168,7 +168,7 @@ index bf23dd2..9cfce16 100644 .TP \fB\-n\fR, \fB\-\-name=\fIname\fR In node mode, specify a field \fIname\fR in a record. In flashnode submode -@@ -640,10 +640,10 @@ The configuration file read by \fBiscsid\fR and \fBiscsiadm\fR on startup. +@@ -648,10 +648,10 @@ The configuration file read by \fBiscsid\fR and \fBiscsiadm\fR on startup. The file containing the iSCSI InitiatorName and InitiatorAlias read by \fBiscsid\fR and \fBiscsiadm\fR on startup. .TP @@ -195,10 +195,10 @@ index 6f9218f..0da0551 100644 .SH "SEE ALSO" diff --git a/usr/idbm.c b/usr/idbm.c -index aed08f2..15802c3 100644 +index 0f0f17a..27cad0a 100644 --- a/usr/idbm.c +++ b/usr/idbm.c -@@ -2968,9 +2968,9 @@ free_info: +@@ -3068,9 +3068,9 @@ free_info: int idbm_init(idbm_get_config_file_fn *fn) { /* make sure root db dir is there */ @@ -212,7 +212,7 @@ index aed08f2..15802c3 100644 return errno; } diff --git a/usr/idbm.h b/usr/idbm.h -index 18c5025..6bdfd60 100644 +index 46cd82a..ce098b7 100644 --- a/usr/idbm.h +++ b/usr/idbm.h @@ -30,12 +30,13 @@ @@ -251,5 +251,5 @@ index 6c06f7f..c8b9de9 100644 struct iface_rec; struct list_head; -- -2.21.0 +2.26.2 diff --git a/SOURCES/0007-use-red-hat-for-name.patch b/SOURCES/0007-use-red-hat-for-name.patch index 2719565..53ac29c 100644 --- a/SOURCES/0007-use-red-hat-for-name.patch +++ b/SOURCES/0007-use-red-hat-for-name.patch @@ -1,4 +1,4 @@ -From 1ddee25396962a6bd966b98311881ed6d4cba87c Mon Sep 17 00:00:00 2001 +From 8312003a6a9e41d8d20eb8225ec8c4b2860351ec Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Mon, 19 Nov 2012 16:40:04 -0800 Subject: [PATCH] use red hat for name @@ -22,10 +22,10 @@ index 6a413f6..dd77ed9 100644 .SH AUTHORS Open-iSCSI project diff --git a/utils/iscsi-iname.c b/utils/iscsi-iname.c -index da850dc..29aa4ad 100644 +index 0f587e1..0e15650 100644 --- a/utils/iscsi-iname.c +++ b/utils/iscsi-iname.c -@@ -80,7 +80,7 @@ main(int argc, char *argv[]) +@@ -89,7 +89,7 @@ main(int argc, char *argv[]) exit(0); } } else { @@ -35,5 +35,5 @@ index da850dc..29aa4ad 100644 /* try to feed some entropy from the pool to MD5 in order to get -- -2.21.0 +2.26.2 diff --git a/SOURCES/0008-libiscsi.patch b/SOURCES/0008-libiscsi.patch index 16f3544..39d1a84 100644 --- a/SOURCES/0008-libiscsi.patch +++ b/SOURCES/0008-libiscsi.patch @@ -1,4 +1,4 @@ -From af721a438031fa9f79db5de3b018c4b532ac2e0c Mon Sep 17 00:00:00 2001 +From 8b4da8007ef59bbc833fed882ddae57bbcd51f1c Mon Sep 17 00:00:00 2001 From: rpm-build Date: Mon, 26 Jan 2015 12:57:11 -0800 Subject: [PATCH] libiscsi @@ -3914,12 +3914,12 @@ index 0000000..a21f888 + return rc; +} diff --git a/usr/Makefile b/usr/Makefile -index 3bb0cb4..8ae6e07 100644 +index 21bb154..885243a 100644 --- a/usr/Makefile +++ b/usr/Makefile @@ -37,7 +37,7 @@ PKG_CONFIG = /usr/bin/pkg-config CFLAGS ?= -O2 -g - WARNFLAGS ?= -Wall -Wstrict-prototypes + WARNFLAGS ?= -Wall -Wextra -Werror -Wstrict-prototypes -fno-common CFLAGS += $(WARNFLAGS) -I../include -I. -D_GNU_SOURCE \ - -I$(TOPDIR)/libopeniscsiusr + -I$(TOPDIR)/libopeniscsiusr -DISNS_ENABLE @@ -3927,7 +3927,7 @@ index 3bb0cb4..8ae6e07 100644 ISCSI_LIB = -L$(TOPDIR)/libopeniscsiusr -lopeniscsiusr LDFLAGS += $(shell $(PKG_CONFIG) --libs libkmod) diff --git a/usr/discovery.c b/usr/discovery.c -index 199c160..d17a250 100644 +index 7dec696..2cf1838 100644 --- a/usr/discovery.c +++ b/usr/discovery.c @@ -36,6 +36,7 @@ @@ -3965,13 +3965,13 @@ index 199c160..d17a250 100644 } +#endif - int discovery_fw(void *data, struct iface_rec *iface, - struct list_head *rec_list) + int discovery_fw(void *data, + __attribute__((unused))struct iface_rec *iface, diff --git a/usr/idbm.c b/usr/idbm.c -index 15802c3..3184c77 100644 +index 27cad0a..2498a03 100644 --- a/usr/idbm.c +++ b/usr/idbm.c -@@ -1725,9 +1725,9 @@ int idbm_print_all_discovery(int info_level) +@@ -1825,9 +1825,9 @@ int idbm_print_all_discovery(int info_level) * fn should return -1 if it skipped the rec, an ISCSI_ERR error code if * the operation failed or 0 if fn was run successfully. */ @@ -3985,10 +3985,10 @@ index 15802c3..3184c77 100644 DIR *iface_dirfd; struct dirent *iface_dent; diff --git a/usr/idbm.h b/usr/idbm.h -index 6bdfd60..c6982e4 100644 +index ce098b7..d1a7f63 100644 --- a/usr/idbm.h +++ b/usr/idbm.h -@@ -103,6 +103,9 @@ struct rec_op_data { +@@ -105,6 +105,9 @@ struct rec_op_data { node_rec_t *match_rec; idbm_iface_op_fn *fn; }; @@ -3999,16 +3999,16 @@ index 6bdfd60..c6982e4 100644 char *targetname, bool ruw_lock); extern int idbm_for_each_node(int *found, void *data, diff --git a/usr/iscsi_ipc.h b/usr/iscsi_ipc.h -index 47857dd..fb8e965 100644 +index 47857dd..596543b 100644 --- a/usr/iscsi_ipc.h +++ b/usr/iscsi_ipc.h @@ -162,4 +162,6 @@ struct iscsi_ipc { char *host_stats); }; -+struct iscsi_ipc *ipc; ++extern struct iscsi_ipc *ipc; + #endif /* ISCSI_IPC_H */ -- -2.21.0 +2.26.2 diff --git a/SOURCES/0009-Add-macros-to-release-GIL-lock.patch b/SOURCES/0009-Add-macros-to-release-GIL-lock.patch index 6804133..e03b7ef 100644 --- a/SOURCES/0009-Add-macros-to-release-GIL-lock.patch +++ b/SOURCES/0009-Add-macros-to-release-GIL-lock.patch @@ -1,4 +1,4 @@ -From 3df19ccba0af40da8cdb15c41e1bcd08ce25fbd9 Mon Sep 17 00:00:00 2001 +From 676f48d6e70f8406b36a004669d923825db51e2f Mon Sep 17 00:00:00 2001 From: Jiri Konecny Date: Mon, 11 May 2015 13:16:26 +0200 Subject: [PATCH] Add macros to release GIL lock @@ -52,5 +52,5 @@ index 8800853..40b5955 100644 libiscsi_get_error_string(context)); return NULL; -- -2.21.0 +2.26.2 diff --git a/SOURCES/0010-libiscsi-introduce-sessions-API.patch b/SOURCES/0010-libiscsi-introduce-sessions-API.patch index b6c3728..57ab58f 100644 --- a/SOURCES/0010-libiscsi-introduce-sessions-API.patch +++ b/SOURCES/0010-libiscsi-introduce-sessions-API.patch @@ -1,4 +1,4 @@ -From bca0b3a085b7a169aa40d81ed7997c73fde8b4d3 Mon Sep 17 00:00:00 2001 +From 2c28c620727e522f022689312d76f107eb8ef18f Mon Sep 17 00:00:00 2001 From: Peter Hatina Date: Mon, 5 Oct 2015 16:50:36 -0700 Subject: [PATCH] libiscsi introduce sessions API @@ -242,7 +242,7 @@ index 756590e..a9891f4 100644 * * Set the given nodes iSCSI parameter named by \e parameter to value \e value. diff --git a/usr/iscsi_sysfs.c b/usr/iscsi_sysfs.c -index 418f51b..6febba2 100644 +index 435c576..e549afe 100644 --- a/usr/iscsi_sysfs.c +++ b/usr/iscsi_sysfs.c @@ -3,6 +3,7 @@ @@ -286,5 +286,5 @@ index 1d0377f..909db34 100644 int *nr_found, iscsi_sysfs_iface_op_fn *fn); -- -2.21.0 +2.26.2 diff --git a/SOURCES/0011-libiscsi-fix-discovery-request-timeout-regression.patch b/SOURCES/0011-libiscsi-fix-discovery-request-timeout-regression.patch index 8771f6a..cddc17c 100644 --- a/SOURCES/0011-libiscsi-fix-discovery-request-timeout-regression.patch +++ b/SOURCES/0011-libiscsi-fix-discovery-request-timeout-regression.patch @@ -1,4 +1,4 @@ -From 2e660a78632545e98f7c9e2ffb8518512c0db5ff Mon Sep 17 00:00:00 2001 +From c53c576c09c5a3a1654b7a1f08fcc222a102499d Mon Sep 17 00:00:00 2001 From: rpm-build Date: Tue, 28 Feb 2017 09:00:41 -0800 Subject: [PATCH] libiscsi: fix discovery request timeout regression @@ -28,5 +28,5 @@ index 755c18c..bb17dfc 100644 rc = idbm_bind_ifaces_to_nodes(discovery_fw, &drec, &ifaces, &rec_list); if (rc) { -- -2.21.0 +2.26.2 diff --git a/SOURCES/0012-libiscsi-format-security-build-errors.patch b/SOURCES/0012-libiscsi-format-security-build-errors.patch index 19244b3..421bc3b 100644 --- a/SOURCES/0012-libiscsi-format-security-build-errors.patch +++ b/SOURCES/0012-libiscsi-format-security-build-errors.patch @@ -1,4 +1,4 @@ -From 3040b7530eda1ab5625d76783dc7b8cf595a0ef0 Mon Sep 17 00:00:00 2001 +From cf4db608004f7c1f137ed556e3ba6b6f4d65da96 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Tue, 28 Feb 2017 10:06:42 -0800 Subject: [PATCH] libiscsi format-security build errors @@ -31,5 +31,5 @@ index bb17dfc..7003388 100644 } -- -2.21.0 +2.26.2 diff --git a/SOURCES/0013-libiscsi-fix-build-to-use-libopeniscsiusr.patch b/SOURCES/0013-libiscsi-fix-build-to-use-libopeniscsiusr.patch index 65688a7..9b3c34b 100644 --- a/SOURCES/0013-libiscsi-fix-build-to-use-libopeniscsiusr.patch +++ b/SOURCES/0013-libiscsi-fix-build-to-use-libopeniscsiusr.patch @@ -1,4 +1,4 @@ -From 123fc55dd8ad98c9afd39bf0824b3d31d5e93214 Mon Sep 17 00:00:00 2001 +From a86a677762cf5fd45a43029a4fd3dd83d1a87a98 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Thu, 24 May 2018 15:17:05 -0700 Subject: [PATCH] libiscsi fix build to use libopeniscsiusr @@ -32,5 +32,5 @@ index 53f9746..f2cf248 100644 # Flags for the tests -- -2.21.0 +2.26.2 diff --git a/SOURCES/0014-libiscsi-fix-build-against-latest-upstream-again.patch b/SOURCES/0014-libiscsi-fix-build-against-latest-upstream-again.patch index ef2c891..f9f8d07 100644 --- a/SOURCES/0014-libiscsi-fix-build-against-latest-upstream-again.patch +++ b/SOURCES/0014-libiscsi-fix-build-against-latest-upstream-again.patch @@ -1,4 +1,4 @@ -From 039700890e11dff3323241349d3858f258c09cc0 Mon Sep 17 00:00:00 2001 +From 55af753f593243bcd1ab4c7e82620bdee432915b Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Thu, 7 Nov 2019 09:16:17 -0800 Subject: [PATCH] libiscsi: fix build against latest upstream, again @@ -62,5 +62,5 @@ index 7003388..c598aee 100644 strcpy(context->error_str, "No such node"); rc = ENODEV; -- -2.21.0 +2.26.2 diff --git a/SOURCES/0015-remove-the-offload-boot-supported-ifdef.patch b/SOURCES/0015-remove-the-offload-boot-supported-ifdef.patch index d63dbd9..2466935 100644 --- a/SOURCES/0015-remove-the-offload-boot-supported-ifdef.patch +++ b/SOURCES/0015-remove-the-offload-boot-supported-ifdef.patch @@ -1,4 +1,4 @@ -From d0689253c9e2eb78fc5296adb109aba4d35a13fd Mon Sep 17 00:00:00 2001 +From d410fe4b6eb2347f2160b8aaab24a639de99c23c Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Mon, 19 Nov 2012 17:09:24 -0800 Subject: [PATCH] remove the offload boot supported ifdef @@ -8,10 +8,10 @@ Subject: [PATCH] remove the offload boot supported ifdef 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/usr/iface.c b/usr/iface.c -index 645b0b8..9cd07fd 100644 +index 11f3d2a..65c1615 100644 --- a/usr/iface.c +++ b/usr/iface.c -@@ -993,6 +993,7 @@ int iface_setup_from_boot_context(struct iface_rec *iface, +@@ -998,6 +998,7 @@ int iface_setup_from_boot_context(struct iface_rec *iface, { struct iscsi_transport *t = NULL; uint32_t hostno; @@ -19,7 +19,7 @@ index 645b0b8..9cd07fd 100644 if (strlen(context->initiatorname)) strlcpy(iface->iname, context->initiatorname, -@@ -1006,10 +1007,7 @@ int iface_setup_from_boot_context(struct iface_rec *iface, +@@ -1011,10 +1012,7 @@ int iface_setup_from_boot_context(struct iface_rec *iface, return 0; } } else if (strlen(context->iface)) { @@ -30,7 +30,7 @@ index 645b0b8..9cd07fd 100644 memset(transport_name, 0, ISCSI_TRANSPORT_NAME_MAXLEN); /* make sure offload driver is loaded */ -@@ -1035,9 +1033,6 @@ int iface_setup_from_boot_context(struct iface_rec *iface, +@@ -1040,9 +1038,6 @@ int iface_setup_from_boot_context(struct iface_rec *iface, } strlcpy(iface->netdev, context->iface, sizeof(iface->netdev)); @@ -41,5 +41,5 @@ index 645b0b8..9cd07fd 100644 return 0; -- -2.21.0 +2.26.2 diff --git a/SOURCES/0016-Revert-iscsiadm-return-error-when-login-fails.patch b/SOURCES/0016-Revert-iscsiadm-return-error-when-login-fails.patch index 0420b01..7cae8ab 100644 --- a/SOURCES/0016-Revert-iscsiadm-return-error-when-login-fails.patch +++ b/SOURCES/0016-Revert-iscsiadm-return-error-when-login-fails.patch @@ -1,4 +1,4 @@ -From ccb9d70a0dad7c42f926f1680ae708a5ae3d3696 Mon Sep 17 00:00:00 2001 +From 49dc2a687175f9671a159df38971a15287dae18c Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Mon, 24 Feb 2014 09:33:33 -0800 Subject: [PATCH] Revert "iscsiadm: return error when login fails" @@ -30,5 +30,5 @@ index 0500f15..1e1f2bc 100644 } -- -2.21.0 +2.26.2 diff --git a/SOURCES/0017-dont-install-scripts.patch b/SOURCES/0017-dont-install-scripts.patch index 14c3683..a7c1c38 100644 --- a/SOURCES/0017-dont-install-scripts.patch +++ b/SOURCES/0017-dont-install-scripts.patch @@ -1,4 +1,4 @@ -From f524e332835b2b59d3f3ff8a67814ef2d58a2857 Mon Sep 17 00:00:00 2001 +From e35261316aaa598c4146a5396745cb76571e94fe Mon Sep 17 00:00:00 2001 From: rpm-build Date: Fri, 25 May 2018 09:39:07 -0700 Subject: [PATCH] dont install scripts @@ -21,5 +21,5 @@ index 4ab091f..7e6b734 100644 $(INSTALL) -m 755 $^ $(DESTDIR)$(sbindir) -- -2.21.0 +2.26.2 diff --git a/SOURCES/0018-use-var-lib-iscsi-in-libopeniscsiusr.patch b/SOURCES/0018-use-var-lib-iscsi-in-libopeniscsiusr.patch index 08d5ed2..3a780d9 100644 --- a/SOURCES/0018-use-var-lib-iscsi-in-libopeniscsiusr.patch +++ b/SOURCES/0018-use-var-lib-iscsi-in-libopeniscsiusr.patch @@ -1,4 +1,4 @@ -From e2b8215b80cc037ecbcb9eef50e432c31d5e56eb Mon Sep 17 00:00:00 2001 +From e186e959ddc2a47e7cfe1f5a8ea4d3fa8248a478 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Wed, 30 May 2018 16:08:30 -0700 Subject: [PATCH] use /var/lib/iscsi in libopeniscsiusr @@ -12,7 +12,7 @@ Subject: [PATCH] use /var/lib/iscsi in libopeniscsiusr 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libopeniscsiusr/idbm.h b/libopeniscsiusr/idbm.h -index 3fd0864..c84d332 100644 +index cc90388..5a4d2fa 100644 --- a/libopeniscsiusr/idbm.h +++ b/libopeniscsiusr/idbm.h @@ -31,7 +31,8 @@ @@ -105,5 +105,5 @@ index 39e07b3..9eba7fa 100644 /* Might be public in the future */ __DLL_LOCAL void iscsi_node_free(struct iscsi_node *node); -- -2.21.0 +2.26.2 diff --git a/SOURCES/0019-Coverity-scan-fixes.patch b/SOURCES/0019-Coverity-scan-fixes.patch index 1161fd1..2a852f7 100644 --- a/SOURCES/0019-Coverity-scan-fixes.patch +++ b/SOURCES/0019-Coverity-scan-fixes.patch @@ -1,15 +1,15 @@ -From 44bb05de04c0f8819c1fdae8f567dd802a8444e8 Mon Sep 17 00:00:00 2001 +From 0c300716226027d75afa2b9e5f052fa4868204ae Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Wed, 5 Jun 2019 09:08:39 -0700 Subject: [PATCH] Coverity scan fixes --- iscsiuio/src/unix/libs/qedi.c | 2 +- - iscsiuio/src/unix/main.c | 12 ++++++++++-- + iscsiuio/src/unix/main.c | 3 +++ libopeniscsiusr/idbm.c | 11 +++++------ usr/idbm.c | 10 ++++------ usr/iscsid.c | 2 +- - 5 files changed, 21 insertions(+), 16 deletions(-) + 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/iscsiuio/src/unix/libs/qedi.c b/iscsiuio/src/unix/libs/qedi.c index 3414cb5..a359700 100644 @@ -25,22 +25,10 @@ index 3414cb5..a359700 100644 if (bd_cons != bd_prod) { diff --git a/iscsiuio/src/unix/main.c b/iscsiuio/src/unix/main.c -index 5e3f66c..4c50890 100644 +index 0c9ad49..f83f305 100644 --- a/iscsiuio/src/unix/main.c +++ b/iscsiuio/src/unix/main.c -@@ -341,7 +341,10 @@ int main(int argc, char *argv[]) - - /* parent: wait for child msg then exit */ - close(pipefds[1]); -- read(pipefds[0], msgbuf, sizeof(msgbuf)); -+ if (read(pipefds[0], msgbuf, sizeof(msgbuf)) < 0) { -+ fprintf(stderr, "ERR: Waiting for child process failed\n"); -+ exit(1); -+ } - exit(0); - } - -@@ -387,6 +390,9 @@ int main(int argc, char *argv[]) +@@ -391,6 +391,9 @@ int main(int argc, char *argv[]) sigaddset(&set, SIGTERM); sigaddset(&set, SIGUSR1); rc = pthread_sigmask(SIG_SETMASK, &set, NULL); @@ -50,22 +38,11 @@ index 5e3f66c..4c50890 100644 /* Spin off the signal handling thread */ pthread_attr_init(&attr); -@@ -416,7 +422,9 @@ int main(int argc, char *argv[]) - if (!foreground) { - /* signal parent they can go away now */ - close(pipefds[0]); -- write(pipefds[1], "ok\n", 3); -+ if (write(pipefds[1], "ok\n", 3) < 0) { -+ LOG_ERR("Failed to signal parent process of completed initialization"); -+ } - close(pipefds[1]); - } - diff --git a/libopeniscsiusr/idbm.c b/libopeniscsiusr/idbm.c -index d020e6c..342aab5 100644 +index 7bc2381..7d4c338 100644 --- a/libopeniscsiusr/idbm.c +++ b/libopeniscsiusr/idbm.c -@@ -287,12 +287,11 @@ int _idbm_lock(struct iscsi_context *ctx) +@@ -321,12 +321,11 @@ int _idbm_lock(struct iscsi_context *ctx) return 0; } @@ -84,10 +61,10 @@ index d020e6c..342aab5 100644 fd = open(LOCK_FILE, O_RDWR | O_CREAT, 0666); diff --git a/usr/idbm.c b/usr/idbm.c -index 3184c77..0c6870c 100644 +index 2498a03..a4bc745 100644 --- a/usr/idbm.c +++ b/usr/idbm.c -@@ -1339,12 +1339,10 @@ int idbm_lock(void) +@@ -1439,12 +1439,10 @@ int idbm_lock(void) return 0; } @@ -105,10 +82,10 @@ index 3184c77..0c6870c 100644 fd = open(LOCK_FILE, O_RDWR | O_CREAT, 0666); diff --git a/usr/iscsid.c b/usr/iscsid.c -index 8f1c597..96a6452 100644 +index e501498..dd94a16 100644 --- a/usr/iscsid.c +++ b/usr/iscsid.c -@@ -489,8 +489,8 @@ int main(int argc, char *argv[]) +@@ -495,8 +495,8 @@ int main(int argc, char *argv[]) log_close(log_pid); exit(ISCSI_ERR); } @@ -119,5 +96,5 @@ index 8f1c597..96a6452 100644 if ((control_fd = ipc->ctldev_open()) < 0) { log_close(log_pid); -- -2.21.0 +2.26.2 diff --git a/SOURCES/0020-fix-upstream-build-breakage-of-iscsiuio-LDFLAGS.patch b/SOURCES/0020-fix-upstream-build-breakage-of-iscsiuio-LDFLAGS.patch index b7d5c02..d764fb3 100644 --- a/SOURCES/0020-fix-upstream-build-breakage-of-iscsiuio-LDFLAGS.patch +++ b/SOURCES/0020-fix-upstream-build-breakage-of-iscsiuio-LDFLAGS.patch @@ -1,4 +1,4 @@ -From 4142125fa296d21a307fb2370b2d4d7e8487f22c Mon Sep 17 00:00:00 2001 +From c852ca6300bc3fcf765744506222ff6da4296127 Mon Sep 17 00:00:00 2001 From: rpm-build Date: Wed, 16 Oct 2019 23:17:20 -0700 Subject: [PATCH] fix upstream build breakage of iscsiuio LDFLAGS @@ -8,7 +8,7 @@ Subject: [PATCH] fix upstream build breakage of iscsiuio LDFLAGS 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/iscsiuio/configure.ac b/iscsiuio/configure.ac -index b41df0e..a856cc5 100644 +index 8099f09..733214d 100644 --- a/iscsiuio/configure.ac +++ b/iscsiuio/configure.ac @@ -67,10 +67,10 @@ AM_CONDITIONAL([DEBUG], [test x$debug = xtrue]) @@ -25,5 +25,5 @@ index b41df0e..a856cc5 100644 AC_CONFIG_COMMANDS([default],[[ if [ -n "$SOURCE_DATE_EPOCH" ] ; then -- -2.21.0 +2.26.2 diff --git a/SOURCES/0021-improve-systemd-service-files-for-boot-session-handl.patch b/SOURCES/0021-improve-systemd-service-files-for-boot-session-handl.patch deleted file mode 100644 index ba53b55..0000000 --- a/SOURCES/0021-improve-systemd-service-files-for-boot-session-handl.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 77150edd697669467ff9f8775b93bd9d7a34cadf Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Mon, 28 Oct 2019 10:20:56 -0700 -Subject: [PATCH] improve systemd service files for boot session handling - ---- - etc/systemd/iscsi-mark-root-nodes | 6 +++++- - etc/systemd/iscsi-onboot.service | 15 +++++++++++++++ - etc/systemd/iscsi-shutdown.service | 1 + - etc/systemd/iscsi.service | 11 ++++------- - etc/systemd/iscsid.service | 4 +--- - etc/systemd/iscsiuio.service | 1 - - 6 files changed, 26 insertions(+), 12 deletions(-) - create mode 100644 etc/systemd/iscsi-onboot.service - -diff --git a/etc/systemd/iscsi-mark-root-nodes b/etc/systemd/iscsi-mark-root-nodes -index c693707..9d48805 100755 ---- a/etc/systemd/iscsi-mark-root-nodes -+++ b/etc/systemd/iscsi-mark-root-nodes -@@ -9,7 +9,11 @@ while read t num p target flash; do - portal=${p%,*} - transport=${t%:} - -- $ISCSIADM -m node -p $portal -T $target -o update -n node.startup -v onboot -+ # use session number to find the iface name in use -+ num=${num#[}; num=${num%]} -+ iface=$(iscsiadm -m session -r $num | grep iface.iscsi_ifacename | cut -d= -f2) -+ -+ $ISCSIADM -m node -p $portal -T $target -I $iface -o update -n node.startup -v onboot - - start_iscsid=1 - -diff --git a/etc/systemd/iscsi-onboot.service b/etc/systemd/iscsi-onboot.service -new file mode 100644 -index 0000000..42ced68 ---- /dev/null -+++ b/etc/systemd/iscsi-onboot.service -@@ -0,0 +1,15 @@ -+[Unit] -+Description=Special handling of early boot iSCSI sessions -+Documentation=man:iscsiadm(8) man:iscsid(8) -+DefaultDependencies=no -+RefuseManualStart=true -+Before=iscsi.service -+After=systemd-remount-fs.service -+ConditionDirectoryNotEmpty=/sys/class/iscsi_session -+ -+[Service] -+Type=oneshot -+ExecStart=-/usr/libexec/iscsi-mark-root-nodes -+ -+[Install] -+WantedBy=sysinit.target -diff --git a/etc/systemd/iscsi-shutdown.service b/etc/systemd/iscsi-shutdown.service -index 69c1c77..caee933 100644 ---- a/etc/systemd/iscsi-shutdown.service -+++ b/etc/systemd/iscsi-shutdown.service -@@ -11,4 +11,5 @@ RefuseManualStop=yes - [Service] - Type=oneshot - RemainAfterExit=true -+ExecStart=-/usr/bin/true - ExecStop=-/usr/sbin/iscsiadm -m node --logoutall=all -diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service -index eadfcec..175cb2c 100644 ---- a/etc/systemd/iscsi.service -+++ b/etc/systemd/iscsi.service -@@ -1,21 +1,18 @@ - [Unit] - Description=Login and scanning of iSCSI devices --Documentation=man:iscsid(8) man:iscsiadm(8) -+Documentation=man:iscsiadm(8) man:iscsid(8) - DefaultDependencies=no --Conflicts=shutdown.target --After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service - Before=remote-fs-pre.target -+After=network.target network-online.target iscsid.service iscsiuio.service systemd-remount-fs.service - Wants=remote-fs-pre.target iscsi-shutdown.service --ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes --ConditionDirectoryNotEmpty=|/sys/class/iscsi_session -+ConditionDirectoryNotEmpty=/var/lib/iscsi/nodes - - [Service] - Type=oneshot - RemainAfterExit=true --ExecStart=-/usr/libexec/iscsi-mark-root-nodes - ExecStart=-/usr/sbin/iscsiadm -m node --loginall=automatic - ExecReload=-/usr/sbin/iscsiadm -m node --loginall=automatic - SuccessExitStatus=21 - - [Install] --WantedBy=sysinit.target -+WantedBy=remote-fs.target -diff --git a/etc/systemd/iscsid.service b/etc/systemd/iscsid.service -index 8d50cf0..28402fb 100644 ---- a/etc/systemd/iscsid.service -+++ b/etc/systemd/iscsid.service -@@ -1,8 +1,7 @@ - [Unit] - Description=Open-iSCSI --Documentation=man:iscsid(8) man:iscsiadm(8) -+Documentation=man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8) - DefaultDependencies=no --Conflicts=shutdown.target - After=network.target iscsiuio.service - Before=remote-fs-pre.target - -@@ -10,7 +9,6 @@ Before=remote-fs-pre.target - Type=notify - NotifyAccess=main - ExecStart=/usr/sbin/iscsid -f --ExecStop=/usr/sbin/iscsiadm -k 0 2 - KillMode=mixed - Restart=on-failure - -diff --git a/etc/systemd/iscsiuio.service b/etc/systemd/iscsiuio.service -index 8620cde..fc0be93 100644 ---- a/etc/systemd/iscsiuio.service -+++ b/etc/systemd/iscsiuio.service -@@ -2,7 +2,6 @@ - Description=iSCSI UserSpace I/O driver - Documentation=man:iscsiuio(8) - DefaultDependencies=no --Conflicts=shutdown.target - Requires=iscsid.service - BindTo=iscsid.service - After=network.target --- -2.21.0 - diff --git a/SOURCES/0022-use-Red-Hat-version-string-to-match-RPM-package-vers.patch b/SOURCES/0021-use-Red-Hat-version-string-to-match-RPM-package-vers.patch similarity index 75% rename from SOURCES/0022-use-Red-Hat-version-string-to-match-RPM-package-vers.patch rename to SOURCES/0021-use-Red-Hat-version-string-to-match-RPM-package-vers.patch index ad9b76f..c928e51 100644 --- a/SOURCES/0022-use-Red-Hat-version-string-to-match-RPM-package-vers.patch +++ b/SOURCES/0021-use-Red-Hat-version-string-to-match-RPM-package-vers.patch @@ -1,4 +1,4 @@ -From c589d94293f3bee77c34ca61371ddfbeef71f2af Mon Sep 17 00:00:00 2001 +From d7b7bd54b7d99ee865f629fac5f0b622d46e2c95 Mon Sep 17 00:00:00 2001 From: Chris Leech Date: Mon, 21 Jan 2013 15:43:36 -0800 Subject: [PATCH] use Red Hat version string to match RPM package version @@ -8,18 +8,18 @@ Subject: [PATCH] use Red Hat version string to match RPM package version 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr/version.h b/usr/version.h -index 615f533..a1f6cc2 100644 +index 115a11c..1214f3b 100644 --- a/usr/version.h +++ b/usr/version.h @@ -6,7 +6,7 @@ * This may not be the same value as the kernel versions because * some other maintainer could merge a patch without going through us */ --#define ISCSI_VERSION_STR "2.0-878" -+#define ISCSI_VERSION_STR "6.2.0.878-5" +-#define ISCSI_VERSION_STR "2.1.2" ++#define ISCSI_VERSION_STR "6.2.1.2-0" #define ISCSI_VERSION_FILE "/sys/module/scsi_transport_iscsi/version" #endif -- -2.21.0 +2.26.2 diff --git a/SOURCES/0022-iscsi_if.h-replace-zero-length-array-with-flexible-a.patch b/SOURCES/0022-iscsi_if.h-replace-zero-length-array-with-flexible-a.patch new file mode 100644 index 0000000..2318503 --- /dev/null +++ b/SOURCES/0022-iscsi_if.h-replace-zero-length-array-with-flexible-a.patch @@ -0,0 +1,44 @@ +From 84a8601fe7b9b5337af95835aaa5aae1bfd88d95 Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Tue, 11 Aug 2020 21:00:29 +0200 +Subject: [PATCH] iscsi_if.h replace zero-length array with flexible-array + member + +--- + include/iscsi_if.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/include/iscsi_if.h b/include/iscsi_if.h +index 5a1c614..e8cee0d 100644 +--- a/include/iscsi_if.h ++++ b/include/iscsi_if.h +@@ -337,7 +337,7 @@ enum iscsi_param_type { + struct iscsi_param_info { + uint32_t len; /* Actual length of the param value */ + uint16_t param; /* iscsi param */ +- uint8_t value[0]; /* length sized value follows */ ++ uint8_t value[]; /* length sized value follows */ + } __attribute__((__packed__)); + + struct iscsi_iface_param_info { +@@ -346,7 +346,7 @@ struct iscsi_iface_param_info { + uint16_t param; /* iscsi param value */ + uint8_t iface_type; /* IPv4 or IPv6 */ + uint8_t param_type; /* iscsi_param_type */ +- uint8_t value[0]; /* length sized value follows */ ++ uint8_t value[]; /* length sized value follows */ + } __attribute__((__packed__)); + + /* +@@ -723,7 +723,7 @@ enum iscsi_flashnode_param { + struct iscsi_flashnode_param_info { + uint32_t len; /* Actual length of the param */ + uint16_t param; /* iscsi param value */ +- uint8_t value[0]; /* length sized value follows */ ++ uint8_t value[]; /* length sized value follows */ + } __attribute__((__packed__)); + + enum iscsi_discovery_parent_type { +-- +2.26.2 + diff --git a/SOURCES/0023-stop-using-Werror-for-now.patch b/SOURCES/0023-stop-using-Werror-for-now.patch new file mode 100644 index 0000000..624081c --- /dev/null +++ b/SOURCES/0023-stop-using-Werror-for-now.patch @@ -0,0 +1,56 @@ +From af428f588f8023784c6f4b0a25d13b70fb7216ab Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Tue, 3 Mar 2020 10:35:40 -0800 +Subject: [PATCH] stop using Werror for now + +need to work through these warning that only appear on s390x +Werror seems bad for release, makes packaging a nightmare when new +compilers come around +--- + Makefile | 2 +- + usr/Makefile | 2 +- + usr/initiator.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index 7e6b734..0069e75 100644 +--- a/Makefile ++++ b/Makefile +@@ -7,7 +7,7 @@ + DESTDIR ?= + + prefix = /usr +-exec_prefix = / ++exec_prefix = /usr + sbindir = $(exec_prefix)/sbin + bindir = $(exec_prefix)/bin + mandir = $(prefix)/share/man +diff --git a/usr/Makefile b/usr/Makefile +index 885243a..1a743d1 100644 +--- a/usr/Makefile ++++ b/usr/Makefile +@@ -35,7 +35,7 @@ endif + PKG_CONFIG = /usr/bin/pkg-config + + CFLAGS ?= -O2 -g +-WARNFLAGS ?= -Wall -Wextra -Werror -Wstrict-prototypes -fno-common ++WARNFLAGS ?= -Wall -Wextra -Wstrict-prototypes -fno-common + CFLAGS += $(WARNFLAGS) -I../include -I. -D_GNU_SOURCE \ + -I$(TOPDIR)/libopeniscsiusr -DISNS_ENABLE + CFLAGS += $(shell $(PKG_CONFIG) --cflags libkmod) +diff --git a/usr/initiator.c b/usr/initiator.c +index 684647c..a5a9d08 100644 +--- a/usr/initiator.c ++++ b/usr/initiator.c +@@ -580,7 +580,7 @@ __session_conn_reopen(iscsi_conn_t *conn, queue_task_t *qtask, int do_stop, + int redirected) + { + iscsi_session_t *session = conn->session; +- uint32_t delay; ++ uint32_t delay = 0; + + log_debug(1, "re-opening session %d (reopen_cnt %d)", session->id, + session->reopen_cnt); +-- +2.26.2 + diff --git a/SOURCES/0024-libopeniscsiusr-fix-error-messages.patch b/SOURCES/0024-libopeniscsiusr-fix-error-messages.patch new file mode 100644 index 0000000..81f4998 --- /dev/null +++ b/SOURCES/0024-libopeniscsiusr-fix-error-messages.patch @@ -0,0 +1,96 @@ +From 13affd82b8248b954d10eb4fd3d544796360fafd Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Wed, 17 Feb 2021 09:56:55 -0800 +Subject: [PATCH] libopeniscsiusr: fix error messages + +The error message in iscsi_session_get [libopeniscsiusr/session.c:140] +when a session or connection path isn't found in sysfs was failing to +print the session ID, instead it printed the address of the static +string for the remainder of the message ("does not exists") due to an +extra comma. + +Additionally change all occurances of "does not exists" to "does not +exist" + +Signed-off-by: Chris Leech +--- + libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h | 2 +- + libopeniscsiusr/session.c | 6 +++--- + libopeniscsiusr/sysfs.c | 8 ++++---- + 3 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h b/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h +index 4395902..a29d5b1 100644 +--- a/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h ++++ b/libopeniscsiusr/libopeniscsiusr/libopeniscsiusr.h +@@ -288,7 +288,7 @@ __DLL_EXPORT void iscsi_sessions_free(struct iscsi_session **ses, + * Output pointer of 'struct iscsi_session' pointer. Its memory + * should be freed by iscsi_session_free(). + * If this pointer is NULL, your program will be terminated by assert. +- * If specified iSCSI session does not exists, this pointer will be set to ++ * If specified iSCSI session does not exist, this pointer will be set to + * NULL with LIBISCSI_OK returned. + * + * Return: +diff --git a/libopeniscsiusr/session.c b/libopeniscsiusr/session.c +index 7ace4d6..f122fe3 100644 +--- a/libopeniscsiusr/session.c ++++ b/libopeniscsiusr/session.c +@@ -127,17 +127,17 @@ int iscsi_session_get(struct iscsi_context *ctx, uint32_t sid, + _alloc_null_check(ctx, *se , rc, out); + + if (! _file_exists(sysfs_se_dir_path)) { +- _info(ctx, "Sysfs path '%s' does not exists", ++ _info(ctx, "Sysfs path '%s' does not exist", + sysfs_se_dir_path); + rc = LIBISCSI_ERR_SESS_NOT_FOUND; + } + if (! _file_exists(sysfs_con_dir_path)) { +- _info(ctx, "Sysfs path '%s' does not exists", ++ _info(ctx, "Sysfs path '%s' does not exist", + sysfs_se_dir_path); + rc = LIBISCSI_ERR_SESS_NOT_FOUND; + } + if (rc == LIBISCSI_ERR_SESS_NOT_FOUND) { +- _error(ctx, "Specified SID %" PRIu32, "does not exists", ++ _error(ctx, "Specified SID %" PRIu32 " does not exist", + sid); + goto out; + } +diff --git a/libopeniscsiusr/sysfs.c b/libopeniscsiusr/sysfs.c +index 2c3f077..355ad55 100644 +--- a/libopeniscsiusr/sysfs.c ++++ b/libopeniscsiusr/sysfs.c +@@ -169,11 +169,11 @@ int _sysfs_prop_get_str(struct iscsi_context *ctx, const char *dir_path, + if (default_value == NULL) { + rc = LIBISCSI_ERR_SYSFS_LOOKUP; + _error(ctx, "Failed to read '%s': " +- "file '%s' does not exists", prop_name, ++ "file '%s' does not exist", prop_name, + file_path); + } else { + _info(ctx, "Failed to read '%s': " +- "file '%s' does not exists, " ++ "file '%s' does not exist, " + "using default value %s", prop_name, + file_path, default_value); + memcpy(buff, (void *) default_value, +@@ -244,13 +244,13 @@ static int iscsi_sysfs_prop_get_ll(struct iscsi_context *ctx, + if (! ignore_error) { + rc = LIBISCSI_ERR_SYSFS_LOOKUP; + _error(ctx, "Failed to read '%s': " +- "file '%s' does not exists", ++ "file '%s' does not exist", + prop_name, file_path); + goto out; + } else { + _info(ctx, + "Failed to read '%s': " +- "File '%s' does not exists, using ", ++ "File '%s' does not exist, using ", + "default value %lld", + prop_name, file_path, default_value); + *val = default_value; +-- +2.26.2 + diff --git a/SOURCES/0025-libopeniscsiusr-skip-over-removed-sessions.patch b/SOURCES/0025-libopeniscsiusr-skip-over-removed-sessions.patch new file mode 100644 index 0000000..fdaa9fd --- /dev/null +++ b/SOURCES/0025-libopeniscsiusr-skip-over-removed-sessions.patch @@ -0,0 +1,60 @@ +From a744d91046865416a50ea27f143ef0f02fcaf1c6 Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Wed, 17 Feb 2021 12:22:17 -0800 +Subject: [PATCH] libopeniscsiusr: skip over removed sessions + +When looping over all sessions with iscsi_sessions_get, it's possible to +race against sessions being destroyed and have the sysfs attribute files +be removed before they're read. Let's not treat this as an error, and +simply drop the session that failed to read from the list. I think it +makes sense to treat session that disapear while they're being read as +if they were already gone when the sessions directory was first scanned. + +Apparently having iscsiadm exit with an error when trying to get a list +of sessions is a problem for OpenStack deployments. + +Signed-off-by: Chris Leech +--- + libopeniscsiusr/session.c | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/libopeniscsiusr/session.c b/libopeniscsiusr/session.c +index f122fe3..4a724c8 100644 +--- a/libopeniscsiusr/session.c ++++ b/libopeniscsiusr/session.c +@@ -246,6 +246,7 @@ int iscsi_sessions_get(struct iscsi_context *ctx, + { + int rc = LIBISCSI_OK; + uint32_t i = 0; ++ uint32_t j = 0; + uint32_t *sids = NULL; + + assert(ctx != NULL); +@@ -264,9 +265,22 @@ int iscsi_sessions_get(struct iscsi_context *ctx, + + for (i = 0; i < *session_count; ++i) { + _debug(ctx, "sid %" PRIu32, sids[i]); +- _good(iscsi_session_get(ctx, sids[i], &((*sessions)[i])), +- rc, out); ++ rc = iscsi_session_get(ctx, sids[i], &((*sessions)[j])); ++ if (rc == LIBISCSI_OK) { ++ /* if session info was successfully read from sysfs, advance the sessions pointer */ ++ j++; ++ } else { ++ /* if not, just ignore the issue and keep trying with the next session ID, ++ * there's always going to be an inherent race against session removal when collecting ++ * attribute data from sysfs ++ */ ++ _debug(ctx, "Problem reading session %" PRIu32 ", skipping.", sids[i]); ++ rc = LIBISCSI_OK; ++ } + } ++ /* reset session count and sessions array length to what we were able to read from sysfs */ ++ *session_count = j; ++ *sessions = reallocarray(*sessions, *session_count, sizeof(struct iscsi_session *)); + + out: + free(sids); +-- +2.26.2 + diff --git a/SOURCES/0026-libopeniscsiusr-dont-error-loudly-if-a-session-isn-t.patch b/SOURCES/0026-libopeniscsiusr-dont-error-loudly-if-a-session-isn-t.patch new file mode 100644 index 0000000..ab4d722 --- /dev/null +++ b/SOURCES/0026-libopeniscsiusr-dont-error-loudly-if-a-session-isn-t.patch @@ -0,0 +1,72 @@ +From b21066fc07261e05590ccab839bf5eee2249d358 Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Wed, 17 Feb 2021 13:48:25 -0800 +Subject: [PATCH] libopeniscsiusr: dont error loudly if a session isn't found + when working through iscsi_sessions_get() + +Suppress the error message from iscsi_session_get when it's being called +through iscsi_sessions_get now that it's not being treated as an error. +There's no reason to be so alarmed the session being read in isn't +specified exactly. + +Signed-off-by: Chris Leech +--- + libopeniscsiusr/session.c | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +diff --git a/libopeniscsiusr/session.c b/libopeniscsiusr/session.c +index 4a724c8..6b06241 100644 +--- a/libopeniscsiusr/session.c ++++ b/libopeniscsiusr/session.c +@@ -101,8 +101,8 @@ _iscsi_getter_func_gen(iscsi_session, address, const char *); + _iscsi_getter_func_gen(iscsi_session, port, int32_t); + _iscsi_getter_func_gen(iscsi_session, iface, struct iscsi_iface *); + +-int iscsi_session_get(struct iscsi_context *ctx, uint32_t sid, +- struct iscsi_session **se) ++int _iscsi_session_get(struct iscsi_context *ctx, uint32_t sid, ++ struct iscsi_session **se, bool verbose) + { + int rc = LIBISCSI_OK; + char *sysfs_se_dir_path = NULL; +@@ -137,8 +137,14 @@ int iscsi_session_get(struct iscsi_context *ctx, uint32_t sid, + rc = LIBISCSI_ERR_SESS_NOT_FOUND; + } + if (rc == LIBISCSI_ERR_SESS_NOT_FOUND) { +- _error(ctx, "Specified SID %" PRIu32 " does not exist", +- sid); ++ /* don't complain loudly if called through iscsi_sessions_get() ++ * the caller is not looking for a specific session, ++ * and the list could be changing as we work through it ++ */ ++ if (verbose) { ++ _error(ctx, "Specified SID %" PRIu32 " does not exist", ++ sid); ++ } + goto out; + } + +@@ -240,6 +246,11 @@ out: + return rc; + } + ++int iscsi_session_get(struct iscsi_context *ctx, uint32_t sid, ++ struct iscsi_session **se) { ++ return _iscsi_session_get(ctx, sid, se, true); ++} ++ + int iscsi_sessions_get(struct iscsi_context *ctx, + struct iscsi_session ***sessions, + uint32_t *session_count) +@@ -265,7 +276,7 @@ int iscsi_sessions_get(struct iscsi_context *ctx, + + for (i = 0; i < *session_count; ++i) { + _debug(ctx, "sid %" PRIu32, sids[i]); +- rc = iscsi_session_get(ctx, sids[i], &((*sessions)[j])); ++ rc = _iscsi_session_get(ctx, sids[i], &((*sessions)[j]), false); + if (rc == LIBISCSI_OK) { + /* if session info was successfully read from sysfs, advance the sessions pointer */ + j++; +-- +2.26.2 + diff --git a/SPECS/iscsi-initiator-utils.spec b/SPECS/iscsi-initiator-utils.spec index f837753..d4b93c9 100644 --- a/SPECS/iscsi-initiator-utils.spec +++ b/SPECS/iscsi-initiator-utils.spec @@ -1,6 +1,6 @@ -%global open_iscsi_version 2.0 -%global open_iscsi_build 878 -%global commit0 d791ce020673381cf3b559866d1f61e0411126a6 +%global open_iscsi_version 2.1 +%global open_iscsi_build 2 +%global commit0 a8fcb3737cabcf79a3a3663f43930a158d606782 %global shortcommit0 %(c=%{commit0}; echo ${c:0:7}) %if 0%{?rhel} > 7 @@ -13,7 +13,7 @@ Summary: iSCSI daemon and utility programs Name: iscsi-initiator-utils Version: 6.%{open_iscsi_version}.%{open_iscsi_build} -Release: 5.git%{shortcommit0}%{?dist} +Release: 1.git%{shortcommit0}%{?dist} Group: System Environment/Daemons License: GPLv2+ URL: http://www.open-iscsi.org @@ -21,7 +21,7 @@ Source0: https://github.com/open-iscsi/open-iscsi/archive/%{commit0}.tar.gz#/ope Source4: 04-iscsi Source5: iscsi-tmpfiles.conf -Patch0001: 0001-service-file-tweaks.patch +Patch0001: 0001-unit-file-tweaks.patch Patch0002: 0002-idmb_rec_write-check-for-tpgt-first.patch Patch0003: 0003-idbm_rec_write-seperate-old-and-new-style-writes.patch Patch0004: 0004-idbw_rec_write-pick-tpgt-from-existing-record.patch @@ -41,22 +41,25 @@ Patch0017: 0017-dont-install-scripts.patch Patch0018: 0018-use-var-lib-iscsi-in-libopeniscsiusr.patch Patch0019: 0019-Coverity-scan-fixes.patch Patch0020: 0020-fix-upstream-build-breakage-of-iscsiuio-LDFLAGS.patch -Patch0021: 0021-improve-systemd-service-files-for-boot-session-handl.patch -Patch0022: 0022-use-Red-Hat-version-string-to-match-RPM-package-vers.patch -Patch0023: 0001-configuration-support-for-CHAP-algorithms.patch -Patch0024: 0001-Fix-bug-with-libopeniscsiusr.pc.patch -Patch0026: 0001-Revert-Out-of-bounds-read-Overrunning-array-of-8-2-b.patch +Patch0021: 0021-use-Red-Hat-version-string-to-match-RPM-package-vers.patch +Patch0022: 0022-iscsi_if.h-replace-zero-length-array-with-flexible-a.patch +Patch0023: 0023-stop-using-Werror-for-now.patch +Patch0024: 0024-libopeniscsiusr-fix-error-messages.patch +Patch0025: 0025-libopeniscsiusr-skip-over-removed-sessions.patch +Patch0026: 0026-libopeniscsiusr-dont-error-loudly-if-a-session-isn-t.patch BuildRequires: flex bison doxygen kmod-devel systemd-units BuildRequires: autoconf automake libtool libmount-devel openssl-devel BuildRequires: isns-utils-devel BuildRequires: systemd-devel -# For dir ownership Requires: %{name}-iscsiuio >= %{version}-%{release} Requires(post): systemd Requires(preun): systemd Requires(postun): systemd +# Old NetworkManager expects the dispatcher scripts in a different place +Conflicts: NetworkManager < 1.20 + %global _hardened_build 1 %global __provides_exclude_from ^(%{python2_sitearch}/.*\\.so|%{python3_sitearch}/.*\\.so)$ @@ -69,21 +72,21 @@ Protocol networks. # I don't think we're ready to expose these just yet # For now just add the needed library to the base package -#%package -n libopeniscsiusr +#%%package -n libopeniscsiusr #Summary: library providing access to Open-iSCSI initiator functionality #Group: Development/Libraries #License: BSD -#%description -n libopeniscsiusr +#%%description -n libopeniscsiusr #The libopeniscsiusr library provides a C API for access to the Open-iSCSI #initiator. It is used by the Open-iSCSI command line tools. -#%package -n libopeniscsiusr-devel +#%%package -n libopeniscsiusr-devel #Summary: Development files for libopeniscsiusr #Group: Development/Libraries -#Requires: libopeniscsiusr = %{version}-%{release} +#Requires: libopeniscsiusr = %%{version}-%%{release} -#%description -n libopeniscsiusr-devel +#%%description -n libopeniscsiusr-devel #The libopeniscsiusr-devel package contains libraries and header files for #developing applications that use libopeniscsiusr. @@ -118,7 +121,8 @@ BuildRequires: python2-setuptools %description -n python2-%{name} The %{name}-python2 package contains Python %{python2_version} bindings to the libiscsi interface for interacting with %{name} -%endif # with python2 +%endif +# ended with python2 %package -n python3-%{name} %{?python_provide:%python_provide python3-%{name}} @@ -151,7 +155,8 @@ cd .. pushd libiscsi %if %{with python2} %py2_build -%endif # with python2 +%endif +# ended with python2 %py3_build touch -r libiscsi.doxy html/* popd @@ -160,7 +165,7 @@ popd %install %{__make} DESTDIR=%{?buildroot} install_programs install_doc install_etc install_libopeniscsiusr # upstream makefile doesn't get everything the way we like it -#rm $RPM_BUILD_ROOT%{_sbindir}/iscsi_discovery +#rm $RPM_BUILD_ROOT%%{_sbindir}/iscsi_discovery rm $RPM_BUILD_ROOT%{_mandir}/man8/iscsi_discovery.8 rm $RPM_BUILD_ROOT%{_mandir}/man8/iscsi_fw_login.8 %{__install} -pm 755 usr/iscsistart $RPM_BUILD_ROOT%{_sbindir} @@ -178,12 +183,13 @@ rm $RPM_BUILD_ROOT%{_mandir}/man8/iscsi_fw_login.8 %{__install} -d $RPM_BUILD_ROOT%{_sharedstatedir}/iscsi/ifaces # for %%ghost -%{__install} -d $RPM_BUILD_ROOT/var/lock/iscsi -touch $RPM_BUILD_ROOT/var/lock/iscsi/lock +%{__install} -d $RPM_BUILD_ROOT%{_rundir}/lock/iscsi +touch $RPM_BUILD_ROOT%{_rundir}/lock/iscsi/lock %{__install} -d $RPM_BUILD_ROOT%{_unitdir} %{__install} -pm 644 etc/systemd/iscsi.service $RPM_BUILD_ROOT%{_unitdir} +# %%{__install} -pm 644 etc/systemd/iscsi-init.service $RPM_BUILD_ROOT%%{_unitdir} %{__install} -pm 644 etc/systemd/iscsi-onboot.service $RPM_BUILD_ROOT%{_unitdir} %{__install} -pm 644 etc/systemd/iscsi-shutdown.service $RPM_BUILD_ROOT%{_unitdir} %{__install} -pm 644 etc/systemd/iscsid.service $RPM_BUILD_ROOT%{_unitdir} @@ -194,8 +200,8 @@ touch $RPM_BUILD_ROOT/var/lock/iscsi/lock %{__install} -d $RPM_BUILD_ROOT%{_libexecdir} %{__install} -pm 755 etc/systemd/iscsi-mark-root-nodes $RPM_BUILD_ROOT%{_libexecdir} -%{__install} -d $RPM_BUILD_ROOT%{_sysconfdir}/NetworkManager/dispatcher.d -%{__install} -pm 755 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/NetworkManager/dispatcher.d +%{__install} -d $RPM_BUILD_ROOT%{_prefix}/lib/NetworkManager/dispatcher.d +%{__install} -pm 755 %{SOURCE4} $RPM_BUILD_ROOT%{_prefix}/lib/NetworkManager/dispatcher.d %{__install} -d $RPM_BUILD_ROOT%{_tmpfilesdir} %{__install} -pm 644 %{SOURCE5} $RPM_BUILD_ROOT%{_tmpfilesdir}/iscsi.conf @@ -208,12 +214,14 @@ touch $RPM_BUILD_ROOT/var/lock/iscsi/lock %if %{with python2} %{__install} -d $RPM_BUILD_ROOT%{python2_sitearch} -%endif # with python2 +%endif +# ended with python2 %{__install} -d $RPM_BUILD_ROOT%{python3_sitearch} pushd libiscsi %if %{with python2} %py2_install -%endif # with python2 +%endif +# ended with python2 %py3_install popd @@ -293,15 +301,15 @@ fi %dir %{_sharedstatedir}/iscsi/slp %dir %{_sharedstatedir}/iscsi/ifaces %dir %{_sharedstatedir}/iscsi/send_targets -%ghost %{_var}/lock/iscsi -%ghost %{_var}/lock/iscsi/lock +%ghost %{_rundir}/lock/iscsi %{_unitdir}/iscsi.service %{_unitdir}/iscsi-onboot.service +# %%{_unitdir}/iscsi-init.service %{_unitdir}/iscsi-shutdown.service %{_unitdir}/iscsid.service %{_unitdir}/iscsid.socket %{_libexecdir}/iscsi-mark-root-nodes -%{_sysconfdir}/NetworkManager/dispatcher.d/04-iscsi +%{_prefix}/lib/NetworkManager %{_tmpfilesdir}/iscsi.conf %dir %{_sysconfdir}/iscsi %attr(0600,root,root) %config(noreplace) %{_sysconfdir}/iscsi/iscsid.conf @@ -320,19 +328,20 @@ fi %exclude %{_includedir}/libopeniscsiusr.h %exclude %{_includedir}/libopeniscsiusr_common.h %exclude %{_includedir}/libopeniscsiusr_iface.h +%exclude %{_includedir}/libopeniscsiusr_node.h %exclude %{_includedir}/libopeniscsiusr_session.h %exclude %{_libdir}/pkgconfig/libopeniscsiusr.pc -# %files -n libopeniscsiusr -# %{_libdir}/libopeniscsiusr.so.* +# %%files -n libopeniscsiusr +# %%{_libdir}/libopeniscsiusr.so.* # -# %files -n libopeniscsiusr-devel -# %{_libdir}/libopeniscsiusr.so -# %{_includedir}/libopeniscsiusr.h -# %{_includedir}/libopeniscsiusr_common.h -# %{_includedir}/libopeniscsiusr_iface.h -# %{_includedir}/libopeniscsiusr_session.h -# %{_libdir}/pkgconfig/libopeniscsiusr.pc +# %%files -n libopeniscsiusr-devel +# %%{_libdir}/libopeniscsiusr.so +# %%{_includedir}/libopeniscsiusr.h +# %%{_includedir}/libopeniscsiusr_common.h +# %%{_includedir}/libopeniscsiusr_iface.h +# %%{_includedir}/libopeniscsiusr_session.h +# %%{_libdir}/pkgconfig/libopeniscsiusr.pc %files iscsiuio %{_sbindir}/iscsiuio @@ -349,12 +358,16 @@ fi %if %{with python2} %files -n python2-%{name} %{python2_sitearch}/* -%endif # with python2 +%endif +# ended with python2 %files -n python3-%{name} %{python3_sitearch}/* %changelog +* Fri Mar 12 2021 Chris Leech - 6.2.1.2-1.gita8fcb37 +- 1924768 iscsiadm -m sessions fails when racing against session login/logout + * Thu Aug 20 2020 Chris Leech - 6.2.0.878-5.gitd791ce0 - 1849931, 1869438 go back to MD5 CHAP only by default new CHAP modes can cause issue with some targets,