aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Miller <justdave@bugzilla.org>2024-04-28 00:47:08 -0400
committerGitHub <noreply@github.com>2024-04-28 00:47:08 -0400
commit18ba4d3977ee5ce01057e51299a40eeaaf2507cb (patch)
tree63c4cd143377a7d06a8d2313b9f24f1e4bb225c8
parent340c5f43bf00ad5723f8c91ee38c7893714c54ac (diff)
downloadbugs-18ba4d3977ee5ce01057e51299a40eeaaf2507cb.tar
bugs-18ba4d3977ee5ce01057e51299a40eeaaf2507cb.tar.gz
bugs-18ba4d3977ee5ce01057e51299a40eeaaf2507cb.tar.bz2
bugs-18ba4d3977ee5ce01057e51299a40eeaaf2507cb.tar.xz
bugs-18ba4d3977ee5ce01057e51299a40eeaaf2507cb.zip
Bug 1851354: blocklist MySQL 8+, offer MariaDB (#141)
-rw-r--r--Bugzilla/Constants.pm30
-rw-r--r--Bugzilla/DB.pm18
-rw-r--r--Bugzilla/Install/Requirements.pm24
-rw-r--r--Build.PL4
-rw-r--r--docs/en/rst/installing/essential-post-install-config.rst2
-rw-r--r--t/004template.t4
-rw-r--r--template/en/default/config.js.tmpl4
-rw-r--r--template/en/default/setup/strings.txt.pl2
8 files changed, 65 insertions, 23 deletions
diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm
index edaa8baa5..45cbefe74 100644
--- a/Bugzilla/Constants.pm
+++ b/Bugzilla/Constants.pm
@@ -508,16 +508,42 @@ use constant INSTALLATION_MODE_NON_INTERACTIVE => 1;
use constant DB_MODULE => {
# MySQL 5.0.15 was the first production 5.0.x release.
'mysql' => {db => 'Bugzilla::DB::Mysql', db_version => '5.0.15',
- dbd => {
+ db_blocklist => ['^[89]\.'],
+ # the following is a "human-readable" version to show in the
+ # release notes
+ db_blklst_str => '>= 8.0',
+ dbd => {
package => 'DBD-mysql',
module => 'DBD::mysql',
# Disallow development versions
- blacklist => ['_'],
+ blocklist => ['_'],
# For UTF-8 support. 4.001 makes sure that blobs aren't
# marked as UTF-8.
version => '4.001',
},
name => 'MySQL'},
+
+ # MariaDB is a drop-in replacement for MySQL and works with Bugzilla
+ 'mariadb' => {db => 'Bugzilla::DB::Mysql', db_version => '5.1',
+ # MariaDB is indistinguishable from MySQL, but skipped 8 and
+ # 9 so blocklist it anyway in case someone has the driver set
+ # to mariadb but actually has MySQL.
+ db_blocklist => ['^[89]\.'],
+ # no string to show the user on the release notes though.
+ dbd => {
+ package => 'DBD-mysql',
+ module => 'DBD::mysql',
+
+ # Disallow development versions
+ blocklist => ['_'],
+
+ # For UTF-8 support. 4.001 makes sure that blobs aren't
+ # marked as UTF-8.
+ version => '4.001',
+ },
+ name => 'MariaDB'
+ },
+
# Also see Bugzilla::DB::Pg::bz_check_server_version, which has special
# code to require DBD::Pg 2.17.2 for PostgreSQL 9 and above.
'pg' => {db => 'Bugzilla::DB::Pg', db_version => '8.03.0000',
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index 5bc83f9d6..f59a32feb 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -204,17 +204,33 @@ sub bz_check_server_version {
$self->disconnect;
my $sql_want = $db->{db_version};
+ my $sql_dontwant = exists $db->{db_blocklist} ? $db->{db_blocklist} : [];
my $version_ok = vers_cmp($sql_vers, $sql_want) > -1 ? 1 : 0;
+ my $blocklisted;
+ if ($version_ok) {
+ $blocklisted = grep($sql_vers =~ /$_/, @$sql_dontwant);
+ $version_ok = 0 if $blocklisted;
+ }
my $sql_server = $db->{name};
if ($output) {
Bugzilla::Install::Requirements::_checking_for({
package => $sql_server, wanted => $sql_want,
- found => $sql_vers, ok => $version_ok });
+ found => $sql_vers, ok => $version_ok,
+ blocklisted => $blocklisted });
}
# Check what version of the database server is installed and let
# the user know if the version is too old to be used with Bugzilla.
+ if ($blocklisted) {
+ die <<EOT;
+
+Your $sql_server v$sql_vers is blocklisted. Please check the
+release notes for details or try a different database engine
+or version.
+
+EOT
+ }
if (!$version_ok) {
die <<EOT;
diff --git a/Bugzilla/Install/Requirements.pm b/Bugzilla/Install/Requirements.pm
index 3022cea3b..a7fe4f7eb 100644
--- a/Bugzilla/Install/Requirements.pm
+++ b/Bugzilla/Install/Requirements.pm
@@ -78,8 +78,8 @@ use constant APACHE_PATH => [qw(
# installed or not. "version" is the version we need, or 0 if we'll accept
# any version.
#
-# "blacklist" is an arrayref of regular expressions that describe versions that
-# are 'blacklisted'--that is, even if the version is high enough, Bugzilla
+# "blocklist" is an arrayref of regular expressions that describe versions that
+# are 'blocklisted'--that is, even if the version is high enough, Bugzilla
# will refuse to say that it's OK to run with that version.
sub REQUIRED_MODULES {
my @modules = (
@@ -288,7 +288,7 @@ sub OPTIONAL_MODULES {
# throwing warnings with Perl 5.12.
version => '0.712',
# SOAP::Transport::HTTP 1.12 is bogus.
- blacklist => ['^1\.12$'],
+ blocklist => ['^1\.12$'],
feature => ['xmlrpc'],
},
# Since SOAP::Lite 1.0, XMLRPC::Lite is no longer included
@@ -731,16 +731,16 @@ sub have_vers {
# Must do a string comparison as $vnum may be of the form 5.10.1.
my $vok = ($vnum ne '-1' && version->new($vnum) >= version->new($wanted)) ? 1 : 0;
- my $blacklisted;
- if ($vok && $params->{blacklist}) {
- $blacklisted = grep($vnum =~ /$_/, @{$params->{blacklist}});
- $vok = 0 if $blacklisted;
+ my $blocklisted;
+ if ($vok && $params->{blocklist}) {
+ $blocklisted = grep($vnum =~ /$_/, @{$params->{blocklist}});
+ $vok = 0 if $blocklisted;
}
if ($output) {
_checking_for({
package => $package, ok => $vok, wanted => $wanted,
- found => $vnum, blacklisted => $blacklisted
+ found => $vnum, blocklisted => $blocklisted
});
}
@@ -749,8 +749,8 @@ sub have_vers {
sub _checking_for {
my ($params) = @_;
- my ($package, $ok, $wanted, $blacklisted, $found) =
- @$params{qw(package ok wanted blacklisted found)};
+ my ($package, $ok, $wanted, $blocklisted, $found) =
+ @$params{qw(package ok wanted blocklisted found)};
my $ok_string = $ok ? install_string('module_ok') : '';
@@ -777,10 +777,10 @@ sub _checking_for {
$ok_string = install_string('module_not_found');
}
- my $black_string = $blacklisted ? install_string('blacklisted') : '';
+ my $block_string = $blocklisted ? install_string('blocklisted') : '';
my $want_string = $wanted ? "v$wanted" : install_string('any');
- my $str = sprintf "%s %20s %-11s $ok_string $black_string\n",
+ my $str = sprintf "%s %20s %-11s $ok_string $block_string\n",
install_string('checking_for'), $package, "($want_string)";
print $ok ? $str : colored($str, COLOR_ERROR);
}
diff --git a/Build.PL b/Build.PL
index 024a56024..0a7c1059a 100644
--- a/Build.PL
+++ b/Build.PL
@@ -33,10 +33,10 @@ sub build_requires {
sub recommends {
my $recommends = OPTIONAL_MODULES();
- my @blacklist = ('Apache-SizeLimit', 'mod_perl'); # Does not compile properly on Travis
+ my @blocklist = ('Apache-SizeLimit', 'mod_perl'); # Does not compile properly on Travis
my $hrecommends = {};
foreach my $module (@$recommends) {
- next if grep($_ eq $module->{package}, @blacklist);
+ next if grep($_ eq $module->{package}, @blocklist);
$hrecommends->{$module->{module}} = $module->{version};
}
return $hrecommends;
diff --git a/docs/en/rst/installing/essential-post-install-config.rst b/docs/en/rst/installing/essential-post-install-config.rst
index 1b9fd6b94..51ff58719 100644
--- a/docs/en/rst/installing/essential-post-install-config.rst
+++ b/docs/en/rst/installing/essential-post-install-config.rst
@@ -94,7 +94,7 @@ This section corresponds to choosing a :param:`mail_delivery_method` of
:paramval:`Sendmail`.
Unless you know what you are doing, and can deal with the possible problems
-of spam, bounces and blacklists, it is probably unwise to set up your own
+of spam, bounces and blocklists, it is probably unwise to set up your own
mail server just for Bugzilla. However, if you wish to do so, some guidance
follows.
diff --git a/t/004template.t b/t/004template.t
index 760d39ac8..f336441ac 100644
--- a/t/004template.t
+++ b/t/004template.t
@@ -114,10 +114,10 @@ foreach my $include_path (@include_paths) {
# Forbid single quotes to delimit URLs, see bug 926085.
if ($data =~ /href=\\?'/) {
- ok(0, "$path contains blacklisted constructs: href='...'");
+ ok(0, "$path contains blocklisted constructs: href='...'");
}
else {
- ok(1, "$path contains no blacklisted constructs");
+ ok(1, "$path contains no blocklisted constructs");
}
}
}
diff --git a/template/en/default/config.js.tmpl b/template/en/default/config.js.tmpl
index 0399f8b28..0e924d801 100644
--- a/template/en/default/config.js.tmpl
+++ b/template/en/default/config.js.tmpl
@@ -64,7 +64,7 @@ var [% cf.name FILTER js %] = [ [% FOREACH x = cf.legal_values %]'[% x.name FILT
// =======================
//
// It is not necessary to list all products and components here.
-// Instead, you can define a "blacklist" for some commonly used words
+// Instead, you can define a "blocklist" for some commonly used words
// or word fragments that occur in a product or component name
// but should _not_ trigger product/component search.
@@ -84,7 +84,7 @@ var target_milestone = new Object();
// Product and Component Exceptions
// ================================
//
-// A blacklist for some commonly used words or word fragments
+// A blocklist for some commonly used words or word fragments
// that occur in a product or component name but should *not*
// trigger product/component search in QuickSearch.
diff --git a/template/en/default/setup/strings.txt.pl b/template/en/default/setup/strings.txt.pl
index 78c4d861b..202b3c78d 100644
--- a/template/en/default/setup/strings.txt.pl
+++ b/template/en/default/setup/strings.txt.pl
@@ -23,7 +23,7 @@ happens when you are not running checksetup.pl as ##root##. To see the
problem we ran into, run: ##command##
END
bad_executable => 'not a valid executable: ##bin##',
- blacklisted => '(blacklisted)',
+ blocklisted => '(blocklisted)',
bz_schema_exists_before_220 => <<'END',
You are upgrading from a version before 2.20, but the bz_schema table
already exists. This means that you restored a mysqldump into the Bugzilla