1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
<?php
/************
FileUserStore
A very simple user storage backend which stores users in a flat file.
Example entry in b.site:
userbackend = file, /path/to/b.users
*************/
$base = dirname(dirname(__FILE__));
require_once("$base/UserStore.php");
class FileUserStore extends UserStore {
var $file;
function FileUserStore($args) {
if (is_file($args)) {
$this->file = $args;
}
elseif (is_file($GLOBALS['docroot'] . "/" . $args)) {
$this->file = $GLOBALS['docroot'] . "/" . $args;
}
else {
$this->file = '';
}
}
function authenticate($user,$pass,&$error) {
if (!$this->file) {
$error = "The user storage file is missing.";
return;
}
elseif (!is_readable($this->file)) {
$error = "The user storage file is unreadable";
return;
}
$data = file($this->file);
$userlines = preg_grep("/$user:/",$data);
if (count($userlines)) {
$userline = current($userlines);
list($storeduser,$storedpass) = explode(":",rtrim($userline));
$seed = preg_replace('/^\$.\$(.*)\$.*$/','$1',$storedpass);
$hash_pass = crypt($pass,'$1$'.$seed);
if ($user == $storeduser && $pass == $storedpass) {
return true;
}
elseif ($user == $storeduser && $hash_pass == $storedpass) {
return true;
}
else {
$error = _("User or password is incorrect");
return false;
}
}
else {
$error = _("User or password is incorrect");
return false;
}
}
} // end class
return;
?>
|