Hello community, here is the log from the commit of package corosync for openSUSE:Leap:15.2 checked in at 2020-03-23 07:13:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:15.2/corosync (Old) and /work/SRC/openSUSE:Leap:15.2/.corosync.new.3160 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "corosync" Mon Mar 23 07:13:21 2020 rev:72 rq:787025 version:2.4.5 Changes: -------- --- /work/SRC/openSUSE:Leap:15.2/corosync/corosync.changes 2020-01-15 14:50:54.889433419 +0100 +++ /work/SRC/openSUSE:Leap:15.2/.corosync.new.3160/corosync.changes 2020-03-23 07:13:38.802489638 +0100 @@ -1,0 +2,8 @@ +Fri Mar 20 14:33:29 UTC 2020 - XinLiang <[email protected]> + +- Fix bsc#1163460 Corosync does not support link-local IPv6 addresses + Added: bug-1163460-totemip-Add-support-for-sin6_scope_id.patch +- Fix bsc#1166899, return value of "corosync-quorumtool -s" was not correct + Added: bug-1166899-quorumtool-Fix-exit-status-codes.patch + +------------------------------------------------------------------- New: ---- bug-1163460-totemip-Add-support-for-sin6_scope_id.patch bug-1166899-quorumtool-Fix-exit-status-codes.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ corosync.spec ++++++ --- /var/tmp/diff_new_pack.tF9e04/_old 2020-03-23 07:13:39.302489938 +0100 +++ /var/tmp/diff_new_pack.tF9e04/_new 2020-03-23 07:13:39.302489938 +0100 @@ -64,6 +64,8 @@ Patch7: corosync-2.3.4-fix-bashisms.patch Patch8: corosync-init-lockfile-path-error.patch Patch9: corosync-start-stop-level.patch +Patch10: bug-1163460-totemip-Add-support-for-sin6_scope_id.patch +Patch11: bug-1166899-quorumtool-Fix-exit-status-codes.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build # openais is indeed gone and should be uninstalled. Yes, we do not @@ -138,6 +140,8 @@ %patch7 -p1 %patch8 -p1 %patch9 -p1 +%patch10 -p1 +%patch11 -p1 %build %if %{with runautogen} ++++++ bug-1163460-totemip-Add-support-for-sin6_scope_id.patch ++++++ >From 36938e24a8d03f9b8fc97768ed08df36e63f61d0 Mon Sep 17 00:00:00 2001 From: liangxin1300 <[email protected]> Date: Mon, 17 Feb 2020 22:24:31 +0800 Subject: [PATCH] totemip: Add support for sin6_scope_id sin6_scope_id was not present in totemip structure making impossible to use link-local ipv6 address. Patch adds sin6_scope_id and changes convert/copy functions to use it (formally also comparator functions should be changed, but it seems to cause more harm and it is not really needed). This makes corosync work with link-local addresses fine for both UDPU and UDP transport as long as interface specification is used (so fe80::xxxx:xxxx:xxxx:xxxx%eth0). (backported from master 934c47ed4384daf2819c26306bebba3225807499) Signed-off-by: liangxin1300 <[email protected]> Reviewed-by: Jan Friesse <[email protected]> --- exec/totemip.c | 15 +++++++++++---- include/corosync/coroapi.h | 1 + include/corosync/totem/totemip.h | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/exec/totemip.c b/exec/totemip.c index 28a88365..d8130831 100644 --- a/exec/totemip.c +++ b/exec/totemip.c @@ -247,7 +247,7 @@ int totemip_totemip_to_sockaddr_convert(struct totem_ip_address *ip_addr, #endif sin->sin6_family = ip_addr->family; sin->sin6_port = ntohs(port); - sin->sin6_scope_id = 2; + sin->sin6_scope_id = ip_addr->sin6_scope_id; memcpy(&sin->sin6_addr, ip_addr->addr, sizeof(struct in6_addr)); *addrlen = sizeof(struct sockaddr_in6); @@ -282,10 +282,13 @@ int totemip_parse(struct totem_ip_address *totemip, const char *addr, int family sa6 = (struct sockaddr_in6 *)ainfo->ai_addr; totemip->family = ainfo->ai_family; - if (ainfo->ai_family == AF_INET) + if (ainfo->ai_family == AF_INET) { memcpy(totemip->addr, &sa->sin_addr, sizeof(struct in_addr)); - else + totemip->sin6_scope_id = 0; + } else { memcpy(totemip->addr, &sa6->sin6_addr, sizeof(struct in6_addr)); + totemip->sin6_scope_id = sa6->sin6_scope_id; + } freeaddrinfo(ainfo); return 0; @@ -304,6 +307,7 @@ int totemip_sockaddr_to_totemip_convert(const struct sockaddr_storage *saddr, const struct sockaddr_in *sin = (const struct sockaddr_in *)saddr; memcpy(ip_addr->addr, &sin->sin_addr, sizeof(struct in_addr)); + ip_addr->sin6_scope_id = 0; ret = 0; } @@ -312,7 +316,7 @@ int totemip_sockaddr_to_totemip_convert(const struct sockaddr_storage *saddr, = (const struct sockaddr_in6 *)saddr; memcpy(ip_addr->addr, &sin->sin6_addr, sizeof(struct in6_addr)); - + ip_addr->sin6_scope_id = sin->sin6_scope_id; ret = 0; } return ret; @@ -445,6 +449,9 @@ int totemip_iface_check(struct totem_ip_address *bindnet, if (addr_len == 0) continue ; + if (bindnet->sin6_scope_id != 0 && bindnet->sin6_scope_id != if_addr->interface_num) + continue; + totemip_copy(&bn_netaddr, bindnet); totemip_copy(&if_netaddr, &if_addr->ip_addr); diff --git a/include/corosync/coroapi.h b/include/corosync/coroapi.h index 7e1f27cb..00173001 100644 --- a/include/corosync/coroapi.h +++ b/include/corosync/coroapi.h @@ -112,6 +112,7 @@ struct totem_ip_address { unsigned int nodeid; unsigned short family; unsigned char addr[TOTEMIP_ADDRLEN]; + unsigned int sin6_scope_id; } __attribute__((packed)); #endif diff --git a/include/corosync/totem/totemip.h b/include/corosync/totem/totemip.h index 0168e66c..2ae0e03e 100644 --- a/include/corosync/totem/totemip.h +++ b/include/corosync/totem/totemip.h @@ -65,6 +65,7 @@ struct totem_ip_address unsigned int nodeid; unsigned short family; unsigned char addr[TOTEMIP_ADDRLEN]; + unsigned int sin6_scope_id; } __attribute__((packed)); struct totem_ip_if_address -- 2.21.1 ++++++ bug-1166899-quorumtool-Fix-exit-status-codes.patch ++++++ >From a95e28cc35e1d59cedb406914ba437e21bc3e1ea Mon Sep 17 00:00:00 2001 From: Jan Friesse <[email protected]> Date: Thu, 14 Feb 2019 16:05:59 +0100 Subject: [PATCH] quorumtool: Fix exit status codes 1. Use EXIT_SUCCESS and EXIT_FAILURE when possible 2. For -s option return EXIT_SUCCESS when no problem appeared and node is quorate, EXIT_FAILURE if problem appeared and exit code 2 (EXIT_NOT_QUORATE) when no problem appeared but node is not quorate. 3. Document exit codes in the man page Signed-off-by: Jan Friesse <[email protected]> Reviewed-by: Christine Caulfield <[email protected]> (cherry picked from commit db38e3958c4f88d5d06e8f7c83d6d90334d9fbd2) --- man/corosync-quorumtool.8 | 17 +++++++++++- tools/corosync-quorumtool.c | 53 ++++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/man/corosync-quorumtool.8 b/man/corosync-quorumtool.8 index 915f35ff..2fc4e020 100644 --- a/man/corosync-quorumtool.8 +++ b/man/corosync-quorumtool.8 @@ -31,7 +31,7 @@ .\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF .\" * THE POSSIBILITY OF SUCH DAMAGE. .\" */ -.TH COROSYNC-QUORUMTOOL 8 2012-01-12 +.TH COROSYNC-QUORUMTOOL 8 2019-02-14 .SH NAME corosync-quorumtool \- Set and display quorum settings. .SH SYNOPSIS @@ -89,6 +89,21 @@ show this help text show version and exit .PP * Starred items only work if votequorum is the quorum provider for corosync +.SH EXIT STATUS +corosync-quorumtool may return one of several error codes if it encounters problems. +.TP +0 +No problems occurred (quorate for +.B -s +operation). +.TP +1 +Generic error code. +.TP +2 +Not quorate (returned only for +.B -s +operation). .SH SEE ALSO .BR corosync_overview (8), .BR votequorum_overview (8), diff --git a/tools/corosync-quorumtool.c b/tools/corosync-quorumtool.c index e5d17b16..66ca7de5 100644 --- a/tools/corosync-quorumtool.c +++ b/tools/corosync-quorumtool.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2014 Red Hat, Inc. + * Copyright (c) 2009-2019 Red Hat, Inc. * * All rights reserved. * @@ -75,6 +75,8 @@ typedef enum { SORT_NODENAME } sorttype_t; +#define EXIT_NOT_QUORATE 2 + /* * global vars */ @@ -238,7 +240,7 @@ static int set_votes(uint32_t nodeid, int votes) votes, nodeid, cs_strerror(err)); } - return err==CS_OK?0:err; + return (err == CS_OK ? EXIT_SUCCESS : EXIT_FAILURE); } static int set_expected(int expected_votes) @@ -249,7 +251,7 @@ static int set_expected(int expected_votes) fprintf(stderr, "Unable to set expected votes: %s\n", cs_strerror(err)); } - return err==CS_OK?0:err; + return (err == CS_OK ? EXIT_SUCCESS : EXIT_FAILURE); } /* @@ -638,9 +640,9 @@ static int display_quorum_data(int is_quorate, } /* - * return 1 if quorate - * 0 if not quorate - * -1 on error + * return EXIT_SUCCESS if quorate + * EXIT_NOT_QUORATE if not quorate + * EXIT_FAILURE on error */ static int show_status(nodeid_format_t nodeid_format, name_format_t name_format, sorttype_t sort_type) { @@ -689,15 +691,15 @@ static int show_status(nodeid_format_t nodeid_format, name_format_t name_format, quorum_err: if (err != CS_OK) { - return -1; + return EXIT_FAILURE; } err = display_quorum_data(is_quorate, nodeid_format, name_format, sort_type, 0); if (err != CS_OK) { - return -1; + return EXIT_FAILURE; } - return is_quorate; + return (is_quorate ? EXIT_SUCCESS : EXIT_NOT_QUORATE); } static int monitor_status(nodeid_format_t nodeid_format, name_format_t name_format, sorttype_t sort_type) { @@ -750,7 +752,7 @@ static int monitor_status(nodeid_format_t nodeid_format, name_format_t name_form } quorum_err: - return -1; + return EXIT_FAILURE; } static int show_nodes(nodeid_format_t nodeid_format, name_format_t name_format, sorttype_t sort_type) @@ -784,23 +786,30 @@ static int unregister_qdevice(void) { int err; struct votequorum_info info; + int result; + + result = EXIT_FAILURE; err = votequorum_getinfo(v_handle, our_nodeid, &info); if (err != CS_OK) { fprintf(stderr, "Unable to get quorum device info: %s\n", cs_strerror(err)); - return -1; + goto err_exit; } if (!(info.flags & VOTEQUORUM_INFO_QDEVICE_REGISTERED)) { - return 0; + result = EXIT_SUCCESS; + goto err_exit; } err = votequorum_qdevice_unregister(v_handle, info.qdevice_name); if (err != CS_OK) { fprintf(stderr, "Unable to unregister quorum device: %s\n", cs_strerror(err)); - return -1; + goto err_exit; } - return 0; + + result = EXIT_SUCCESS; +err_exit: + return result; } /* @@ -884,7 +893,7 @@ int main (int argc, char *argv[]) { if (init_all()) { close_all(); - exit(1); + exit(EXIT_FAILURE); } while ( (opt = getopt(argc, argv, options)) != -1 ) { @@ -894,7 +903,7 @@ int main (int argc, char *argv[]) { command_opt = CMD_UNREGISTER_QDEVICE; } else { fprintf(stderr, "You cannot unregister quorum device, corosync is not using votequorum\n"); - exit(2); + exit(EXIT_FAILURE); } break; case 's': @@ -928,14 +937,14 @@ int main (int argc, char *argv[]) { } } else { fprintf(stderr, "You cannot change expected votes, corosync is not using votequorum\n"); - exit(2); + exit(EXIT_FAILURE); } break; case 'n': l = strtol(optarg, &endptr, 0); if ((l == 0 && endptr == optarg) || l < 0) { fprintf(stderr, "The nodeid was not valid, try a positive number\n"); - exit(2); + exit(EXIT_FAILURE); } nodeid = l; nodeid_set = 1; @@ -945,14 +954,14 @@ int main (int argc, char *argv[]) { votes = strtol(optarg, &endptr, 0); if ((votes == 0 && endptr == optarg) || votes < 0) { fprintf(stderr, "New votes value was not valid, try a positive number or zero\n"); - exit(2); + exit(EXIT_FAILURE); } else { command_opt = CMD_SETVOTES; } } else { fprintf(stderr, "You cannot change node votes, corosync is not using votequorum\n"); - exit(2); + exit(EXIT_FAILURE); } break; case 'o': @@ -966,7 +975,7 @@ int main (int argc, char *argv[]) { break; default: fprintf(stderr, "Invalid ordering option. valid orders are a(address), i(node ID) or n(name)\n"); - exit(2); + exit(EXIT_FAILURE); break; } break; @@ -985,7 +994,7 @@ int main (int argc, char *argv[]) { switch (command_opt) { case CMD_UNKNOWN: show_usage(argv[0]); - ret = -1; + ret = EXIT_FAILURE; break; case CMD_SHOWNODES: ret = show_nodes(nodeid_format, address_format, sort_opt); -- 2.21.1
