diff --git a/lib/plugins/authpdo/_test/mysql/mybb.php b/lib/plugins/authpdo/_test/mysql/mybb.php new file mode 100644 index 0000000000000000000000000000000000000000..3a427b4455589e4baa676e24c1d1ae6419d427cc --- /dev/null +++ b/lib/plugins/authpdo/_test/mysql/mybb.php @@ -0,0 +1,144 @@ +<?php +/** + * Configuration for mybb. Password checking is done in SQL + * + * mybb stores additional group ids in a commaseparated list of mybb_users.addtionalgroups This + * is currently not supported in the setup below. If someone can come up with a clever config for + * that PRs would be welcome. + */ +/** @noinspection SqlResolve */ +$data = array( + 'passcrypt' => 'sha1', + 'conf' => array( + 'select-user' => ' + SELECT uid, + username AS user, + username AS name, + email AS mail + FROM mybb_users + WHERE username = :user + ', + 'check-pass' => ' + SELECT uid + FROM mybb_users + WHERE username = :user + AND password = MD5(CONCAT(MD5(salt), MD5(:clear))) + ', + 'select-user-groups' => ' + SELECT UG.title AS `group`, + UG.gid + FROM mybb_usergroups UG, + mybb_users U + WHERE U.usergroup = UG.gid + AND U.uid = :uid + ', + 'select-groups' => ' + SELECT gid, title AS `group` + FROM mybb_usergroups + ', + 'insert-user' => ' + SET @salt = LEFT(UUID(), 10); + INSERT INTO mybb_users + (username, email, salt, password, regdate) + VALUES (:user, :mail, @salt, MD5(CONCAT(MD5(@salt), MD5(:clear))), UNIX_TIMESTAMP() ) + ', + 'delete-user' => ' + DELETE FROM mybb_users + WHERE uid = :uid + ', + 'list-users' => ' + SELECT U.username AS user + FROM mybb_usergroups UG, + mybb_users U + WHERE U.usergroup = UG.gid + AND UG.title LIKE :group + AND U.username LIKE :user + AND U.username LIKE :name + AND U.email LIKE :mail + ORDER BY U.username + LIMIT :limit + OFFSET :start + ', + 'count-users' => ' + SELECT COUNT(U.username) AS `count` + FROM mybb_usergroups UG, + mybb_users U + WHERE U.usergroup = UG.gid + AND UG.title LIKE :group + AND U.username LIKE :user + AND U.username LIKE :name + AND U.email LIKE :mail + ', + 'update-user-info' => ' + UPDATE mybb_users + SET email = :mail + WHERE uid = :uid + ', // we do not support changing the full name as that is the same as the login + 'update-user-login' => ' + UPDATE mybb_users + SET username = :newlogin + WHERE uid = :uid + ', + 'update-user-pass' => ' + SET @salt = LEFT(UUID(), 10); + UPDATE mybb_users + SET salt = @salt, + password = MD5(CONCAT(MD5(@salt), MD5(:clear))) + WHERE uid = :uid + ', + 'insert-group' => ' + INSERT INTO mybb_usergroups (title) + VALUES (:group) + ', + 'join-group' => ' + UPDATE mybb_users + SET usergroup = :gid + WHERE uid = :uid + ', + 'leave-group' => '', // makes probably no sense to implement + ), + 'users' => array( + array( + 'user' => 'Test One', + 'pass' => 'fakepass', + 'name' => 'Test One', + 'mail' => 'no_one@nowhere.com', + 'grps' => + array( + 0 => 'Registered', + ), + ), + array( + 'user' => 'Test Two', + 'pass' => 'fakepass', + 'name' => 'Test Two', + 'mail' => 'no_one@nowhere.com', + 'grps' => + array( + 0 => 'Super Moderators', + ), + ), + array( + 'user' => 'Test Three', + 'pass' => 'fakepass', + 'name' => 'Test Three', + 'mail' => 'no_one@nowhere.com', + 'grps' => + array( + 0 => 'Administrators', + ), + ), + array( + 'user' => 'Test Four', + 'pass' => 'fakepass', + 'name' => 'Test Four', + 'mail' => 'no_one@nowhere.com', + 'grps' => + array( + 0 => 'Moderators', + ), + ), + + + ), +); diff --git a/lib/plugins/authpdo/_test/mysql/mybb.sql b/lib/plugins/authpdo/_test/mysql/mybb.sql new file mode 100644 index 0000000000000000000000000000000000000000..fdd1a997457ea86b57a0184cebd09bae8fb84012 --- /dev/null +++ b/lib/plugins/authpdo/_test/mysql/mybb.sql @@ -0,0 +1,306 @@ +-- phpMyAdmin SQL Dump +-- version 4.4.14 +-- http://www.phpmyadmin.net +-- +-- Host: 127.0.0.1 +-- Generation Time: Aug 19, 2016 at 04:02 PM +-- Server version: 5.5.45 +-- PHP Version: 5.4.45 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `mybb` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `mybb_usergroups` +-- + +CREATE TABLE `mybb_usergroups` ( + `gid` smallint(5) unsigned NOT NULL, + `type` tinyint(1) unsigned NOT NULL DEFAULT '2', + `title` varchar(120) NOT NULL DEFAULT '', + `description` text NOT NULL, + `namestyle` varchar(200) NOT NULL DEFAULT '{username}', + `usertitle` varchar(120) NOT NULL DEFAULT '', + `stars` smallint(4) unsigned NOT NULL DEFAULT '0', + `starimage` varchar(120) NOT NULL DEFAULT '', + `image` varchar(120) NOT NULL DEFAULT '', + `disporder` smallint(6) unsigned NOT NULL, + `isbannedgroup` tinyint(1) NOT NULL DEFAULT '0', + `canview` tinyint(1) NOT NULL DEFAULT '0', + `canviewthreads` tinyint(1) NOT NULL DEFAULT '0', + `canviewprofiles` tinyint(1) NOT NULL DEFAULT '0', + `candlattachments` tinyint(1) NOT NULL DEFAULT '0', + `canviewboardclosed` tinyint(1) NOT NULL DEFAULT '0', + `canpostthreads` tinyint(1) NOT NULL DEFAULT '0', + `canpostreplys` tinyint(1) NOT NULL DEFAULT '0', + `canpostattachments` tinyint(1) NOT NULL DEFAULT '0', + `canratethreads` tinyint(1) NOT NULL DEFAULT '0', + `modposts` tinyint(1) NOT NULL DEFAULT '0', + `modthreads` tinyint(1) NOT NULL DEFAULT '0', + `mod_edit_posts` tinyint(1) NOT NULL DEFAULT '0', + `modattachments` tinyint(1) NOT NULL DEFAULT '0', + `caneditposts` tinyint(1) NOT NULL DEFAULT '0', + `candeleteposts` tinyint(1) NOT NULL DEFAULT '0', + `candeletethreads` tinyint(1) NOT NULL DEFAULT '0', + `caneditattachments` tinyint(1) NOT NULL DEFAULT '0', + `canpostpolls` tinyint(1) NOT NULL DEFAULT '0', + `canvotepolls` tinyint(1) NOT NULL DEFAULT '0', + `canundovotes` tinyint(1) NOT NULL DEFAULT '0', + `canusepms` tinyint(1) NOT NULL DEFAULT '0', + `cansendpms` tinyint(1) NOT NULL DEFAULT '0', + `cantrackpms` tinyint(1) NOT NULL DEFAULT '0', + `candenypmreceipts` tinyint(1) NOT NULL DEFAULT '0', + `pmquota` int(3) unsigned NOT NULL DEFAULT '0', + `maxpmrecipients` int(4) unsigned NOT NULL DEFAULT '5', + `cansendemail` tinyint(1) NOT NULL DEFAULT '0', + `cansendemailoverride` tinyint(1) NOT NULL DEFAULT '0', + `maxemails` int(3) unsigned NOT NULL DEFAULT '5', + `emailfloodtime` int(3) unsigned NOT NULL DEFAULT '5', + `canviewmemberlist` tinyint(1) NOT NULL DEFAULT '0', + `canviewcalendar` tinyint(1) NOT NULL DEFAULT '0', + `canaddevents` tinyint(1) NOT NULL DEFAULT '0', + `canbypasseventmod` tinyint(1) NOT NULL DEFAULT '0', + `canmoderateevents` tinyint(1) NOT NULL DEFAULT '0', + `canviewonline` tinyint(1) NOT NULL DEFAULT '0', + `canviewwolinvis` tinyint(1) NOT NULL DEFAULT '0', + `canviewonlineips` tinyint(1) NOT NULL DEFAULT '0', + `cancp` tinyint(1) NOT NULL DEFAULT '0', + `issupermod` tinyint(1) NOT NULL DEFAULT '0', + `cansearch` tinyint(1) NOT NULL DEFAULT '0', + `canusercp` tinyint(1) NOT NULL DEFAULT '0', + `canuploadavatars` tinyint(1) NOT NULL DEFAULT '0', + `canratemembers` tinyint(1) NOT NULL DEFAULT '0', + `canchangename` tinyint(1) NOT NULL DEFAULT '0', + `canbereported` tinyint(1) NOT NULL DEFAULT '0', + `canchangewebsite` tinyint(1) NOT NULL DEFAULT '1', + `showforumteam` tinyint(1) NOT NULL DEFAULT '0', + `usereputationsystem` tinyint(1) NOT NULL DEFAULT '0', + `cangivereputations` tinyint(1) NOT NULL DEFAULT '0', + `candeletereputations` tinyint(1) NOT NULL DEFAULT '0', + `reputationpower` int(10) unsigned NOT NULL DEFAULT '0', + `maxreputationsday` int(10) unsigned NOT NULL DEFAULT '0', + `maxreputationsperuser` int(10) unsigned NOT NULL DEFAULT '0', + `maxreputationsperthread` int(10) unsigned NOT NULL DEFAULT '0', + `candisplaygroup` tinyint(1) NOT NULL DEFAULT '0', + `attachquota` int(10) unsigned NOT NULL DEFAULT '0', + `cancustomtitle` tinyint(1) NOT NULL DEFAULT '0', + `canwarnusers` tinyint(1) NOT NULL DEFAULT '0', + `canreceivewarnings` tinyint(1) NOT NULL DEFAULT '0', + `maxwarningsday` int(3) unsigned NOT NULL DEFAULT '3', + `canmodcp` tinyint(1) NOT NULL DEFAULT '0', + `showinbirthdaylist` tinyint(1) NOT NULL DEFAULT '0', + `canoverridepm` tinyint(1) NOT NULL DEFAULT '0', + `canusesig` tinyint(1) NOT NULL DEFAULT '0', + `canusesigxposts` smallint(5) unsigned NOT NULL DEFAULT '0', + `signofollow` tinyint(1) NOT NULL DEFAULT '0', + `edittimelimit` int(4) unsigned NOT NULL DEFAULT '0', + `maxposts` int(4) unsigned NOT NULL DEFAULT '0', + `showmemberlist` tinyint(1) NOT NULL DEFAULT '1', + `canmanageannounce` tinyint(1) NOT NULL DEFAULT '0', + `canmanagemodqueue` tinyint(1) NOT NULL DEFAULT '0', + `canmanagereportedcontent` tinyint(1) NOT NULL DEFAULT '0', + `canviewmodlogs` tinyint(1) NOT NULL DEFAULT '0', + `caneditprofiles` tinyint(1) NOT NULL DEFAULT '0', + `canbanusers` tinyint(1) NOT NULL DEFAULT '0', + `canviewwarnlogs` tinyint(1) NOT NULL DEFAULT '0', + `canuseipsearch` tinyint(1) NOT NULL DEFAULT '0' +) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `mybb_usergroups` +-- + +INSERT INTO `mybb_usergroups` (`gid`, `type`, `title`, `description`, `namestyle`, `usertitle`, `stars`, `starimage`, `image`, `disporder`, `isbannedgroup`, `canview`, `canviewthreads`, `canviewprofiles`, `candlattachments`, `canviewboardclosed`, `canpostthreads`, `canpostreplys`, `canpostattachments`, `canratethreads`, `modposts`, `modthreads`, `mod_edit_posts`, `modattachments`, `caneditposts`, `candeleteposts`, `candeletethreads`, `caneditattachments`, `canpostpolls`, `canvotepolls`, `canundovotes`, `canusepms`, `cansendpms`, `cantrackpms`, `candenypmreceipts`, `pmquota`, `maxpmrecipients`, `cansendemail`, `cansendemailoverride`, `maxemails`, `emailfloodtime`, `canviewmemberlist`, `canviewcalendar`, `canaddevents`, `canbypasseventmod`, `canmoderateevents`, `canviewonline`, `canviewwolinvis`, `canviewonlineips`, `cancp`, `issupermod`, `cansearch`, `canusercp`, `canuploadavatars`, `canratemembers`, `canchangename`, `canbereported`, `canchangewebsite`, `showforumteam`, `usereputationsystem`, `cangivereputations`, `candeletereputations`, `reputationpower`, `maxreputationsday`, `maxreputationsperuser`, `maxreputationsperthread`, `candisplaygroup`, `attachquota`, `cancustomtitle`, `canwarnusers`, `canreceivewarnings`, `maxwarningsday`, `canmodcp`, `showinbirthdaylist`, `canoverridepm`, `canusesig`, `canusesigxposts`, `signofollow`, `edittimelimit`, `maxposts`, `showmemberlist`, `canmanageannounce`, `canmanagemodqueue`, `canmanagereportedcontent`, `canviewmodlogs`, `caneditprofiles`, `canbanusers`, `canviewwarnlogs`, `canuseipsearch`) VALUES +(1, 1, 'Guests', 'The default group that all visitors are assigned to unless they''re logged in.', '{username}', 'Unregistered', 0, '', '', 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), +(2, 1, 'Registered', 'After registration, all users are placed in this group by default.', '{username}', '', 0, 'images/star.png', '', 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 200, 5, 1, 0, 5, 5, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 5, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0), +(3, 1, 'Super Moderators', 'These users can moderate any forum.', '<span style="color: #CC00CC;"><strong>{username}</strong></span>', 'Super Moderator', 6, 'images/star.png', '', 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 250, 5, 1, 0, 10, 5, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 10, 0, 0, 1, 0, 1, 1, 1, 3, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1), +(4, 1, 'Administrators', 'The group all administrators belong to.', '<span style="color: green;"><strong><em>{username}</em></strong></span>', 'Administrator', 7, 'images/star.png', '', 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1), +(5, 1, 'Awaiting Activation', 'Users that have not activated their account by email or manually been activated yet.', '{username}', 'Account not Activated', 0, 'images/star.png', '', 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 5, 0, 0, 5, 5, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0), +(6, 1, 'Moderators', 'These users moderate specific forums.', '<span style="color: #CC00CC;"><strong>{username}</strong></span>', 'Moderator', 5, 'images/star.png', '', 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 250, 5, 1, 0, 5, 5, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 10, 0, 0, 1, 0, 1, 1, 1, 3, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1), +(7, 1, 'Banned', 'The default user group to which members that are banned are moved to.', '<s>{username}</s>', 'Banned', 0, 'images/star.png', '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `mybb_usergroups` +-- +ALTER TABLE `mybb_usergroups` + ADD PRIMARY KEY (`gid`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `mybb_usergroups` +-- +ALTER TABLE `mybb_usergroups` + MODIFY `gid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=8; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +-- phpMyAdmin SQL Dump +-- version 4.4.14 +-- http://www.phpmyadmin.net +-- +-- Host: 127.0.0.1 +-- Generation Time: Aug 19, 2016 at 03:47 PM +-- Server version: 5.5.45 +-- PHP Version: 5.4.45 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `mybb` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `mybb_users` +-- + +CREATE TABLE `mybb_users` ( + `uid` int(10) unsigned NOT NULL, + `username` varchar(120) NOT NULL DEFAULT '', + `password` varchar(120) NOT NULL DEFAULT '', + `salt` varchar(10) NOT NULL DEFAULT '', + `loginkey` varchar(50) NOT NULL DEFAULT '', + `email` varchar(220) NOT NULL DEFAULT '', + `postnum` int(10) unsigned NOT NULL DEFAULT '0', + `threadnum` int(10) unsigned NOT NULL DEFAULT '0', + `avatar` varchar(200) NOT NULL DEFAULT '', + `avatardimensions` varchar(10) NOT NULL DEFAULT '', + `avatartype` varchar(10) NOT NULL DEFAULT '0', + `usergroup` smallint(5) unsigned NOT NULL DEFAULT '0', + `additionalgroups` varchar(200) NOT NULL DEFAULT '', + `displaygroup` smallint(5) unsigned NOT NULL DEFAULT '0', + `usertitle` varchar(250) NOT NULL DEFAULT '', + `regdate` int(10) unsigned NOT NULL DEFAULT '0', + `lastactive` int(10) unsigned NOT NULL DEFAULT '0', + `lastvisit` int(10) unsigned NOT NULL DEFAULT '0', + `lastpost` int(10) unsigned NOT NULL DEFAULT '0', + `website` varchar(200) NOT NULL DEFAULT '', + `icq` varchar(10) NOT NULL DEFAULT '', + `aim` varchar(50) NOT NULL DEFAULT '', + `yahoo` varchar(50) NOT NULL DEFAULT '', + `skype` varchar(75) NOT NULL DEFAULT '', + `google` varchar(75) NOT NULL DEFAULT '', + `birthday` varchar(15) NOT NULL DEFAULT '', + `birthdayprivacy` varchar(4) NOT NULL DEFAULT 'all', + `signature` text NOT NULL, + `allownotices` tinyint(1) NOT NULL DEFAULT '0', + `hideemail` tinyint(1) NOT NULL DEFAULT '0', + `subscriptionmethod` tinyint(1) NOT NULL DEFAULT '0', + `invisible` tinyint(1) NOT NULL DEFAULT '0', + `receivepms` tinyint(1) NOT NULL DEFAULT '0', + `receivefrombuddy` tinyint(1) NOT NULL DEFAULT '0', + `pmnotice` tinyint(1) NOT NULL DEFAULT '0', + `pmnotify` tinyint(1) NOT NULL DEFAULT '0', + `buddyrequestspm` tinyint(1) NOT NULL DEFAULT '1', + `buddyrequestsauto` tinyint(1) NOT NULL DEFAULT '0', + `threadmode` varchar(8) NOT NULL DEFAULT '', + `showimages` tinyint(1) NOT NULL DEFAULT '0', + `showvideos` tinyint(1) NOT NULL DEFAULT '0', + `showsigs` tinyint(1) NOT NULL DEFAULT '0', + `showavatars` tinyint(1) NOT NULL DEFAULT '0', + `showquickreply` tinyint(1) NOT NULL DEFAULT '0', + `showredirect` tinyint(1) NOT NULL DEFAULT '0', + `ppp` smallint(6) unsigned NOT NULL DEFAULT '0', + `tpp` smallint(6) unsigned NOT NULL DEFAULT '0', + `daysprune` smallint(6) unsigned NOT NULL DEFAULT '0', + `dateformat` varchar(4) NOT NULL DEFAULT '', + `timeformat` varchar(4) NOT NULL DEFAULT '', + `timezone` varchar(5) NOT NULL DEFAULT '', + `dst` tinyint(1) NOT NULL DEFAULT '0', + `dstcorrection` tinyint(1) NOT NULL DEFAULT '0', + `buddylist` text NOT NULL, + `ignorelist` text NOT NULL, + `style` smallint(5) unsigned NOT NULL DEFAULT '0', + `away` tinyint(1) NOT NULL DEFAULT '0', + `awaydate` int(10) unsigned NOT NULL DEFAULT '0', + `returndate` varchar(15) NOT NULL DEFAULT '', + `awayreason` varchar(200) NOT NULL DEFAULT '', + `pmfolders` text NOT NULL, + `notepad` text NOT NULL, + `referrer` int(10) unsigned NOT NULL DEFAULT '0', + `referrals` int(10) unsigned NOT NULL DEFAULT '0', + `reputation` int(11) NOT NULL DEFAULT '0', + `regip` varbinary(16) NOT NULL DEFAULT '', + `lastip` varbinary(16) NOT NULL DEFAULT '', + `language` varchar(50) NOT NULL DEFAULT '', + `timeonline` int(10) unsigned NOT NULL DEFAULT '0', + `showcodebuttons` tinyint(1) NOT NULL DEFAULT '1', + `totalpms` int(10) unsigned NOT NULL DEFAULT '0', + `unreadpms` int(10) unsigned NOT NULL DEFAULT '0', + `warningpoints` int(3) unsigned NOT NULL DEFAULT '0', + `moderateposts` tinyint(1) NOT NULL DEFAULT '0', + `moderationtime` int(10) unsigned NOT NULL DEFAULT '0', + `suspendposting` tinyint(1) NOT NULL DEFAULT '0', + `suspensiontime` int(10) unsigned NOT NULL DEFAULT '0', + `suspendsignature` tinyint(1) NOT NULL DEFAULT '0', + `suspendsigtime` int(10) unsigned NOT NULL DEFAULT '0', + `coppauser` tinyint(1) NOT NULL DEFAULT '0', + `classicpostbit` tinyint(1) NOT NULL DEFAULT '0', + `loginattempts` smallint(2) unsigned NOT NULL DEFAULT '1', + `usernotes` text NOT NULL, + `sourceeditor` tinyint(1) NOT NULL DEFAULT '0' +) ENGINE=MyISAM AUTO_INCREMENT=88 DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `mybb_users` +-- + +INSERT INTO `mybb_users` (`uid`, `username`, `password`, `salt`, `loginkey`, `email`, `postnum`, `threadnum`, `avatar`, `avatardimensions`, `avatartype`, `usergroup`, `additionalgroups`, `displaygroup`, `usertitle`, `regdate`, `lastactive`, `lastvisit`, `lastpost`, `website`, `icq`, `aim`, `yahoo`, `skype`, `google`, `birthday`, `birthdayprivacy`, `signature`, `allownotices`, `hideemail`, `subscriptionmethod`, `invisible`, `receivepms`, `receivefrombuddy`, `pmnotice`, `pmnotify`, `buddyrequestspm`, `buddyrequestsauto`, `threadmode`, `showimages`, `showvideos`, `showsigs`, `showavatars`, `showquickreply`, `showredirect`, `ppp`, `tpp`, `daysprune`, `dateformat`, `timeformat`, `timezone`, `dst`, `dstcorrection`, `buddylist`, `ignorelist`, `style`, `away`, `awaydate`, `returndate`, `awayreason`, `pmfolders`, `notepad`, `referrer`, `referrals`, `reputation`, `regip`, `lastip`, `language`, `timeonline`, `showcodebuttons`, `totalpms`, `unreadpms`, `warningpoints`, `moderateposts`, `moderationtime`, `suspendposting`, `suspensiontime`, `suspendsignature`, `suspendsigtime`, `coppauser`, `classicpostbit`, `loginattempts`, `usernotes`, `sourceeditor`) VALUES +(84, 'Test One', '6e90cf918ebce3a577fd72cea919dc64', '0pBnrIIv', 'xALZxWcfw18AhO6M7YxptBrxZqyrJB04CWlyaIniO3ZyMn6P1f', 'no_one@nowhere.com', 0, 0, '', '', '', 2, '', 0, '', 1471614765, 1471614765, 1471614765, 0, '', '0', '', '', '', '', '', 'all', '', 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 'linear', 1, 1, 1, 1, 1, 1, 0, 0, 0, '0', '0', '0', 0, 2, '', '', 0, 0, 0, '0', '', '', '', 0, 0, 0, '', '', '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, '', 0), +(85, 'Test Two', 'e85f6b7e5804b42d7c7d99329dc1a43f', 'NSX3xNT1', 'VucYxl7EGnsoqVW75COGNAdB0YgtWHc9RFqo4LxIhhtpEFxdIE', 'no_one@nowhere.com', 0, 0, '', '', '', 3, '', 0, '', 1471614850, 1471614850, 1471614850, 0, '', '0', '', '', '', '', '', 'all', '', 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 'linear', 1, 1, 1, 1, 1, 1, 0, 0, 0, '0', '0', '0', 0, 2, '', '', 0, 0, 0, '0', '', '', '', 0, 0, 0, '', '', '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, '', 0), +(86, 'Test Three', '3669c9583702ca6e32c7817f4bc34f5f', 'CVEbGFXH', 'GivwOlOKuvpfTs8Dc263fNnPdSQW1k1C1fHt7gukTJdRvTZGca', 'no_one@nowhere.com', 0, 0, '', '', '', 4, '', 0, '', 1471615021, 1471615021, 1471615021, 0, '', '0', '', '', '', '', '', 'all', '', 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 'linear', 1, 1, 1, 1, 1, 1, 0, 0, 0, '0', '0', '0', 0, 2, '', '', 0, 0, 0, '0', '', '', '', 0, 0, 0, '', '', '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, '', 0), +(87, 'Test Four', '693a0cd028c9adb4cb28d8a8be3dc7af', 'x6q7QFmU', 'S4oU92jET3yjvbiganAKCYde9ksoacJeb4sC247qvYftgwsYmu', 'no_one@nowhere.com', 0, 0, '', '', '', 6, '', 0, '', 1471615064, 1471615064, 1471615064, 0, '', '0', '', '', '', '', '', 'all', '', 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 'linear', 1, 1, 1, 1, 1, 1, 0, 0, 0, '0', '0', '0', 0, 2, '', '', 0, 0, 0, '0', '', '', '', 0, 0, 0, '', '', '', 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, '', 0); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `mybb_users` +-- +ALTER TABLE `mybb_users` + ADD PRIMARY KEY (`uid`), + ADD UNIQUE KEY `username` (`username`), + ADD KEY `usergroup` (`usergroup`), + ADD KEY `regip` (`regip`), + ADD KEY `lastip` (`lastip`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `mybb_users` +-- +ALTER TABLE `mybb_users` + MODIFY `uid` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=88; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/lib/plugins/authpdo/auth.php b/lib/plugins/authpdo/auth.php index b78b0e7408c965cb18fa42565ca0c2938b67d1e8..64ef941153b8056bb5589ba0e3f0196009e2d569 100644 --- a/lib/plugins/authpdo/auth.php +++ b/lib/plugins/authpdo/auth.php @@ -97,12 +97,21 @@ class auth_plugin_authpdo extends DokuWiki_Auth_Plugin { ) ); - // can real names and emails be changed? - $this->cando['modName'] = $this->cando['modMail'] = $this->_chkcnf( + // can real names be changed? + $this->cando['modName'] = $this->_chkcnf( array( 'select-user', 'select-user-groups', - 'update-user-info' + 'update-user-info:name' + ) + ); + + // can real email be changed? + $this->cando['modMail'] = $this->_chkcnf( + array( + 'select-user', + 'select-user-groups', + 'update-user-info:mail' ) ); @@ -151,16 +160,26 @@ class auth_plugin_authpdo extends DokuWiki_Auth_Plugin { */ public function checkPass($user, $pass) { - $data = $this->_selectUser($user); - if($data == false) return false; + $userdata = $this->_selectUser($user); + if($userdata == false) return false; - if(isset($data['hash'])) { + // password checking done in SQL? + if($this->_chkcnf(array('check-pass'))) { + $userdata['clear'] = $pass; + $userdata['hash'] = auth_cryptPassword($pass); + $result = $this->_query($this->getConf('check-pass'), $userdata); + if($result === false) return false; + return (count($result) == 1); + } + + // we do password checking on our own + if(isset($userdata['hash'])) { // hashed password $passhash = new PassHash(); - return $passhash->verify_hash($pass, $data['hash']); + return $passhash->verify_hash($pass, $userdata['hash']); } else { // clear text password in the database O_o - return ($pass == $data['clear']); + return ($pass == $userdata['clear']); } } @@ -489,7 +508,7 @@ class auth_plugin_authpdo extends DokuWiki_Auth_Plugin { $this->_debug("Statement did not return 'user' attribute", -1, __LINE__); $dataok = false; } - if(!isset($data['hash']) && !isset($data['clear'])) { + if(!isset($data['hash']) && !isset($data['clear']) && !$this->_chkcnf(array('check-pass'))) { $this->_debug("Statement did not return 'clear' or 'hash' attribute", -1, __LINE__); $dataok = false; } @@ -716,7 +735,16 @@ class auth_plugin_authpdo extends DokuWiki_Auth_Plugin { */ protected function _chkcnf($keys) { foreach($keys as $key) { - if(!trim($this->getConf($key))) return false; + $params = explode(':', $key); + $key = array_shift($params); + $sql = trim($this->getConf($key)); + + // check if sql is set + if(!$sql) return false; + // check if needed params are there + foreach($params as $param) { + if(strpos($sql, ":$param") === false) return false; + } } return true; diff --git a/lib/plugins/authpdo/conf/default.php b/lib/plugins/authpdo/conf/default.php index 4e2503716f90f39d49cb59d8426a3a51312397ac..138ca2f109f4fd8dad7c580ebbe45ab1bf5c4cd9 100644 --- a/lib/plugins/authpdo/conf/default.php +++ b/lib/plugins/authpdo/conf/default.php @@ -18,6 +18,14 @@ $conf['pass'] = ''; */ $conf['select-user'] = ''; +/** + * statement to check the password in SQL, optional when above returned clear or hash + * + * input: :user, :clear, :hash, [uid], [*] + * return: * + */ +$conf['check-pass'] = ''; + /** * statement to select a single user identified by its login name * diff --git a/lib/plugins/authpdo/conf/metadata.php b/lib/plugins/authpdo/conf/metadata.php index 85d1c5926a61b69fcc83e2ce32833c1cc622ba90..7c2ee8cdc73897edf61d9876dc5899e7ed9d1393 100644 --- a/lib/plugins/authpdo/conf/metadata.php +++ b/lib/plugins/authpdo/conf/metadata.php @@ -10,6 +10,7 @@ $meta['dsn'] = array('string', '_caution' => 'danger'); $meta['user'] = array('string', '_caution' => 'danger'); $meta['pass'] = array('password', '_caution' => 'danger', '_code' => 'base64'); $meta['select-user'] = array('', '_caution' => 'danger'); +$meta['check-pass'] = array('', '_caution' => 'danger'); $meta['select-user-groups'] = array('', '_caution' => 'danger'); $meta['select-groups'] = array('', '_caution' => 'danger'); $meta['insert-user'] = array('', '_caution' => 'danger'); diff --git a/lib/plugins/authpdo/lang/en/settings.php b/lib/plugins/authpdo/lang/en/settings.php index 9e700690c3a88489fa6b113a0c2ef81b80855cd9..1aaaec0fdd9f2dae4bfdf18eaad916e50ea75763 100644 --- a/lib/plugins/authpdo/lang/en/settings.php +++ b/lib/plugins/authpdo/lang/en/settings.php @@ -20,5 +20,6 @@ $lang['update-user-info'] = 'SQL Statement to update the full name and email a $lang['update-user-login'] = 'SQL Statement to update the login name of a single user'; $lang['update-user-pass'] = 'SQL Statement to update the password of a single user'; $lang['insert-group'] = 'SQL Statement to insert a new group into the database'; -$lang['join-group'] = 'SQL Statement to add a user to an exisitng group'; +$lang['join-group'] = 'SQL Statement to add a user to an existing group'; $lang['leave-group'] = 'SQL Statement to remove a user from a group'; +$lang['check-pass'] = 'SQL Statement to check the password for a user. Can be left empty if password info is fetched in select-user.'; diff --git a/lib/plugins/authpdo/plugin.info.txt b/lib/plugins/authpdo/plugin.info.txt index 6784fd08368d1f4d9787c227bfa5a6642af98fb9..e60ff0ba989ce14f7d2552611fa628cc7d3142b8 100644 --- a/lib/plugins/authpdo/plugin.info.txt +++ b/lib/plugins/authpdo/plugin.info.txt @@ -1,7 +1,7 @@ base authpdo author Andreas Gohr email andi@splitbrain.org -date 2016-01-29 +date 2016-08-20 name authpdo plugin desc Authenticate against a database via PDO url https://www.dokuwiki.org/plugin:authpdo