From 84e890c0d6de1704ce02366a993587337c8d3f1f Mon Sep 17 00:00:00 2001 From: jiangxinyu Date: Thu, 5 Nov 2020 17:58:26 +0800 Subject: [PATCH] Init booth project --- ...rfluous-shebangs-for-import-only-mod.patch | 158 ++++++ ...-mix-tabs-with-spaces-in-Python-code.patch | 60 +++ ...-files-supported-_also_-with-Python-.patch | 510 ++++++++++++++++++ ...e-Python-invocations-in-the-shebangs.patch | 89 +++ ...ualified-identifier-in-unittest-s-2..patch | 36 ++ ...drop-comment-out-superfluous-imports.patch | 90 ++++ ...ngerous-mutable-sticky-default-value.patch | 178 ++++++ ...y-daemon-will-not-stay-in-foreground.patch | 41 ++ ...ncpy-may-miss-trailing-null-byte-war.patch | 50 ++ booth-f2d38ce.tar.gz | Bin 0 -> 141520 bytes booth.spec | 277 ++++++++++ 11 files changed, 1489 insertions(+) create mode 100644 0000-test-remove-superfluous-shebangs-for-import-only-mod.patch create mode 100644 0001-test-do-not-mix-tabs-with-spaces-in-Python-code.patch create mode 100644 0002-test-make-Python-files-supported-_also_-with-Python-.patch create mode 100644 0003-build-parametrize-Python-invocations-in-the-shebangs.patch create mode 100644 0004-test-drop-underqualified-identifier-in-unittest-s-2..patch create mode 100644 0005-test-drop-comment-out-superfluous-imports.patch create mode 100644 0006-test-avoid-dangerous-mutable-sticky-default-value.patch create mode 100644 0007-test-unit-test.py-daemon-will-not-stay-in-foreground.patch create mode 100644 0008-Refactor-fix-strncpy-may-miss-trailing-null-byte-war.patch create mode 100644 booth-f2d38ce.tar.gz create mode 100644 booth.spec diff --git a/0000-test-remove-superfluous-shebangs-for-import-only-mod.patch b/0000-test-remove-superfluous-shebangs-for-import-only-mod.patch new file mode 100644 index 0000000..d53772f --- /dev/null +++ b/0000-test-remove-superfluous-shebangs-for-import-only-mod.patch @@ -0,0 +1,158 @@ +From 9469ffc2d58a5673fffae8778b9c48f5605dda6a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Tue, 10 Jul 2018 18:41:18 +0200 +Subject: [PATCH] test: remove superfluous shebangs for import-only modules +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Consequently, there's no reason to have the affected files marked as +executable. + +Signed-off-by: Jan Pokorný +--- + test/arbtests.py | 2 -- + test/assertions.py | 2 -- + test/boothrunner.py | 2 -- + test/boothtestenv.py | 2 -- + test/clientenv.py | 2 -- + test/clienttests.py | 2 -- + test/serverenv.py | 2 -- + test/servertests.py | 2 -- + test/sitetests.py | 2 -- + test/utils.py | 2 -- + 10 files changed, 20 deletions(-) + mode change 100755 => 100644 test/arbtests.py + mode change 100755 => 100644 test/assertions.py + mode change 100755 => 100644 test/boothrunner.py + mode change 100755 => 100644 test/boothtestenv.py + mode change 100755 => 100644 test/clientenv.py + mode change 100755 => 100644 test/clienttests.py + mode change 100755 => 100644 test/serverenv.py + mode change 100755 => 100644 test/servertests.py + mode change 100755 => 100644 test/sitetests.py + mode change 100755 => 100644 test/utils.py + +diff --git a/test/arbtests.py b/test/arbtests.py +old mode 100755 +new mode 100644 +index caba010..ef7b7f9 +--- a/test/arbtests.py ++++ b/test/arbtests.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + from servertests import ServerTests + + class ArbitratorConfigTests(ServerTests): +diff --git a/test/assertions.py b/test/assertions.py +old mode 100755 +new mode 100644 +index 4396ab7..0b7f995 +--- a/test/assertions.py ++++ b/test/assertions.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + import re + + class BoothAssertions: +diff --git a/test/boothrunner.py b/test/boothrunner.py +old mode 100755 +new mode 100644 +index f9154e7..d981183 +--- a/test/boothrunner.py ++++ b/test/boothrunner.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + import os + import subprocess + import time +diff --git a/test/boothtestenv.py b/test/boothtestenv.py +old mode 100755 +new mode 100644 +index 89a484a..fcd0c4d +--- a/test/boothtestenv.py ++++ b/test/boothtestenv.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + import os + import subprocess + import time +diff --git a/test/clientenv.py b/test/clientenv.py +old mode 100755 +new mode 100644 +index fcd40fa..73b2791 +--- a/test/clientenv.py ++++ b/test/clientenv.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + from boothtestenv import BoothTestEnvironment + from boothrunner import BoothRunner + +diff --git a/test/clienttests.py b/test/clienttests.py +old mode 100755 +new mode 100644 +index 61b691b..c4b9d8a +--- a/test/clienttests.py ++++ b/test/clienttests.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + import string + + from clientenv import ClientTestEnvironment +diff --git a/test/serverenv.py b/test/serverenv.py +old mode 100755 +new mode 100644 +index d0467b9..c6d4e30 +--- a/test/serverenv.py ++++ b/test/serverenv.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + import os + import re + import time +diff --git a/test/servertests.py b/test/servertests.py +old mode 100755 +new mode 100644 +index f574f26..39a6ffc +--- a/test/servertests.py ++++ b/test/servertests.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + import copy + from pprint import pprint, pformat + import re +diff --git a/test/sitetests.py b/test/sitetests.py +old mode 100755 +new mode 100644 +index dfdf6b9..6944ffe +--- a/test/sitetests.py ++++ b/test/sitetests.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + from servertests import ServerTests + + class SiteConfigTests(ServerTests): +diff --git a/test/utils.py b/test/utils.py +old mode 100755 +new mode 100644 +index ceeef98..5b70cfc +--- a/test/utils.py ++++ b/test/utils.py +@@ -1,5 +1,3 @@ +-#!/usr/bin/python +- + import subprocess + import re + +-- +2.18.0.rc2 + diff --git a/0001-test-do-not-mix-tabs-with-spaces-in-Python-code.patch b/0001-test-do-not-mix-tabs-with-spaces-in-Python-code.patch new file mode 100644 index 0000000..e495122 --- /dev/null +++ b/0001-test-do-not-mix-tabs-with-spaces-in-Python-code.patch @@ -0,0 +1,60 @@ +From a642a833e31a6bd1e71dc2045a16e494775b35e6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Thu, 12 Jul 2018 18:58:32 +0200 +Subject: [PATCH] test: do not mix tabs with spaces in Python code +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Beside being matter of a good style, it's also forbidden inside +a single, non-delimited block in Python 3. + +Signed-off-by: Jan Pokorný +--- + test/servertests.py | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/test/servertests.py b/test/servertests.py +index 39a6ffc..71e808e 100644 +--- a/test/servertests.py ++++ b/test/servertests.py +@@ -51,8 +51,8 @@ class ServerTests(ServerTestEnvironment): + config_text=self.working_config) + + def test_missing_quotes(self): +- # quotes no longer required +- return True ++ # quotes no longer required ++ return True + orig_lines = self.working_config.split("\n") + for i in xrange(len(orig_lines)): + new_lines = copy.copy(orig_lines) +@@ -97,8 +97,8 @@ class ServerTests(ServerTestEnvironment): + expected_exitcode=None, expected_daemon=True) + + def test_missing_transport(self): +- # UDP is default -- TODO? +- return True ++ # UDP is default -- TODO? ++ return True + config = re.sub('transport=.+\n', '', self.typical_config) + (pid, ret, stdout, stderr, runner) = \ + self.run_booth(config_text=config, expected_exitcode=1, expected_daemon=False) +@@ -141,10 +141,10 @@ class ServerTests(ServerTestEnvironment): + self.assertRegexpMatches(stderr, 'ticket name "' + ticket + '" invalid') + + def test_unreachable_peer(self): +- # what should this test do? daemon not expected, but no exitcode either? +- # booth would now just run, and try to reach that peer... +- # TCP reachability is not required during startup anymore. +- return True ++ # what should this test do? daemon not expected, but no exitcode either? ++ # booth would now just run, and try to reach that peer... ++ # TCP reachability is not required during startup anymore. ++ return True + config = re.sub('#(.+147.+)', lambda m: m.group(1), self.working_config) + self.run_booth(config_text=config, + expected_exitcode=None, expected_daemon=False) +-- +2.18.0.rc2 + diff --git a/0002-test-make-Python-files-supported-_also_-with-Python-.patch b/0002-test-make-Python-files-supported-_also_-with-Python-.patch new file mode 100644 index 0000000..f366aa8 --- /dev/null +++ b/0002-test-make-Python-files-supported-_also_-with-Python-.patch @@ -0,0 +1,510 @@ +From ab2229451827f530959d554920619d87daa34586 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Wed, 11 Jul 2018 16:18:25 +0200 +Subject: [PATCH] test: make Python files supported _also_ with Python 3.3+ +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +- use "print" like a function rather than a statement + . where implicit newline is to be suppressed, don't do that + and rather strip it from the string to be printed instead +- use 2+3 compatible convention for parametrizing exceptions +- Python 3 doesn't recognize "basestring" class, and at the place + of use (pre Python 2.7 only), unicode string is really not expected + (also re.UNICODE flag is not used...) +- Python 3 doesn't recognize "xrange" function, but the surrounding + code can be reasonably simplified using "enumerate" function +- arrange dict treatment in a compatible way: + . d.has_key(k) -> k in d + . d.iteritems() -> custom "iter_items", always efficient wrapper + . d.iterkeys(), here incl. lazy mapping and filtering + -> rewrite while retaining laziness + . optimize UT.merge_dicts in script/unit-test.py along +- also in three instances, deal with string/uninterpreted bytes proper + dichotomy introduced in Python 3, and related to that, "string" + module only supports "ascii_lowercase" attribute in Python 3 + (as opposed to system-specific plain "lowercase" one) + +Note that script/unit-test.py has a pre-existing issue (regardless +of which Python version interpreter is used), so at least document +that in the header for now. + +Signed-off-by: Jan Pokorný +--- + script/unit-test.py | 65 ++++++++++++++++++++++++++------------------ + test/assertions.py | 4 +-- + test/boothrunner.py | 32 ++++++++++++---------- + test/boothtestenv.py | 6 ++-- + test/clienttests.py | 4 +-- + test/runtests.py | 2 +- + test/serverenv.py | 18 ++++++------ + test/servertests.py | 10 +++---- + test/utils.py | 10 +++++-- + 9 files changed, 84 insertions(+), 67 deletions(-) + +diff --git a/script/unit-test.py b/script/unit-test.py +index 6871930..399528e 100755 +--- a/script/unit-test.py ++++ b/script/unit-test.py +@@ -1,6 +1,8 @@ + #!/usr/bin/python + # vim: fileencoding=utf-8 + # see http://stackoverflow.com/questions/728891/correct-way-to-define-python-source-code-encoding ++# NOTE: setting the encoding is needed as non-ASCII characters are contained ++# FIXME: apparently, pexpect.EOF is not being excepted properly + + import os, sys, time, signal, tempfile, socket, posix, time + import re, shutil, pexpect, logging, pprint +@@ -16,6 +18,16 @@ default_log_format = '%(asctime)s: : %(message)s' + default_log_datefmt = '%b %d %H:%M:%S' + + ++# Compatibility with dictionary methods not present in Python 3; ++# https://www.python.org/dev/peps/pep-0469/#migrating-to-the-common-subset-of-python-2-and-3 ++try: ++ dict.iteritems ++except AttributeError: # Python 3 ++ iter_items = lambda d: iter(d.items()) ++else: # Python 2 ++ iter_items = lambda d: d.iteritems() ++ ++ + # {{{ pexpect-logging glue + # needed for use as pexpect.logfile, to relay into existing logfiles + class expect_logging(): +@@ -28,9 +40,12 @@ class expect_logging(): + + def flush(self, *arg): + pass ++ + def write(self, stg): + if self.test.dont_log_expect == 0: + # TODO: split by input/output, give program ++ if sys.version_info[0] >= 3: ++ stg = str(stg, 'UTF-8') + for line in re.split(r"[\r\n]+", stg): + if line == self.test.prompt: + continue +@@ -110,7 +125,7 @@ class UT(): + res = re.match(r"^\s*(\w+)\s*:(?:\s*(#.*?\S))?\s*$", line) + if res: + state = res.group(1) +- if not m.has_key(state): ++ if state not in m: + m[state] = dict_plus() + if res.group(2): + m[state].aux["comment"] = res.group(2) +@@ -188,17 +203,15 @@ class UT(): + name = re.sub(r".*/", "", bin) + # How to get stderr, too? + expct = pexpect.spawn(bin, +- env = dict( os.environ.items() + +- [('PATH', +- self.test_base + "/bin/:" + +- os.getenv('PATH')), +- ('UNIT_TEST_PATH', self.test_base), +- ('LC_ALL', 'C'), +- ('LANG', 'C')] + +- env_add ), +- timeout = 30, +- maxread = 32768, +- **args) ++ env=dict(os.environ, **dict({ ++ 'PATH': ':'.join((self.test_base + "/bin/", ++ os.getenv('PATH'))), ++ 'UNIT_TEST_PATH': self.test_base, ++ 'LC_ALL': 'C', ++ 'LANG': 'C'}, **dict(env_add))), ++ timeout=30, ++ maxread=32768, ++ **args) + expct.setecho(False) + expct.logfile_read = expect_logging("<- %s" % name, self) + expct.logfile_send = expect_logging(" -> %s" % name, self) +@@ -361,7 +374,7 @@ class UT(): + + self.current_nr = kv.aux.get("line") + #os.system("strace -f -tt -s 2000 -e write -p" + str(self.gdb.pid) + " &") +- for n, v in kv.iteritems(): ++ for n, v in iter_items(kv): + self.set_val( self.translate_shorthand(n, "ticket"), v) + logging.info("set state") + +@@ -372,7 +385,7 @@ class UT(): + if not sys.stdin.isatty(): + logging.error("Not a terminal, stopping.") + else: +- print "\n\nEntering interactive mode.\n\n" ++ print("\n\nEntering interactive mode.\n\n") + self.gdb.sendline("set prompt GDB> \n") + self.gdb.setecho(True) + # can't use send_cmd, doesn't reply with expected prompt anymore. +@@ -415,7 +428,7 @@ class UT(): + self.send_cmd("next") + + # push message. +- for (n, v) in msg.iteritems(): ++ for (n, v) in iter_items(msg): + self.set_val( self.translate_shorthand(n, "message"), v, "htonl") + + # set "received" length +@@ -426,7 +439,7 @@ class UT(): + def wait_outgoing(self, msg): + self.wait_for_function("booth_udp_send") + ok = True +- for (n, v) in msg.iteritems(): ++ for (n, v) in iter_items(msg): + if re.search(r"\.", n): + ok = self.check_value( self.translate_shorthand(n, "inject"), v) and ok + else: +@@ -438,14 +451,12 @@ class UT(): + #stopped_at = self.sync() + + def merge_dicts(self, base, overlay): +- return dict(base.items() + overlay.items()) ++ return dict(base, **overlay) + + + def loop(self, fn, data): +- matches = map(lambda k: re.match(r"^(outgoing|message)(\d+)$", k), data.iterkeys()) +- valid_matches = filter(None, matches) +- nums = map(lambda m: int(m.group(2)), valid_matches) +- loop_max = max(nums) ++ matches = (re.match(r"^(outgoing|message)(\d+)$", k) for k in data) ++ loop_max = max(int(m.group(2)) for m in matches if m) + for counter in range(0, loop_max+1): # incl. last message + + kmsg = 'message%d' % counter +@@ -471,14 +482,14 @@ class UT(): + logging.info("ticket change %s (%s:%d) %s" % (ktkt, fn, self.current_nr, comment)) + self.set_state(tkt) + if gdb: +- for (k, v) in gdb.iteritems(): ++ for (k, v) in iter_items(gdb): + self.send_cmd(k + " " + v.replace("§", "\n")) + if msg: + self.current_nr = msg.aux.get("line") + comment = msg.aux.get("comment", "") + logging.info("sending %s (%s:%d) %s" % (kmsg, fn, self.current_nr, comment)) + self.send_message(self.merge_dicts(data["message"], msg)) +- if data.has_key(kgdb) and len(gdb) == 0: ++ if kgdb in data and len(gdb) == 0: + self.user_debug("manual override") + if out: + self.current_nr = out.aux.get("line") +@@ -520,7 +531,7 @@ class UT(): + self.let_booth_go_a_bit() + + ok = True +- for (n, v) in data.iteritems(): ++ for (n, v) in iter_items(data): + ok = self.check_value( self.translate_shorthand(n, "ticket"), v) and ok + if not ok: + sys.exit(1) +@@ -529,8 +540,8 @@ class UT(): + def run(self, start_from="000", end_with="999"): + os.chdir(self.test_base) + # TODO: sorted, random order +- tests = filter( (lambda f: re.match(r"^\d\d\d_.*\.txt$", f)), glob.glob("*")) +- tests.sort() ++ tests = sorted(f for f in glob.glob("*") ++ if re.match(r"^\d\d\d_.*\.txt$", f)) + failed = 0 + for f in tests: + if f[0:3] < start_from: +@@ -561,7 +572,7 @@ class UT(): + except: + failed += 1 + logging.error(self.colored_string("Broke in %s:%s %s" % (f, self.current_nr, sys.exc_info()), self.RED)) +- for frame in traceback.format_tb(sys.exc_traceback): ++ for frame in traceback.format_tb(sys.exc_info()[2]): + logging.info(" - %s " % frame.rstrip()) + finally: + self.stop_processes() +diff --git a/test/assertions.py b/test/assertions.py +index 0b7f995..34333ca 100644 +--- a/test/assertions.py ++++ b/test/assertions.py +@@ -21,7 +21,7 @@ class BoothAssertions: + # backported from 2.7 just in case we're running on an older Python + def assertRegexpMatches(self, text, expected_regexp, msg=None): + """Fail the test unless the text matches the regular expression.""" +- if isinstance(expected_regexp, basestring): ++ if isinstance(expected_regexp, str): + expected_regexp = re.compile(expected_regexp) + if not expected_regexp.search(text, MULTILINE): + msg = msg or "Regexp didn't match" +@@ -30,7 +30,7 @@ class BoothAssertions: + + def assertNotRegexpMatches(self, text, unexpected_regexp, msg=None): + """Fail the test if the text matches the regular expression.""" +- if isinstance(unexpected_regexp, basestring): ++ if isinstance(unexpected_regexp, str): + unexpected_regexp = re.compile(unexpected_regexp) + match = unexpected_regexp.search(text) + if match: +diff --git a/test/boothrunner.py b/test/boothrunner.py +index d981183..347912b 100644 +--- a/test/boothrunner.py ++++ b/test/boothrunner.py +@@ -1,4 +1,5 @@ + import os ++import sys + import subprocess + import time + import unittest +@@ -37,14 +38,14 @@ class BoothRunner: + + def show_output(self, stdout, stderr): + if stdout: +- print "STDOUT:" +- print "------" +- print stdout, ++ print("STDOUT:") ++ print("------") ++ print(stdout.rstrip('\n')) + if stderr: +- print "STDERR: (N.B. crm_ticket failures indicate daemon started correctly)" +- print "------" +- print stderr, +- print "-" * 70 ++ print("STDERR: (N.B. crm_ticket failures indicate daemon started correctly)") ++ print("------") ++ print(stderr.rstrip('\n')) ++ print("-" * 70) + + def subproc_completed_within(self, p, timeout): + start = time.time() +@@ -55,7 +56,7 @@ class BoothRunner: + elapsed = time.time() - start + if elapsed + wait > timeout: + wait = timeout - elapsed +- print "Waiting on %d for %.1fs ..." % (p.pid, wait) ++ print("Waiting on %d for %.1fs ..." % (p.pid, wait)) + time.sleep(wait) + elapsed = time.time() - start + if elapsed >= timeout: +@@ -83,26 +84,29 @@ class BoothRunner: + return text + + def show_args(self): +- print "\n" +- print "-" * 70 +- print "Running", ' '.join(self.all_args()) ++ print("\n") ++ print("-" * 70) ++ print("Running", ' '.join(self.all_args())) + msg = "with config from %s" % self.config_file_used() + config_text = self.config_text_used() + if config_text is not None: + msg += ": [%s]" % config_text +- print msg ++ print(msg) + + def run(self): + p = subprocess.Popen(self.all_args(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if not p: +- raise RuntimeError, "failed to start subprocess" ++ raise RuntimeError("failed to start subprocess") + +- print "Started subprocess pid %d" % p.pid ++ print("Started subprocess pid %d" % p.pid) + + completed = self.subproc_completed_within(p, 2) + + if completed: + (stdout, stderr) = p.communicate() ++ if sys.version_info[0] >= 3: ++ # only expect ASCII/UTF-8 encodings for the obtained input bytes ++ stdout, stderr = str(stdout, 'UTF-8'), str(stderr, 'UTF-8') + self.show_output(stdout, stderr) + return (p.pid, p.returncode, stdout, stderr) + +diff --git a/test/boothtestenv.py b/test/boothtestenv.py +index fcd0c4d..59e25c3 100644 +--- a/test/boothtestenv.py ++++ b/test/boothtestenv.py +@@ -17,7 +17,7 @@ class BoothTestEnvironment(unittest.TestCase, BoothAssertions): + + def setUp(self): + if not self._testMethodName.startswith('test_'): +- raise RuntimeError, "unexpected test method name: " + self._testMethodName ++ raise RuntimeError("unexpected test method name: " + self._testMethodName) + self.test_name = self._testMethodName[5:] + self.test_path = os.path.join(self.test_run_path, self.test_name) + os.makedirs(self.test_path) +@@ -54,11 +54,11 @@ class BoothTestEnvironment(unittest.TestCase, BoothAssertions): + + def check_return_code(self, pid, return_code, expected_exitcode): + if return_code is None: +- print "pid %d still running" % pid ++ print("pid %d still running" % pid) + if expected_exitcode is not None: + self.fail("expected exit code %d, not long-running process" % expected_exitcode) + else: +- print "pid %d exited with code %d" % (pid, return_code) ++ print("pid %d exited with code %d" % (pid, return_code)) + if expected_exitcode is None: + msg = "should not exit" + else: +diff --git a/test/clienttests.py b/test/clienttests.py +index c4b9d8a..512620e 100644 +--- a/test/clienttests.py ++++ b/test/clienttests.py +@@ -7,14 +7,14 @@ class ClientConfigTests(ClientTestEnvironment): + + def test_site_buffer_overflow(self): + # https://bugzilla.novell.com/show_bug.cgi?id=750256 +- longfile = (string.lowercase * 3)[:63] ++ longfile = (string.ascii_lowercase * 3)[:63] + expected_error = "'%s' exceeds maximum site name length" % longfile + args = [ 'grant', '-s', longfile, '-t', 'ticket' ] + self._test_buffer_overflow(expected_error, args=args) + + def test_ticket_buffer_overflow(self): + # https://bugzilla.novell.com/show_bug.cgi?id=750256 +- longfile = (string.lowercase * 3)[:63] ++ longfile = (string.ascii_lowercase * 3)[:63] + expected_error = "'%s' exceeds maximum ticket name length" % longfile + args = [ 'grant', '-s', 'site', '-t', longfile ] + self._test_buffer_overflow(expected_error, args=args) +diff --git a/test/runtests.py b/test/runtests.py +index 0532c01..833b1a7 100755 +--- a/test/runtests.py ++++ b/test/runtests.py +@@ -53,5 +53,5 @@ if __name__ == '__main__': + shutil.rmtree(test_run_path) + sys.exit(0) + else: +- print "Left %s for debugging" % test_run_path ++ print("Left %s for debugging" % test_run_path) + sys.exit(1) +diff --git a/test/serverenv.py b/test/serverenv.py +index c6d4e30..5d6c6c4 100644 +--- a/test/serverenv.py ++++ b/test/serverenv.py +@@ -73,12 +73,10 @@ ticket="ticketB" + where return_code/stdout/stderr are None iff pid is still running. + ''' + if expected_daemon and expected_exitcode is not None and expected_exitcode != 0: +- raise RuntimeError, \ +- "Shouldn't ever expect daemon to start and then failure" ++ raise RuntimeError("Shouldn't ever expect daemon to start and then failure") + + if not expected_daemon and expected_exitcode == 0: +- raise RuntimeError, \ +- "Shouldn't ever expect success without starting daemon" ++ raise RuntimeError("Shouldn't ever expect success without starting daemon") + + self.init_log() + +@@ -122,9 +120,9 @@ ticket="ticketB" + return config_file + + def kill_pid(self, pid): +- print "killing %d ..." % pid ++ print("killing %d ..." % pid) + os.kill(pid, 15) +- print "killed" ++ print("killed") + + def check_daemon_handling(self, runner, expected_daemon): + ''' +@@ -154,7 +152,7 @@ ticket="ticketB" + Returns the pid contained in lock_file, or None if it doesn't exist. + ''' + if not os.path.exists(lock_file): +- print "%s does not exist" % lock_file ++ print("%s does not exist" % lock_file) + return None + + l = open(lock_file) +@@ -162,7 +160,7 @@ ticket="ticketB" + l.close() + self.assertEqual(len(lines), 1, "Lock file should contain one line") + pid = re.search('\\bbooth_pid="?(\\d+)"?', lines[0]).group(1) +- print "lockfile contains: <%s>" % pid ++ print("lockfile contains: <%s>" % pid) + return pid + + def is_pid_running_daemon(self, pid): +@@ -185,11 +183,11 @@ ticket="ticketB" + + c = open("/proc/%s/cmdline" % pid) + cmdline = "".join(c.readlines()) +- print cmdline ++ print(cmdline) + c.close() + + if cmdline.find('boothd') == -1: +- print 'no boothd in cmdline:', cmdline ++ print('no boothd in cmdline:', cmdline) + return False + + # self.assertRegexpMatches( +diff --git a/test/servertests.py b/test/servertests.py +index 71e808e..288d19f 100644 +--- a/test/servertests.py ++++ b/test/servertests.py +@@ -35,13 +35,13 @@ class ServerTests(ServerTestEnvironment): + + def test_config_file_buffer_overflow(self): + # https://bugzilla.novell.com/show_bug.cgi?id=750256 +- longfile = (string.lowercase * 5)[:127] ++ longfile = (string.ascii_lowercase * 5)[:127] + expected_error = "'%s' exceeds maximum config name length" % longfile + self._test_buffer_overflow(expected_error, config_file=longfile) + + def test_lock_file_buffer_overflow(self): + # https://bugzilla.novell.com/show_bug.cgi?id=750256 +- longfile = (string.lowercase * 5)[:127] ++ longfile = (string.ascii_lowercase * 5)[:127] + expected_error = "'%s' exceeds maximum lock file length" % longfile + self._test_buffer_overflow(expected_error, lock_file=longfile) + +@@ -54,12 +54,12 @@ class ServerTests(ServerTestEnvironment): + # quotes no longer required + return True + orig_lines = self.working_config.split("\n") +- for i in xrange(len(orig_lines)): ++ for (i, line) in enumerate(orig_lines): + new_lines = copy.copy(orig_lines) +- new_lines[i] = new_lines[i].replace('"', '') ++ new_lines[i] = line.replace('"', '') + new_config = "\n".join(new_lines) + +- line_contains_IP = re.search('^\s*(site|arbitrator)=.*[0-9]\.', orig_lines[i]) ++ line_contains_IP = re.search('^\s*(site|arbitrator)=.*[0-9]\.', line) + if line_contains_IP: + # IP addresses need to be surrounded by quotes, + # so stripping them should cause it to fail +diff --git a/test/utils.py b/test/utils.py +index 5b70cfc..aca3592 100644 +--- a/test/utils.py ++++ b/test/utils.py +@@ -1,5 +1,6 @@ + import subprocess + import re ++import sys + + def run_cmd(cmd): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +@@ -9,8 +10,11 @@ def run_cmd(cmd): + def get_IP(): + (stdout, stderr, returncode) = run_cmd(['hostname', '-i']) + if returncode != 0: +- raise RuntimeError, "Failed to run hostname -i:\n" + stderr ++ raise RuntimeError("Failed to run hostname -i:\n" + stderr) + # in case multiple IP addresses are returned, use only the first +- # and also strip '%' part possibly present with IPv6 address +- ret = re.sub(r'\s.*', '', stdout) ++ # and also strip '%' part possibly present with IPv6 address; ++ # in Python 3 context, only expect ASCII/UTF-8 encodings for the ++ # obtained input bytes ++ ret = re.sub(r'\s.*', '', ++ stdout if sys.version_info[0] < 3 else str(stdout, 'UTF-8')) + return "::1" if '%' in ret else ret +-- +2.18.0.rc2 + diff --git a/0003-build-parametrize-Python-invocations-in-the-shebangs.patch b/0003-build-parametrize-Python-invocations-in-the-shebangs.patch new file mode 100644 index 0000000..a3ce25f --- /dev/null +++ b/0003-build-parametrize-Python-invocations-in-the-shebangs.patch @@ -0,0 +1,89 @@ +From 31133e8ac07c08b607ee7799c0074c1dce37a952 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Wed, 11 Jul 2018 14:18:50 +0200 +Subject: [PATCH] build: parametrize Python invocations in the shebangs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Consequently, there's no reason to have the affected files marked as +executable (processing the files by the means of AC_CONFIG_FILES will +get rid of any such permission bits, anyway), but at the very least, +test/runtests.py needs to be set executable afterwards so as no to +cause failures with the current "make check" arrangement that invokes +TESTS subtargets directly (i.e. no extension-based LOG_COMPILER set). + +Signed-off-by: Jan Pokorný +--- + configure.ac | 12 +++++++++++- + script/{unit-test.py => unit-test.py.in} | 2 +- + test/{runtests.py => runtests.py.in} | 2 +- + 3 files changed, 13 insertions(+), 3 deletions(-) + rename script/{unit-test.py => unit-test.py.in} (99%) + mode change 100755 => 100644 + rename test/{runtests.py => runtests.py.in} (98%) + mode change 100755 => 100644 + +diff --git a/configure.ac b/configure.ac +index 3bf41b3..a6ad86e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -97,6 +97,14 @@ CPPFLAGS="$CPPFLAGS $XML2HEAD" + + PKG_CHECK_MODULES(GLIB, [glib-2.0]) + ++# Python casing, prefer 3.3+ to 2.{6...} ++AM_PATH_PYTHON([3.3], , [PYTHON=:]) ++if test "x$PYTHON" = x:; then ++ AM_PATH_PYTHON([2.6]) ++fi ++PYTHON_SHEBANG="$PYTHON ${PYTHON_OPTS--Es}" ++AC_ARG_VAR([PYTHON_SHEBANG], [Python invocation used in shebangs]) ++ + # Checks for header files. + AC_FUNC_ALLOCA + AC_HEADER_DIRENT +@@ -157,7 +165,9 @@ AC_CONFIG_FILES([Makefile + docs/Makefile + conf/Makefile]) + AC_CONFIG_FILES([conf/booth-arbitrator.service conf/booth@.service]) +- ++AC_CONFIG_FILES([script/unit-test.py test/runtests.py], ++ dnl Following required at least for "make check" ++ [chmod +x test/runtests.py]) + AC_CONFIG_FILES([script/service-runnable], [chmod +x script/service-runnable]) + + # =============================================== +diff --git a/script/unit-test.py b/script/unit-test.py.in +old mode 100755 +new mode 100644 +similarity index 99% +rename from script/unit-test.py +rename to script/unit-test.py.in +index 399528e..4f3cf62 +--- a/script/unit-test.py ++++ b/script/unit-test.py.in +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!@PYTHON_SHEBANG@ + # vim: fileencoding=utf-8 + # see http://stackoverflow.com/questions/728891/correct-way-to-define-python-source-code-encoding + # NOTE: setting the encoding is needed as non-ASCII characters are contained +diff --git a/test/runtests.py b/test/runtests.py.in +old mode 100755 +new mode 100644 +similarity index 98% +rename from test/runtests.py +rename to test/runtests.py.in +index 833b1a7..ec59159 +--- a/test/runtests.py ++++ b/test/runtests.py.in +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!@PYTHON_SHEBANG@ + + import os + import re +-- +2.18.0.rc2 + diff --git a/0004-test-drop-underqualified-identifier-in-unittest-s-2..patch b/0004-test-drop-underqualified-identifier-in-unittest-s-2..patch new file mode 100644 index 0000000..b337059 --- /dev/null +++ b/0004-test-drop-underqualified-identifier-in-unittest-s-2..patch @@ -0,0 +1,36 @@ +From 541e6184fca60a01ff7e8c1bba794c083ac4245f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Tue, 10 Jul 2018 19:25:34 +0200 +Subject: [PATCH] test: drop underqualified identifier in unittest's 2.6 compat + "polyfill" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Specifically, in supplemented unittest.TestCase.assertRegexpMatches +method. In Python 2.7's implementation, there's no re.MULTILINE +modifier at that very place, either. + +Not sure what the original purpose of introducing that with c1c47f5 was. + +Signed-off-by: Jan Pokorný +--- + test/assertions.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/assertions.py b/test/assertions.py +index 34333ca..fafb291 100644 +--- a/test/assertions.py ++++ b/test/assertions.py +@@ -23,7 +23,7 @@ class BoothAssertions: + """Fail the test unless the text matches the regular expression.""" + if isinstance(expected_regexp, str): + expected_regexp = re.compile(expected_regexp) +- if not expected_regexp.search(text, MULTILINE): ++ if not expected_regexp.search(text): + msg = msg or "Regexp didn't match" + msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text) + raise self.failureException(msg) +-- +2.18.0.rc2 + diff --git a/0005-test-drop-comment-out-superfluous-imports.patch b/0005-test-drop-comment-out-superfluous-imports.patch new file mode 100644 index 0000000..45adf33 --- /dev/null +++ b/0005-test-drop-comment-out-superfluous-imports.patch @@ -0,0 +1,90 @@ +From 6a6834a8110d9e6aff50cd6d6935976af4cbdb8f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Thu, 12 Jul 2018 20:18:07 +0200 +Subject: [PATCH] test: drop/comment out superfluous imports +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Jan Pokorný +--- + test/boothrunner.py | 2 -- + test/boothtestenv.py | 1 - + test/runtests.py.in | 3 +-- + test/serverenv.py | 2 -- + test/servertests.py | 1 - + 5 files changed, 1 insertion(+), 8 deletions(-) + +diff --git a/test/boothrunner.py b/test/boothrunner.py +index 347912b..31c2213 100644 +--- a/test/boothrunner.py ++++ b/test/boothrunner.py +@@ -1,8 +1,6 @@ +-import os + import sys + import subprocess + import time +-import unittest + + class BoothRunner: + default_config_file = '/etc/booth/booth.conf' +diff --git a/test/boothtestenv.py b/test/boothtestenv.py +index 59e25c3..ba54360 100644 +--- a/test/boothtestenv.py ++++ b/test/boothtestenv.py +@@ -5,7 +5,6 @@ import tempfile + import unittest + + from assertions import BoothAssertions +-from boothrunner import BoothRunner + + class BoothTestEnvironment(unittest.TestCase, BoothAssertions): + test_src_path = os.path.abspath(os.path.dirname(__file__)) +diff --git a/test/runtests.py.in b/test/runtests.py.in +index ec59159..73d70a3 100644 +--- a/test/runtests.py.in ++++ b/test/runtests.py.in +@@ -1,7 +1,6 @@ + #!@PYTHON_SHEBANG@ + + import os +-import re + import shutil + import sys + import tempfile +@@ -10,7 +9,7 @@ import unittest + + from clienttests import ClientConfigTests + from sitetests import SiteConfigTests +-from arbtests import ArbitratorConfigTests ++#from arbtests import ArbitratorConfigTests + + if __name__ == '__main__': + if os.geteuid() == 0: +diff --git a/test/serverenv.py b/test/serverenv.py +index 5d6c6c4..7b8915d 100644 +--- a/test/serverenv.py ++++ b/test/serverenv.py +@@ -1,9 +1,7 @@ + import os + import re + import time +-import unittest + +-from assertions import BoothAssertions + from boothrunner import BoothRunner + from boothtestenv import BoothTestEnvironment + from utils import get_IP +diff --git a/test/servertests.py b/test/servertests.py +index 288d19f..f72dbed 100644 +--- a/test/servertests.py ++++ b/test/servertests.py +@@ -1,5 +1,4 @@ + import copy +-from pprint import pprint, pformat + import re + import string + +-- +2.18.0.rc2 + diff --git a/0006-test-avoid-dangerous-mutable-sticky-default-value.patch b/0006-test-avoid-dangerous-mutable-sticky-default-value.patch new file mode 100644 index 0000000..88ba09c --- /dev/null +++ b/0006-test-avoid-dangerous-mutable-sticky-default-value.patch @@ -0,0 +1,178 @@ +From 34cc2fcda6804d42ee66fa5a417fc42b64fe3806 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Tue, 10 Jul 2018 19:45:56 +0200 +Subject: [PATCH] test: avoid dangerous mutable/sticky default value +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Incl. slight refactoring towards more frequent use of tuples where +advantage of lists are dubious. + +Signed-off-by: Jan Pokorný +--- + script/unit-test.py.in | 34 ++++++++++++++++------------------ + test/assertions.py | 2 +- + test/boothrunner.py | 14 +++++++------- + test/clientenv.py | 4 ++-- + test/serverenv.py | 4 ++-- + 5 files changed, 28 insertions(+), 30 deletions(-) + +diff --git a/script/unit-test.py.in b/script/unit-test.py.in +index 4f3cf62..fc98bc1 100644 +--- a/script/unit-test.py.in ++++ b/script/unit-test.py.in +@@ -199,7 +199,7 @@ class UT(): + self.booth.close( force=self.booth.isalive() ) + + +- def start_a_process(self, bin, env_add=[], **args): ++ def start_a_process(self, bin, env_add=(), **args): + name = re.sub(r".*/", "", bin) + # How to get stderr, too? + expct = pexpect.spawn(bin, +@@ -220,16 +220,15 @@ class UT(): + + def start_processes(self, test): + self.booth = self.start_a_process(self.binary, +- args = [ "daemon", "-D", +- "-c", self.test_base + "/booth.conf", +- "-s", "127.0.0.1", +- "-l", self.lockfile, +- ], +- env_add=[ ('UNIT_TEST', test), ++ args = ["daemon", "-D", ++ "-c", self.test_base + "/booth.conf", ++ "-s", "127.0.0.1", ++ "-l", self.lockfile], ++ env_add=( ('UNIT_TEST', test), + ('UNIT_TEST_FILE', os.path.realpath(test)), + # provide some space, so that strcpy(getenv()) works + ('UNIT_TEST_AUX', "".zfill(1024)), +- ]); ++ )); + + logging.info("started booth with PID %d, lockfile %s" % (self.booth.pid, self.lockfile)) + self.booth.expect("BOOTH site \S+ \(build \S+\) daemon is starting", timeout=2) +@@ -237,16 +236,15 @@ class UT(): + + self.gdb = self.start_a_process("gdb", + args=["-quiet", +- "-p", str(self.booth.pid), +- # Don't use .gdbinit +- "-nx", "-nh", +- # Run until the defined point. +- # This is necessary so that ticket state setting doesn't +- # happen _before_ the call to pcmk_load_ticket() +- # (which would overwrite our data) +- "-ex", "break ticket_cron", +- "-ex", "continue", +- ]) ++ "-p", str(self.booth.pid), ++ # Don't use .gdbinit ++ "-nx", "-nh", ++ # Run until the defined point. ++ # This is necessary so that ticket state setting doesn't ++ # happen _before_ the call to pcmk_load_ticket() ++ # (which would overwrite our data) ++ "-ex", "break ticket_cron", ++ "-ex", "continue"]) + logging.info("started GDB with PID %d" % self.gdb.pid) + self.gdb.expect("(gdb)") + self.gdb.sendline("set pagination off\n") +diff --git a/test/assertions.py b/test/assertions.py +index fafb291..db6fcd8 100644 +--- a/test/assertions.py ++++ b/test/assertions.py +@@ -10,7 +10,7 @@ class BoothAssertions: + self.assertRegexpMatches(stderr, expected_error) + + def assertLockFileError(self, config_file=None, config_text=None, +- lock_file=True, args=[]): ++ lock_file=True, args=()): + (pid, ret, stdout, stderr, runner) = \ + self.run_booth(config_text=config_text, config_file=config_file, + lock_file=lock_file, args=args, expected_exitcode=1) +diff --git a/test/boothrunner.py b/test/boothrunner.py +index 31c2213..0285fe6 100644 +--- a/test/boothrunner.py ++++ b/test/boothrunner.py +@@ -8,14 +8,14 @@ class BoothRunner: + + def __init__(self, boothd_path, mode, args): + self.boothd_path = boothd_path +- self.args = [ mode ] +- self.final_args = args # will be appended to self.args ++ self.args = (mode, ) ++ self.final_args = tuple(args) # will be appended to self.args + self.mode = mode + self.config_file = None + self.lock_file = None + + def set_config_file_arg(self): +- self.args += [ '-c', self.config_file ] ++ self.args += ('-c', self.config_file) + + def set_config_file(self, config_file): + self.config_file = config_file +@@ -23,16 +23,16 @@ class BoothRunner: + + def set_lock_file(self, lock_file): + self.lock_file = lock_file +- self.args += [ '-l', self.lock_file ] ++ self.args += ('-l', self.lock_file) + + def set_debug(self): +- self.args += [ '-D' ] ++ self.args += ('-D', ) + + def set_foreground(self): +- self.args += [ '-S' ] ++ self.args += ('-S', ) + + def all_args(self): +- return [ self.boothd_path ] + self.args + self.final_args ++ return (self.boothd_path, ) + self.args + self.final_args + + def show_output(self, stdout, stderr): + if stdout: +diff --git a/test/clientenv.py b/test/clientenv.py +index 73b2791..141e33c 100644 +--- a/test/clientenv.py ++++ b/test/clientenv.py +@@ -4,8 +4,8 @@ from boothrunner import BoothRunner + class ClientTestEnvironment(BoothTestEnvironment): + mode = 'client' + +- def run_booth(self, config_text=None, config_file=None, lock_file=True, args=[], +- expected_exitcode=0, debug=False): ++ def run_booth(self, config_text=None, config_file=None, lock_file=True, ++ args=(), expected_exitcode=0, debug=False): + ''' + Runs boothd. + +diff --git a/test/serverenv.py b/test/serverenv.py +index 7b8915d..62c37d0 100644 +--- a/test/serverenv.py ++++ b/test/serverenv.py +@@ -29,7 +29,7 @@ ticket="ticketB" + + def run_booth(self, expected_exitcode, expected_daemon, + config_text=None, config_file=None, lock_file=True, +- args=[], debug=False, foreground=False): ++ args=(), debug=False, foreground=False): + ''' + Runs boothd. Defaults to using a temporary lock file and the + standard config file path. There are four possible types of +@@ -52,7 +52,7 @@ ticket="ticketB" + True: pass a temporary lockfile parameter to booth via -l + string: pass the given lockfile path to booth via -l + args +- array of extra args to pass to booth ++ iterable of extra args to pass to booth + expected_exitcode + an integer, or False if booth is not expected to terminate + within the timeout +-- +2.18.0.rc2 + diff --git a/0007-test-unit-test.py-daemon-will-not-stay-in-foreground.patch b/0007-test-unit-test.py-daemon-will-not-stay-in-foreground.patch new file mode 100644 index 0000000..83058df --- /dev/null +++ b/0007-test-unit-test.py-daemon-will-not-stay-in-foreground.patch @@ -0,0 +1,41 @@ +From 0a7b51d1eb6f948724c08e94148e8ff1f448d100 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Fri, 13 Jul 2018 14:10:28 +0200 +Subject: [PATCH] test: unit-test.py: daemon will not stay in foreground with + -D anymore +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Commit a66ac33 missed this impact (it may have missed impact on +test/boothrunner.py but it appears to be fine either way). + +Signed-off-by: Jan Pokorný +--- + script/unit-test.py.in | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/script/unit-test.py.in b/script/unit-test.py.in +index fc98bc1..74a014b 100644 +--- a/script/unit-test.py.in ++++ b/script/unit-test.py.in +@@ -2,7 +2,6 @@ + # vim: fileencoding=utf-8 + # see http://stackoverflow.com/questions/728891/correct-way-to-define-python-source-code-encoding + # NOTE: setting the encoding is needed as non-ASCII characters are contained +-# FIXME: apparently, pexpect.EOF is not being excepted properly + + import os, sys, time, signal, tempfile, socket, posix, time + import re, shutil, pexpect, logging, pprint +@@ -220,7 +219,7 @@ class UT(): + + def start_processes(self, test): + self.booth = self.start_a_process(self.binary, +- args = ["daemon", "-D", ++ args = ["daemon", "-DS", + "-c", self.test_base + "/booth.conf", + "-s", "127.0.0.1", + "-l", self.lockfile], +-- +2.18.0.rc2 + diff --git a/0008-Refactor-fix-strncpy-may-miss-trailing-null-byte-war.patch b/0008-Refactor-fix-strncpy-may-miss-trailing-null-byte-war.patch new file mode 100644 index 0000000..bbb56f1 --- /dev/null +++ b/0008-Refactor-fix-strncpy-may-miss-trailing-null-byte-war.patch @@ -0,0 +1,50 @@ +From d3bf9f5ced41ad0f4e8ae87e80c7e44df4157b61 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= +Date: Fri, 13 Jul 2018 14:40:07 +0200 +Subject: [PATCH] Refactor: fix "strncpy may miss trailing null byte" warnings + of GCC 8.1 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Verbatim warning: +> ‘strncpy’ specified bound 64 equals destination size [-Wstringop-truncation] + +Signed-off-by: Jan Pokorný +--- + src/config.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/src/config.c b/src/config.c +index 9df5767..e4d36ab 100644 +--- a/src/config.c ++++ b/src/config.c +@@ -75,7 +75,10 @@ static void hostname_to_ip(char * hostname) + + /* Return the first found address */ + if (addr_list[0] != NULL) { +- strncpy(hostname, inet_ntoa(*addr_list[0]), BOOTH_NAME_LEN); ++ strncpy(hostname, inet_ntoa(*addr_list[0]), BOOTH_NAME_LEN - 1); ++ /* buffer overflow will not happen (IPv6 notation < 63 chars), ++ but suppress the warnings */ ++ hostname[BOOTH_NAME_LEN - 1] = '\0'; + } + else { + log_error("no IP addresses found for the host \"%s\"", hostname); +@@ -106,7 +109,12 @@ static int add_site(char *addr_string, int type) + site->family = AF_INET; + site->type = type; + +- strncpy(site->addr_string, addr_string, sizeof(site->addr_string)); ++ /* buffer overflow will not hapen (we've already checked that ++ addr_string will fit incl. terminating '\0' above), but ++ suppress the warnings with copying everything but the boundary ++ byte, which is valid as-is, since this last byte will be safely ++ pre-zeroed from the struct booth_config initialization */ ++ strncpy(site->addr_string, addr_string, sizeof(site->addr_string) - 1); + + if (!(inet_pton(AF_INET, site->addr_string, &site->sa4.sin_addr) > 0) && + !(inet_pton(AF_INET6, site->addr_string, &site->sa6.sin6_addr) > 0)) { +-- +2.18.0.rc2 + diff --git a/booth-f2d38ce.tar.gz b/booth-f2d38ce.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..3a112b6fc4dcd819b0c85164c4f0405e8bf44a5b GIT binary patch literal 141520 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 z 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 Hh*19nv|8gZ literal 0 HcmV?d00001 diff --git a/booth.spec b/booth.spec new file mode 100644 index 0000000..7b4cef5 --- /dev/null +++ b/booth.spec @@ -0,0 +1,277 @@ +# RPMs are split as follows: +# * booth: +# - envelope package serving as a syntactic shortcut to install +# booth-site (with architecture reliably preserved) +# * booth-core: +# - package serving as a base for booth-{arbitrator,site}, +# carrying also basic documentation, license, etc. +# * booth-arbitrator: +# - package to be installed at a machine accessible within HA cluster(s), +# but not (necessarily) a member of any, hence no dependency +# on anything from cluster stack is required +# * booth-site: +# - package to be installed at a cluster member node +# (requires working cluster environment to be useful) +# * booth-test: +# - files for testing booth +# +# TODO: +# wireshark-dissector.lua currently of no use (rhbz#1259623), but if/when +# this no longer persists, add -wireshark package (akin to libvirt-wireshark) + +%bcond_with html_man +%bcond_with glue + +# Disable automatic compilation of Python files in extra directories +%global _python_bytecompile_extra 0 + +%global specver 3 +%global boothver 1.0 +# set following to the actual commit or, for final release, concatenate +# "boothver" macro to "v" (will yield a tag per the convention) +%global commit f2d38ce3d61502bda2a28e79db103737a691faf4 +%global lparen ( +%global rparen ) +%global shortcommit %(c=%{commit}; case ${c} in + v*%{rparen} echo ${c:1};; + *%{rparen} echo ${c:0:7};; esac) +%global pre_release %(s=%{shortcommit}; [ ${s: -3:2} != rc ]; echo $?) +%global post_release %([ %{commit} = v%{shortcommit} ]; echo $?) +%global github_owner ClusterLabs + +%if 0%{pre_release} +%global boothrel 0.%{specver}.%(s=%{shortcommit}; echo ${s: -3}) +%else +%if 0%{post_release} +%global boothrel %{specver}.%{shortcommit}.git +%else +%global boothrel %{specver} +%endif +%endif + +%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/%{name}} +# https://fedoraproject.org/wiki/EPEL:Packaging?rd=Packaging:EPEL#The_.25license_tag +%{!?_licensedir:%global license %doc} + +%global test_path %{_datadir}/booth/tests + +Name: booth +Version: %{boothver} +Release: %{boothrel}%{dist}.2 +Summary: Ticket Manager for Multi-site Clusters +License: GPLv2+ +Url: https://github.com/%{github_owner}/%{name} +Source0: https://github.com/%{github_owner}/%{name}/archive/%{commit}/%{name}-%{shortcommit}.tar.gz +Patch0: 0000-test-remove-superfluous-shebangs-for-import-only-mod.patch +Patch1: 0001-test-do-not-mix-tabs-with-spaces-in-Python-code.patch +Patch2: 0002-test-make-Python-files-supported-_also_-with-Python-.patch +Patch3: 0003-build-parametrize-Python-invocations-in-the-shebangs.patch +Patch4: 0004-test-drop-underqualified-identifier-in-unittest-s-2..patch +Patch5: 0005-test-drop-comment-out-superfluous-imports.patch +Patch6: 0006-test-avoid-dangerous-mutable-sticky-default-value.patch +Patch7: 0007-test-unit-test.py-daemon-will-not-stay-in-foreground.patch +Patch8: 0008-Refactor-fix-strncpy-may-miss-trailing-null-byte-war.patch + +# direct build process dependencies +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: coreutils +BuildRequires: make +## ./autogen.sh +BuildRequires: /bin/sh +# general build dependencies +BuildRequires: asciidoctor +BuildRequires: gcc +BuildRequires: pkgconfig +# linking dependencies +BuildRequires: libgcrypt-devel +BuildRequires: libxml2-devel +## just for include +BuildRequires: pacemaker-libs-devel +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: zlib-devel +## logging provider +BuildRequires: pkgconfig(libqb) +## random2range provider +BuildRequires: pkgconfig(glib-2.0) +## nametag provider +BuildRequires: pkgconfig(libsystemd) +# check scriptlet (for hostname and killall respectively) +BuildRequires: hostname psmisc +BuildRequires: python3-devel +# spec file specifics +## for _unitdir, systemd_requires and specific scriptlet macros +BuildRequires: systemd +## for autosetup +BuildRequires: git + +# this is for a composite-requiring-its-components arranged +# as an empty package (empty files section) requiring subpackages +# (_isa so as to preserve the architecture) +Requires: %{name}-core%{?_isa} +Requires: %{name}-site +%files +# intentionally empty + +%description +Booth manages tickets which authorize cluster sites located +in geographically dispersed locations to run resources. +It facilitates support of geographically distributed +clustering in Pacemaker. + +# SUBPACKAGES # + +%package core +Summary: Booth core files (executables, etc.) +# for booth-keygen (chown, dd) +Requires: coreutils +# deal with pre-split arrangement +Conflicts: %{name} < 1.0-1 + +%description core +Core files (executables, etc.) for Booth, ticket manager for +multi-site clusters. + +%package arbitrator +Summary: Booth support for running as an arbitrator +BuildArch: noarch +Requires: %{name}-core = %{version}-%{release} +%{?systemd_requires} +# deal with pre-split arrangement +Conflicts: %{name} < 1.0-1 + +%description arbitrator +Support for running Booth, ticket manager for multi-site clusters, +as an arbitrator. + +%post arbitrator +%systemd_post booth@.service booth-arbitrator.service + +%preun arbitrator +%systemd_preun booth@.service booth-arbitrator.service + +%postun arbitrator +%systemd_postun_with_restart booth@.service booth-arbitrator.service + +%package site +Summary: Booth support for running as a full-fledged site +BuildArch: noarch +Requires: %{name}-core = %{version}-%{release} +# for crm_{resource,simulate,ticket} utilities +Requires: pacemaker >= 1.1.8 +# for ocf-shellfuncs and other parts of OCF shell-based environment +Requires: resource-agents +# deal with pre-split arrangement +Conflicts: %{name} < 1.0-1 + +%description site +Support for running Booth, ticket manager for multi-site clusters, +as a full-fledged site. + +%package test +Summary: Test scripts for Booth +BuildArch: noarch +# runtests.py suite (for hostname and killall respectively) +Requires: hostname psmisc +# any of the following internal dependencies will pull -core package +## for booth@booth.service +Requires: %{name}-arbitrator = %{version}-%{release} +## for booth-site and service-runnable scripts +## (and /usr/lib/ocf/resource.d/booth) +Requires: %{name}-site = %{version}-%{release} +Requires: gdb +Requires: python3 +Requires: python3-pexpect + +%description test +Automated tests for running Booth, ticket manager for multi-site clusters. + +# BUILD # + +%prep +%autosetup -n %{name}-%{commit} -S git_am + +%build +./autogen.sh +%{configure} \ + --with-initddir=%{_initrddir} \ + --docdir=%{_pkgdocdir} \ + --enable-user-flags \ + %{!?with_html_man:--without-html_man} \ + %{!?with_glue:--without-glue} +%{make_build} + +%install +%{make_install} +mkdir -p %{buildroot}/%{_unitdir} +cp -a -t %{buildroot}/%{_unitdir} \ + -- conf/booth@.service conf/booth-arbitrator.service +install -D -m 644 -t %{buildroot}/%{_mandir}/man8 \ + -- docs/boothd.8 +ln -s boothd.8 %{buildroot}/%{_mandir}/man8/booth.8 +cp -a -t %{buildroot}/%{_pkgdocdir} \ + -- ChangeLog README-testing conf/booth.conf.example +# drop what we don't package anyway (COPYING added via tarball-relative path) +rm -rf %{buildroot}/%{_initrddir}/booth-arbitrator +rm -rf %{buildroot}/%{_pkgdocdir}/README.upgrade-from-v0.1 +rm -rf %{buildroot}/%{_pkgdocdir}/COPYING +# tests +mkdir -p %{buildroot}/%{test_path} +cp -a -t %{buildroot}/%{test_path} \ + -- conf test unit-tests script/unit-test.py +chmod +x %{buildroot}/%{test_path}/test/booth_path +chmod +x %{buildroot}/%{test_path}/test/live_test.sh +mkdir -p %{buildroot}/%{test_path}/src +ln -s -t %{buildroot}/%{test_path}/src \ + -- %{_sbindir}/boothd + +# https://fedoraproject.org/wiki/Packaging:Python_Appendix#Manual_byte_compilation +%py_byte_compile %{__python3} %{buildroot}/%{test_path} + +%check +# alternatively: test/runtests.py +VERBOSE=1 make check + +%files core +%license COPYING +%doc %{_pkgdocdir}/AUTHORS +%doc %{_pkgdocdir}/ChangeLog +%doc %{_pkgdocdir}/README +%doc %{_pkgdocdir}/booth.conf.example +# core command(s) + man pages +%{_sbindir}/booth* +%{_mandir}/man8/booth*.8* +# configuration +%dir %{_sysconfdir}/booth +%exclude %{_sysconfdir}/booth/booth.conf.example + +%files arbitrator +%{_unitdir}/booth@.service +%{_unitdir}/booth-arbitrator.service + +%files site +# OCF (agent + a helper) +## /usr/lib/ocf/resource.d/pacemaker provided by pacemaker +/usr/lib/ocf/resource.d/pacemaker/booth-site +%dir /usr/lib/ocf/lib/booth + /usr/lib/ocf/lib/booth/geo_attr.sh +# geostore (command + OCF agent) +%{_sbindir}/geostore +%{_mandir}/man8/geostore.8* +## /usr/lib/ocf/resource.d provided by resource-agents +%dir /usr/lib/ocf/resource.d/booth + /usr/lib/ocf/resource.d/booth/geostore +# helper (possibly used in the configuration hook) +%dir %{_datadir}/booth + %{_datadir}/booth/service-runnable + +%files test +%doc %{_pkgdocdir}/README-testing +# /usr/share/booth provided by -site +%{test_path} +# /usr/lib/ocf/resource.d/booth provided by -site +/usr/lib/ocf/resource.d/booth/sharedrsc + +%changelog +* Fri Oct 30 2020 jiangxinyu - 1.0-3 +- Init booth project \ No newline at end of file -- Gitee