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',
$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;
# 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 = (
# 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
# 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
});
}
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') : '';
$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);
}
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;
: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.
# 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");
}
}
}
// =======================
//
// 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.
// 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.
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