Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package booth for openSUSE:Factory checked in at 2023-05-25 23:52:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/booth (Old) and /work/SRC/openSUSE:Factory/.booth.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "booth" Thu May 25 23:52:43 2023 rev:51 rq:1089002 version:1.0+20221117.9d4029a Changes: -------- --- /work/SRC/openSUSE:Factory/booth/booth.changes 2022-09-13 15:11:35.393014362 +0200 +++ /work/SRC/openSUSE:Factory/.booth.new.1533/booth.changes 2023-05-25 23:52:55.387747094 +0200 @@ -1,0 +2,15 @@ +Thu Mar 16 14:30:15 UTC 2023 - vark...@suse.com + +- Update to version 1.0+20221117.9d4029a: + * man: Add generated html files into gitignore + * man: remove literal paragraph format from boothd.8 + * man: Remove italic bold formatting + * man: Do not format __defaults__ + * man: Indent peers counters + * man: Move debug description to better place + * test: Add test for unknown/unexpected keyword + * config: Include protocol in error message + * config: Include keyword in error message + * unit file: Remove Alias directive + +------------------------------------------------------------------- Old: ---- booth-1.0+20220815.f40c2d5.tar.bz2 New: ---- booth-1.0+20221117.9d4029a.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ booth.spec ++++++ --- /var/tmp/diff_new_pack.tgsc4V/_old 2023-05-25 23:52:55.831749700 +0200 +++ /var/tmp/diff_new_pack.tgsc4V/_new 2023-05-25 23:52:55.835749723 +0200 @@ -1,7 +1,7 @@ # # spec file for package booth # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -29,7 +29,7 @@ %define _fwdefdir %{_prefix}/lib/firewalld/services Name: booth -Version: 1.0+20220815.f40c2d5 +Version: 1.0+20221117.9d4029a Release: 0 Summary: Ticket Manager for Multi-site Clusters License: GPL-2.0-or-later ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.tgsc4V/_old 2023-05-25 23:52:55.879749982 +0200 +++ /var/tmp/diff_new_pack.tgsc4V/_new 2023-05-25 23:52:55.883750005 +0200 @@ -3,6 +3,6 @@ <param name="url">git://github.com/ClusterLabs/booth.git</param> <param name="changesrevision">da79b8ba28ad4837a0fee13e5f8fb6f89fe0e24c</param></service><service name="tar_scm"> <param name="url">https://github.com/ClusterLabs/booth.git</param> - <param name="changesrevision">86f060980f1f59c3885dfdb3b17866f6fb77d6ad</param></service></servicedata> + <param name="changesrevision">f30b811c745d441e7bd8856a4d18279164784dfb</param></service></servicedata> (No newline at EOF) ++++++ booth-1.0+20220815.f40c2d5.tar.bz2 -> booth-1.0+20221117.9d4029a.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20220815.f40c2d5/.gitignore new/booth-1.0+20221117.9d4029a/.gitignore --- old/booth-1.0+20220815.f40c2d5/.gitignore 2022-08-15 20:55:38.000000000 +0200 +++ new/booth-1.0+20221117.9d4029a/.gitignore 2022-11-17 00:04:13.000000000 +0100 @@ -23,6 +23,7 @@ conf/booth*.service docs/*.8 +docs/*.8.html script/service-runnable script/unit-test.py src/b_config.h.in diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20220815.f40c2d5/conf/bo...@.service.in new/booth-1.0+20221117.9d4029a/conf/bo...@.service.in --- old/booth-1.0+20220815.f40c2d5/conf/bo...@.service.in 2022-08-15 20:55:38.000000000 +0200 +++ new/booth-1.0+20221117.9d4029a/conf/bo...@.service.in 2022-11-17 00:04:13.000000000 +0100 @@ -8,7 +8,6 @@ Conflicts=pacemaker.service [Install] -Alias=boothd WantedBy=multi-user.target [Service] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20220815.f40c2d5/docs/booth-keygen.8.txt new/booth-1.0+20221117.9d4029a/docs/booth-keygen.8.txt --- old/booth-1.0+20220815.f40c2d5/docs/booth-keygen.8.txt 2022-08-15 20:55:38.000000000 +0200 +++ new/booth-1.0+20221117.9d4029a/docs/booth-keygen.8.txt 2022-11-17 00:04:13.000000000 +0100 @@ -22,7 +22,7 @@ PARAMETERS ---------- -*'auth-file'*:: +'auth-file':: The file to contain the generated key. Defaults to '/etc/booth/authkey'. Use absolute paths. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20220815.f40c2d5/docs/boothd.8.txt new/booth-1.0+20221117.9d4029a/docs/boothd.8.txt --- old/booth-1.0+20220815.f40c2d5/docs/boothd.8.txt 2022-08-15 20:55:38.000000000 +0200 +++ new/booth-1.0+20221117.9d4029a/docs/boothd.8.txt 2022-11-17 00:04:13.000000000 +0100 @@ -66,9 +66,9 @@ *-s*:: Site address or name. + - The special value 'other' can be used to specify the other - site. Obviously, in that case, the booth configuration must - have exactly two sites defined. +The special value 'other' can be used to specify the other +site. Obviously, in that case, the booth configuration must +have exactly two sites defined. *-F*:: 'immediate grant': Don't wait for unreachable sites to @@ -78,10 +78,10 @@ which is currently granted. See the 'Manual tickets' section below for more details. + - This option may be DANGEROUS. It makes booth grant the ticket - even though it cannot ascertain that unreachable sites don't - hold the same ticket. It is up to the user to make sure that - unreachable sites don't have this ticket as granted. +This option may be DANGEROUS. It makes booth grant the ticket +even though it cannot ascertain that unreachable sites don't +hold the same ticket. It is up to the user to make sure that +unreachable sites don't have this ticket as granted. *-w*:: 'wait for the request outcome': The client waits for the @@ -119,13 +119,13 @@ argument determines the mode of operation. -*'daemon'*:: +'daemon':: Tells 'boothd' to serve a site. The locally configured interfaces are searched for an IP address that is defined in the configuration. booth then runs in either /arbitrator/ or /site/ mode. -*'client'*:: +'client':: Booth clients can list the ticket information (see also 'crm_ticket -L'), and revoke or grant tickets to a site. + @@ -147,13 +147,13 @@ Use '-s' to direct client to connect to a different site. -*'status'*:: +'status':: 'boothd' looks for the (locked) PID file and the UDP socket, prints some output to stdout (for use in shell scripts) and returns an OCF-compatible return code. With '-D', a human-readable message is printed to STDERR as well. -*'peers'*:: +'peers':: List the other 'boothd' servers we know about. + In addition to the type, name (IP address), and the last time the @@ -163,22 +163,22 @@ packets. The first counter is the total number of packets and descriptions of the other counters follows: -'resends':: +'resends';; Packets which had to be resent because the recipient didn't acknowledge a message. This usually means that either the message or the acknowledgement got lost. The number of resends usually reflect the network reliability. -'error':: +'error';; Packets which either couldn't be sent, got truncated, or were badly formed. Should be zero. -'invalid':: +'invalid';; These packets contain either invalid or non-existing ticket name or refer to a non-existing ticket leader. Should be zero. -'authfail':: +'authfail';; Packets which couldn't be authenticated. Should be zero. CONFIGURATION FILE @@ -202,17 +202,17 @@ The following key/value pairs are defined: -*'port'*:: +'port':: The UDP/TCP port to use. Default is '9929'. -*'transport'*:: +'transport':: The transport protocol to use for Raft exchanges. Currently only UDP is supported. + Clients use TCP to communicate with a daemon; Booth will always bind and listen to both UDP and TCP ports. -*'authfile'*:: +'authfile':: File containing the authentication key. The key can be either binary or text. If the latter, then both leading and trailing white space, including new lines, is ignored. This key is a @@ -220,7 +220,7 @@ servers. The key must be between 8 and 64 characters long and be readable only by the file owner. -*'maxtimeskew'*:: +'maxtimeskew':: As protection against replay attacks, packets contain generation timestamps. Such a timestamp is not allowed to be too old. Just how old can be specified with this parameter. @@ -230,11 +230,16 @@ parameter to a higher value. The time skew test is performed only in concert with authentication. -*'site'*:: +'debug':: + Specifies the debug output level. Alternative to + command line argument. Effective only for 'daemon' + mode of operation. + +'site':: Defines a site Raft member with the given IP. Sites can acquire tickets. The sites' IP should be managed by the cluster. -*'arbitrator'*:: +'arbitrator':: Defines an arbitrator Raft member with the given IP. Arbitrators help reach consensus in elections and cannot hold tickets. @@ -242,31 +247,31 @@ Booth needs at least three members for normal operation. Odd number of members provides more redundancy. -*'site-user'*, *'site-group'*, *'arbitrator-user'*, *'arbitrator-group'*:: +'site-user', 'site-group', 'arbitrator-user', 'arbitrator-group':: These define the credentials 'boothd' will be running with. + On a (Pacemaker) site the booth process will have to call 'crm_ticket', so the default is to use 'hacluster':'haclient'; for an arbitrator this user and group might not exists, so there we default to 'nobody':'nobody'. -*'ticket'*:: +'ticket':: Registers a ticket. Multiple tickets can be handled by single Booth instance. + -Use the special ticket name '__defaults__' to modify the -defaults. The '__defaults__' stanza must precede all the other +Use the special ticket name `__defaults__` to modify the +defaults. The `__defaults__` stanza must precede all the other ticket specifications. All times are in seconds. -*'expire'*:: +'expire':: The lease time for a ticket. After that time the ticket can be acquired by another site if the ticket holder is not reachable. + The default is '600'. -*'acquire-after'*:: +'acquire-after':: Once a ticket is lost, wait this time in addition before acquiring the ticket. + @@ -278,7 +283,7 @@ + The default is '0'. -*'renewal-freq'*:: +'renewal-freq':: Set the ticket renewal frequency period. + If the network reliability is often reduced over prolonged @@ -289,14 +294,14 @@ 'renewal-freq' parameter is effectively also the local cluster monitoring interval. -*'timeout'*:: +'timeout':: After that time 'booth' will re-send packets if there was an insufficient number of replies. This should be long enough to allow packets to reach other members. + The default is '5'. -*'retries'*:: +'retries':: Defines how many times to retry sending packets before giving up waiting for acks from other members. + @@ -304,18 +309,18 @@ + Ticket renewals should allow for this number of retries. Hence, the total retry time must be shorter than the renewal time -(either half the expire time or *'renewal-freq'*): +(either half the expire time or 'renewal-freq'): timeout*(retries+1) < renewal -*'weights'*:: +'weights':: A comma-separated list of integers that define the weight of individual Raft members, in the same order as the 'site' and 'arbitrator' lines. + Default is '0' for all; this means that the order in the configuration file defines priority for conflicting requests. -*'before-acquire-handler'*:: +'before-acquire-handler':: If set, this parameter specifies either a file containing a program to be run or a directory where a number of programs can reside. They are invoked before 'boothd' tries to acquire @@ -337,7 +342,7 @@ The distributed 'service-runnable' script is an example which may be used to test whether a pacemaker resource can be started. -*'attr-prereq'*:: +'attr-prereq':: Sites can have GEO attributes managed with the 'geostore(8)' program. Attributes are within ticket's scope and may be tested by 'boothd' for additional control of ticket failover @@ -369,18 +374,13 @@ Note that there can be no guarantee on whether an attribute value is up to date, i.e. if it actually reflects the current state. -*'mode'*:: +'mode':: Specifies if the ticket is manual or automatic. + By default all tickets are automatic (that is, they are fully controlled by Raft algorithm). Assign the strings "manual" or "MANUAL" to define the ticket as manually controlled. -*'debug'*:: - Specifies the debug output level. Alternative to - command line argument. Effective only for 'daemon' - mode of operation. - One example of a booth configuration file: ----------------------- @@ -470,19 +470,19 @@ The following environment variables are exported to the handler: -*'BOOTH_TICKET':: +'BOOTH_TICKET':: The ticket name, as given in the configuration file. (See 'ticket' item above.) -*'BOOTH_LOCAL':: +'BOOTH_LOCAL':: The local site name, as defined in 'site'. -*'BOOTH_CONF_PATH':: +'BOOTH_CONF_PATH':: The path to the active configuration file. -*'BOOTH_CONF_NAME':: +'BOOTH_CONF_NAME':: The configuration name, as used by the '-c' commandline argument. -*'BOOTH_TICKET_EXPIRES':: +'BOOTH_TICKET_EXPIRES':: When the ticket expires (in seconds since 1.1.1970), or '0'. The handler is invoked with positional arguments specified after @@ -491,14 +491,14 @@ FILES ----- -*'/etc/booth/booth.conf'*:: +'/etc/booth/booth.conf':: The default configuration file name. See also the '-c' argument. -*'/etc/booth/authkey'*:: +'/etc/booth/authkey':: There is no default, but this is a typical location for the shared secret (authentication key). -*'/var/run/booth/'*:: +'/var/run/booth/':: Directory that holds PID/lock files. See also the 'status' command. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20220815.f40c2d5/docs/geostore.8.txt new/booth-1.0+20221117.9d4029a/docs/geostore.8.txt --- old/booth-1.0+20220815.f40c2d5/docs/geostore.8.txt 2022-08-15 20:55:38.000000000 +0200 +++ new/booth-1.0+20221117.9d4029a/docs/geostore.8.txt 2022-11-17 00:04:13.000000000 +0100 @@ -82,22 +82,22 @@ COMMANDS -------- -*'set'*:: +'set':: Sets the attribute to the value. -*'get'*:: +'get':: Get the attribute value and print it to 'stdout'. If the attribute doesn't exist, appropriate error message is printed to 'stderr'. -*'delete'*:: +'delete':: Delete the attribute. If the attribute doesn't exist, appropriate error message is printed to 'stderr'. -*'list'*:: +'list':: List all attributes and their values stored at the site. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20220815.f40c2d5/src/config.c new/booth-1.0+20221117.9d4029a/src/config.c --- old/booth-1.0+20220815.f40c2d5/src/config.c 2022-08-15 20:55:38.000000000 +0200 +++ new/booth-1.0+20221117.9d4029a/src/config.c 2022-11-17 00:04:13.000000000 +0100 @@ -541,6 +541,7 @@ int read_config(const char *path, int type) { char line[1024]; + char error_str_buf[1024]; FILE *fp; char *s, *key, *val, *end_of_key; const char *error; @@ -698,7 +699,9 @@ else if (strcasecmp(val, "SCTP") == 0) booth_conf->proto = SCTP; else { - error = "invalid transport protocol"; + (void)snprintf(error_str_buf, sizeof(error_str_buf), + "invalid transport protocol \"%s\"", val); + error = error_str_buf; goto err; } got_transport = 1; @@ -788,7 +791,9 @@ * we don't know to which ticket the key refers */ if (!current_tk) { - error = "Unexpected keyword"; + (void)snprintf(error_str_buf, sizeof(error_str_buf), + "Unexpected keyword \"%s\"", key); + error = error_str_buf; goto err; } @@ -868,7 +873,9 @@ continue; } - error = "Unknown keyword"; + (void)snprintf(error_str_buf, sizeof(error_str_buf), + "Unknown keyword \"%s\"", key); + error = error_str_buf; goto err; } fclose(fp); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/booth-1.0+20220815.f40c2d5/test/servertests.py new/booth-1.0+20221117.9d4029a/test/servertests.py --- old/booth-1.0+20220815.f40c2d5/test/servertests.py 2022-08-15 20:55:38.000000000 +0200 +++ new/booth-1.0+20221117.9d4029a/test/servertests.py 2022-11-17 00:04:13.000000000 +0100 @@ -110,7 +110,7 @@ config = re.sub('transport=.+', 'transport=SNEAKERNET', self.typical_config) (pid, ret, stdout, stderr, runner) = \ self.run_booth(config_text=config, expected_exitcode=1, expected_daemon=False) - self.assertRegexpMatches(stderr, 'invalid transport protocol') + self.assertRegexpMatches(stderr, 'invalid transport protocol "SNEAKERNET"') def test_missing_final_newline(self): config = re.sub('\n$', '', self.working_config) @@ -147,3 +147,17 @@ config = re.sub('#(.+147.+)', lambda m: m.group(1), self.working_config) self.run_booth(config_text=config, expected_exitcode=None, expected_daemon=False) + + def test_unknown_keyword(self): + # Test unexpected keyword before tickets definition + keyword='unknown-keyword' + config = re.sub('transport=', keyword + '=', self.typical_config) + (pid, ret, stdout, stderr, runner) = \ + self.run_booth(config_text=config, expected_exitcode=1, expected_daemon=False) + self.assertRegexpMatches(stderr, 'Unexpected keyword "' + keyword + '"') + + # Test unexpected keyword in tickets definition + config = re.sub('\n$', '\n' + keyword + '=value', self.typical_config) + (pid, ret, stdout, stderr, runner) = \ + self.run_booth(config_text=config, expected_exitcode=1, expected_daemon=False) + self.assertRegexpMatches(stderr, 'Unknown keyword "' + keyword + '"')