From a67e3276270c93806c0a1777c19333a7ff444742 Mon Sep 17 00:00:00 2001 From: Ilia Ross Date: Sat, 29 Mar 2025 16:25:42 +0200 Subject: [PATCH] Fix to dynamically list auth plugins in MySQL/MariaDB --- mysql/edit_user.cgi | 6 +++--- mysql/mysql-lib.pl | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/mysql/edit_user.cgi b/mysql/edit_user.cgi index 69767d542..6f8879b75 100755 --- a/mysql/edit_user.cgi +++ b/mysql/edit_user.cgi @@ -89,12 +89,12 @@ if (!$in{'new'} && $hashpass) { } # Plugin for setting password -my @plugins = &list_authentication_plugins(); -if (@plugins) { +my $plugins = &list_authentication_plugins(); +if ($plugins) { print &ui_table_row($text{'user_plugin'}, &ui_select("plugin", $plugin && $u->[$plugin], [ [ '', $text{'default'} ], - @plugins ])); + @{$plugins} ])); } # Allowed host / network diff --git a/mysql/mysql-lib.pl b/mysql/mysql-lib.pl index 785272d7f..7c604d62a 100755 --- a/mysql/mysql-lib.pl +++ b/mysql/mysql-lib.pl @@ -2181,13 +2181,16 @@ return $rv->{'data'}->[0]->[0] =~ /unix_socket/i ? 'socket' : 'password'; } # list_authentication_plugins() -# Returns a list of supported authentication plugins for setting passwords +# Returns a list ref of supported authentication plugins for setting passwords sub list_authentication_plugins { my ($ver, $variant) = &get_remote_mysql_variant(); if ($variant eq "mariadb" && &compare_version_numbers($ver, "10.4") >= 0 || $variant eq "mysql" && &compare_version_numbers($ver, "5.7.6") >= 0) { - return ('mysql_native_password', 'caching_sha2_password', 'unix_socket'); + my $rv = &execute_sql($master_db, "show plugins"); + my @plugins = map { $_->[0] } grep { $_->[1] eq 'ACTIVE' && + $_->[2] eq 'AUTHENTICATION' } @{ $rv->{data} }; + return @plugins ? \@plugins : ['mysql_native_password']; } return (); }