summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
Diffstat (limited to 'inc')
-rw-r--r--inc/auth.php98
-rw-r--r--inc/auth/basic.class.php26
-rw-r--r--inc/auth/plain.class.php35
-rw-r--r--inc/common.php3
-rw-r--r--inc/html.php3
-rw-r--r--inc/lang/en/lang.php3
-rw-r--r--inc/template.php6
7 files changed, 104 insertions, 70 deletions
diff --git a/inc/auth.php b/inc/auth.php
index f9d00b9b1..ddc4007cf 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -17,62 +17,25 @@
// load the the backend auth functions and instantiate the auth object
if (@file_exists(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php')) {
- require_once(DOKU_INC.'inc/auth/basic.class.php');
- require_once(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php');
+ require_once(DOKU_INC.'inc/auth/basic.class.php');
+ require_once(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php');
- $auth_class = "auth_".$conf['authtype'];
- if (!class_exists($auth_class)) $auth_class = "auth_basic";
+ $auth_class = "auth_".$conf['authtype'];
+ if (class_exists($auth_class)) {
$auth = new $auth_class();
- if ($auth->success == false) {
- msg($lang['authmodfailed'],-1);
- unset($auth);
- }
-
- // interface between current dokuwiki/old auth system and new style auth object
- function auth_canDo($fn) {
- global $auth;
- return method_exists($auth, $fn);
- }
-
- // mandatory functions - these should exist
- function auth_checkPass($user,$pass) {
- global $auth;
- return method_exists($auth,'checkPass') ? $auth->checkPass($user, $pass) : false;
- }
-
- function auth_getUserData($user) {
- global $auth;
- return method_exists($auth, 'getUserData') ? $auth->getUserData($user) : false;
- }
-
- // optional functions, behave gracefully if these don't exist;
- // potential calling code should query whether these exist in advance
- function auth_createUser($user,$pass,$name,$mail) {
- global $auth;
- return method_exists($auth, 'createUser') ? $auth->createUser($user,$pass,$name,$mail) : null;
- }
-
- function auth_modifyUser($user, $changes) {
- global $auth;
- return method_exists($auth, 'modifyUser') ? $auth->modifyUser($user,$changes) : false;
- }
-
- function auth_deleteUsers($users) {
- global $auth;
- return method_exists($auth, 'deleteUsers') ? $auth->deleteUsers($users) : 0;
- }
-
- // other functions, will only be accessed by new code
- //- these must query auth_canDo() or test method existence themselves.
-
- } else {
- // old style auth functions
- require_once(DOKU_INC.'inc/auth/'.$conf['authtype'].'.php');
- $auth = null;
-
- // new function, allows other parts of dokuwiki to know what they can and can't do
- function auth_canDo($fn) { return function_exists("auth_$fn"); }
- }
+ if ($auth->success == false) {
+ unset($auth);
+ msg($lang['authtempfail'], -1);
+
+ // turn acl config setting off for the rest of this page
+ $conf['useacl'] = 0;
+ }
+ } else {
+ die($lang['authmodfailed']);
+ }
+ } else {
+ die($lang['authmodfailed']);
+ }
if (!defined('DOKU_COOKIE')) define('DOKU_COOKIE', 'DW'.md5($conf['title']));
@@ -88,7 +51,7 @@
// do the login either by cookie or provided credentials
if($conf['useacl']){
// external trust mechanism in place?
- if(auth_canDo('trustExternal') && !is_null($auth)){
+ if(!is_null($auth) && $auth->canDo('trustExternal')){
$auth->trustExternal($_REQUEST['u'],$_REQUEST['p'],$_REQUEST['r']);
}else{
auth_login($_REQUEST['u'],$_REQUEST['p'],$_REQUEST['r']);
@@ -134,14 +97,15 @@ function auth_login($user,$pass,$sticky=false){
global $USERINFO;
global $conf;
global $lang;
+ global $auth;
$sticky ? $sticky = true : $sticky = false; //sanity check
if(isset($user)){
//usual login
- if (auth_checkPass($user,$pass)){
+ if ($auth->checkPass($user,$pass)){
// make logininfo globally available
$_SERVER['REMOTE_USER'] = $user;
- $USERINFO = auth_getUserData($user); //FIXME move all references to session
+ $USERINFO = $auth->getUserData($user); //FIXME move all references to session
// set cookie
$pass = PMA_blowfish_encrypt($pass,auth_cookiesalt());
@@ -414,8 +378,10 @@ function auth_pwgen(){
function auth_sendPassword($user,$password){
global $conf;
global $lang;
+ global $auth;
+
$hdrs = '';
- $userinfo = auth_getUserData($user);
+ $userinfo = $auth->getUserData($user);
if(!$userinfo['mail']) return false;
@@ -444,8 +410,10 @@ function auth_sendPassword($user,$password){
function register(){
global $lang;
global $conf;
+ global $auth;
if(!$_POST['save']) return false;
+ if(!$auth->canDo('createUser')) return false;
//clean username
$_POST['login'] = preg_replace('/.*:/','',$_POST['login']);
@@ -481,7 +449,7 @@ function register(){
}
//okay try to create the user
- $pass = auth_createUser($_POST['login'],$pass,$_POST['fullname'],$_POST['email']);
+ $pass = $auth->createUser($_POST['login'],$pass,$_POST['fullname'],$_POST['email']);
if(empty($pass)){
msg($lang['reguexists'],-1);
return false;
@@ -511,11 +479,12 @@ function updateprofile() {
global $conf;
global $INFO;
global $lang;
+ global $auth;
if(!$_POST['save']) return false;
// should not be able to get here without modifyUser being possible...
- if(!auth_canDo('modifyUser')) {
+ if(!$auth->canDo('modifyUser')) {
msg($lang['profna'],-1);
return false;
}
@@ -555,7 +524,7 @@ function updateprofile() {
}
}
- return auth_modifyUser($_SERVER['REMOTE_USER'], $changes);
+ return $auth->modifyUser($_SERVER['REMOTE_USER'], $changes);
}
/**
@@ -569,11 +538,12 @@ function updateprofile() {
function act_resendpwd(){
global $lang;
global $conf;
+ global $auth;
if(!$_POST['save']) return false;
// should not be able to get here without modifyUser being possible...
- if(!auth_canDo('modifyUser')) {
+ if(!$auth->canDo('modifyUser')) {
msg($lang['resendna'],-1);
return false;
}
@@ -585,14 +555,14 @@ function act_resendpwd(){
$user = $_POST['login'];
}
- $userinfo = auth_getUserData($user);
+ $userinfo = $auth->getUserData($user);
if(!$userinfo['mail']) {
msg($lang['resendpwdnouser'], -1);
return false;
}
$pass = auth_pwgen();
- if (!auth_modifyUser($user,array('pass' => $pass))) {
+ if (!$auth->modifyUser($user,array('pass' => $pass))) {
msg('error modifying user data',-1);
return false;
}
diff --git a/inc/auth/basic.class.php b/inc/auth/basic.class.php
index f39a9c392..9ea1a598b 100644
--- a/inc/auth/basic.class.php
+++ b/inc/auth/basic.class.php
@@ -5,13 +5,26 @@
* foundation authorisation class
* all auth classes should inherit from this class
*
- * @author Chris Smith <chris@jalakaic.co.uk>
+ * @author Chris Smith <chris@jalakai.co.uk>
*/
class auth_basic {
var $success = true;
+ /**
+ * Constructor
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate.
+ *
+ * Set $this->success to false if checks fail
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+# function auth_basic() {
+# }
+
/**
* Do all authentication [ OPTIONAL ]
*
@@ -60,6 +73,17 @@ class auth_basic {
# return true;
# }
+ /**
+ * Check if authorisation mechanism supports fn and
+ * that fn will operate in the current environment
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @return bool
+ */
+ function canDo($fn) {
+ return method_exists($this, $fn);
+ }
+
/**
* Check user+password [ MUST BE OVERRIDDEN ]
*
diff --git a/inc/auth/plain.class.php b/inc/auth/plain.class.php
index 2331ae908..373bb2907 100644
--- a/inc/auth/plain.class.php
+++ b/inc/auth/plain.class.php
@@ -20,6 +20,41 @@ class auth_plain extends auth_basic {
var $users = null;
var $_pattern = array();
+
+ /**
+ * Constructor
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate.
+ *
+ * Set $this->success to false if checks fail
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function auth_plain() {
+ if (!@is_readable(AUTH_USERFILE)) $this->success = false;
+ }
+
+ /**
+ * Check if authorisation mechanism supports fn and
+ * that fn will operate in the current environment
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @return bool
+ */
+ function canDo($fn) {
+
+ switch ($fn) {
+ case 'createUser' :
+ case 'modifyUser' :
+ case 'deleteUsers' :
+ case 'joinGroup' :
+ case 'leaveGroup' :
+ return (@is_writable(AUTH_USERFILE));
+ }
+
+ return method_exists($this, $fn);
+ }
/**
* Check user+password [required auth function]
diff --git a/inc/common.php b/inc/common.php
index b5c29d621..dbd2ed451 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -1175,6 +1175,7 @@ function is_subscribed($id,$uid){
*/
function subscriber_addresslist($id){
global $conf;
+ global $auth;
$emails = '';
@@ -1188,7 +1189,7 @@ function subscriber_addresslist($id){
if(count($mlist) > 0) {
foreach ($mlist as $who) {
$who = rtrim($who);
- $info = auth_getUserData($who);
+ $info = $auth->getUserData($who);
$level = auth_aclcheck($id,$who,$info['grps']);
if ($level >= AUTH_READ) {
if (strcasecmp($info['mail'],$conf['notify']) != 0) {
diff --git a/inc/html.php b/inc/html.php
index f6950879b..7e1203950 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -47,6 +47,7 @@ function html_login(){
global $lang;
global $conf;
global $ID;
+ global $auth;
print p_locale_xhtml('login');
?>
@@ -79,7 +80,7 @@ function html_login(){
print '</p>';
}
- if (auth_canDo('modifyUser')) {
+ if ($auth->canDo('modifyUser')) {
print '<p>';
print $lang['pwdforget'];
print ': <a href="'.wl($ID,'do=resendpwd').'" class="wikilink1">'.$lang['btn_resendpwd'].'</a>';
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index a543ea46e..fc1be1a27 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -191,6 +191,7 @@ $lang['unsubscribe_success']= 'Removed %s from subscription list for %s';
$lang['unsubscribe_error'] = 'Error removing %s from subscription list for %s';
/* auth.class lanuage support */
-$lang['authmodfailed'] = 'User authentification not possible. Please inform your Wiki Admin.';
+$lang['authmodfailed'] = 'Bad user authentication configuration. Please inform your Wiki Admin.';
+$lang['authtempfail'] = 'User authentication is temporarily unavailable. If this situation persists, please inform your Wiki Admin.';
//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/inc/template.php b/inc/template.php
index 7fc824bd5..f12788834 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -304,6 +304,7 @@ function tpl_button($type){
global $NS;
global $INFO;
global $conf;
+ global $auth;
switch($type){
case 'edit':
@@ -357,7 +358,7 @@ function tpl_button($type){
print html_btn('backlink',$ID,'',array('do' => 'backlink'));
break;
case 'profile':
- if(($_SERVER['REMOTE_USER']) && auth_canDo('modifyUser') && ($ACT!='profile')){
+ if(($_SERVER['REMOTE_USER']) && $auth->canDo('modifyUser') && ($ACT!='profile')){
print html_btn('profile',$ID,'',array('do' => 'profile'));
}
break;
@@ -392,6 +393,7 @@ function tpl_actionlink($type,$pre='',$suf=''){
global $ACT;
global $conf;
global $lang;
+ global $auth;
switch($type){
case 'edit':
@@ -464,7 +466,7 @@ function tpl_actionlink($type,$pre='',$suf=''){
tpl_link(wl($ID,'do=backlink'),$pre.$lang['btn_backlink'].$suf, 'class="action backlink"');
break;
case 'profile':
- if(($_SERVER['REMOTE_USER']) && auth_canDo('modifyUser') && ($ACT!='profile')){
+ if(($_SERVER['REMOTE_USER']) && $auth->canDo('modifyUser') && ($ACT!='profile')){
tpl_link(wl($ID,'do=profile'),$pre.$lang['btn_profile'].$suf, 'class="action profile"');
}
break;