Я недавно обновил установку MediaWiki до 1.30 и теперь работаю над ошибками плагина, которые появились в ходе обновления.
Моя самая непосредственная ошибка с RadiusAuthPlugin для Mediawiki. При попытке авторизации на странице отображается следующая ошибка, но авторизация прошла успешно:
[3d3906e176c5476982ff8037] /MEDIAWIKI/index.php?title=Spezial:Login&returnto = Ошибка главной страницы от
строка 75 из
/usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/extensions/RadiusAuthPlugin/RadiusAuthPlugin.php:
Вызов неопределенного метода User :: saveToCache ()Backtrace:
# 0 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/auth/AuthPluginPrimaryAuthenticationProvider.php(145):
RadiusAuthPlugin-> updateUser (Пользователь)# 1 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/Hooks.php(177):
Обсуждение MediaWiki \ Auth \ AuthPluginPrimaryAuthenticationProvider-> onUserLoggedIn (Пользователь)# 2 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/Hooks.php(205):
Hooks :: callHook (строка, массив, массив, NULL)# 3 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/auth/AuthManager.php(2388):
Hooks :: run (строка, массив)# 4 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/auth/AuthManager.php(690): MediaWiki \ Auth \ AuthManager-> setSessionDataForUser (пользователь, логическое значение)
# 5 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/auth/AuthManager.php(382): MediaWiki \ Auth \ AuthManager-> continueAuthentication (массив)
# 6 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/AuthManagerSpecialPage.php(353):
MediaWiki \ Auth \ AuthManager-> beginAuthentication (массив, строка)# 7 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/AuthManagerSpecialPage.php(482):
AuthManagerSpecialPage-> executeAuthenticationStep (строка, массив)# 8 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/htmlform/HTMLForm.php(669):
AuthManagerSpecialPage-> handleFormSubmit (array, VFormHTMLForm)# 9 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/AuthManagerSpecialPage.php(416):
HTMLForm-> trySubmit ()# 10 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/LoginSignupSpecialPage.php(316):
AuthManagerSpecialPage-> trySubmit ()# 11 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/SpecialPage.php(522):
LoginSignupSpecialPage-> выполнить (NULL)# 12 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/specialpage/SpecialPageFactory.php(578):
SpecialPage-> Run (NULL)# 13 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/MediaWiki.php(287):
SpecialPageFactory :: executePath (Title, RequestContext)# 14 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/MediaWiki.php(851):
MediaWiki-> performRequest ()# 15 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/includes/MediaWiki.php(523):
MediaWiki-> Основной ()# 16 /usr/srv/www/vhosts/HOSTNAME/htdocs-ssl/MEDIAWIKI/index.php(43):
MediaWiki-> Run ()# 17 {main}
(Я цензурировал идентифицирующие части пути по соображениям безопасности)
RadiusAuthPlugin.php:
<?php
require_once("$IP/includes/AuthPlugin.php");
require_once("radius.class.php");
require_once("$IP/includes/GlobalFunctions.php");
error_reporting(E_ALL);
class RadiusAuthPlugin extends AuthPlugin
{
function userExists($username)
{
return TRUE;
}
function authenticate($username, $password)
{
global $wgRadiusAuthPluginServers, $wgRadiusAuthPluginSecret;
$username = strtolower($username);
//$handle=fopen("/tmp/radius","w");
//fwrite($handle,"$username;$password;\n");
foreach($wgRadiusAuthPluginServers as $server)
{
$radius = new Radius($server, $wgRadiusAuthPluginSecret);
//$radius->SetNasIpAddress('NAS_IP_ADDRESS'); // Needed for some devi$
//fwrite($handle,"Radius Objekt angelegt\n");
if ($radius->AccessRequest($username, $password))
{
return TRUE;
//fwrite($handle,"Auth successful\n");
}
//else{
// fwrite($handle,"Auth not successful\n");
// }
}
//fclose($handle);
return FALSE;
}
function modifyUITemplate(&$template, &$type)
{
global $wgRadiusAuthPluginExtrafields;
$template->set('usedomain', FALSE);
$template->set('useemail', FALSE);
$template->set('create', FALSE);
//$template->set('create', TRUE);
$template->set('canremember', FALSE);
$template->set('extrafields', $wgRadiusAuthPluginExtrafields);
}
function autoCreate()
{
global $wgRadiusAuthPluginAutoCreate;
if(isset($wgRadiusAuthPluginAutoCreate))
{
if(is_bool($wgRadiusAuthPluginAutoCreate))
{
return $wgRadiusAuthPluginAutoCreate;
}
}
return FALSE;
}
function validDomain($domain)
{
return TRUE;
}
function updateUser(&$user)
{
global $wgRadiusAuthPluginMaildomain;
$user->setEmail($user->getName()."@".$wgRadiusAuthPluginMaildomain);
$user->saveToCache();
return TRUE;
}
function allowPasswordChange()
{
//return false;
return TRUE; // since Ubuntu 14.04
}
function allowPropChange($prop = '')
{
return FALSE;
}
function allowSetLocalPassword()
{
return true;
}
function setPassword($user, $password)
{
return true;
}
function updateExternalDB($user)
{
return true;
}
function canCreateAccounts()
{
# return FALSE;
return TRUE;
}
function adduser($user, $password, $email = '', $realname = '')
{
return false;
# return true;
}
function strict()
{
global $wgRadiusAuthPluginStrict;
if(isset($wgRadiusAuthPluginStrict))
{
if(is_bool($wgRadiusAuthPluginStrict))
{
return $wgRadiusAuthPluginStrict;
}
}
return TRUE;
}
function strictUserAuth($user)
{
global $wgRadiusAuthPluginStrictUserAuth;
if(isset($wgRadiusAuthPluginStrictUserAuth))
{
if(is_bool($wgRadiusAuthPluginStrictUserAuth))
{
return $wgRadiusAuthPluginStrictUserAuth;
}
}
}
return TRUE;
}
function initUser(&$user, $autocreate = false)
{
global $wgRadiusAuthPluginMaildomain, $wgSitename, $wgRadiusAuthPluginM$
$user->setEmail($user->getName()."@".$wgRadiusAuthPluginMaildomain);
$user->setEmailAuthenticationTimestamp(wfTimestamp(TS_MW));
$user->sendMail("[".$wgSitename."] ".$wgRadiusAuthPluginMailSubject,$wg$
$user->removeGroup("User");
//$user->removeGroup("auto-registered User");
//$user->addGroup("USER");
}
}
$wgExtensionCredits['other'][] = array(
'name' => 'RadiusAuthPlugin',
'version' => '1.1.0',
'author' => 'James Young',
'author' => 'edited by Andreas Ihrig',
'description' => 'Automatic login with a RADIUS server; now with Setting-Op$
);
?>
Я понятия не имею, что с этим делать, и я благодарен за любую помощь.
Пока спасибо
User::saveToCache
был удален два года назад. (До этого его документация гласила: «Этот метод не должен вызываться вне класса User». Эти предупреждения существуют по определенной причине.) Почему кто-то сохраняет изменения в кэш, но не на диск в любом случае? Честно говоря, автор этого плагина, похоже, не имеет большого представления о том, что они делают.
Вы можете попробовать заменить saveToCache
с saveSettings
, Хотя в идеале следует сначала проверить правильность адреса электронной почты, чтобы избежать бессмысленной записи в БД. И, вероятно, позвоните confirmEmail
тоже, поскольку адрес электронной почты исходит из авторитетного источника.
Других решений пока нет …