summaryrefslogtreecommitdiff
path: root/inc/auth/mysql.php
diff options
context:
space:
mode:
authorandi <andi@splitbrain.org>2005-06-05 12:38:42 +0200
committerandi <andi@splitbrain.org>2005-06-05 12:38:42 +0200
commitf62ea8a1d1cf10eddeae777b11420624e111b7ea (patch)
tree87a15e898308a5de1ef37874645a4cdcb83c707b /inc/auth/mysql.php
parent248a73214063d2fe47787c8c4aa292777cddb12b (diff)
downloadrpg-f62ea8a1d1cf10eddeae777b11420624e111b7ea.tar.gz
rpg-f62ea8a1d1cf10eddeae777b11420624e111b7ea.tar.bz2
directory layout cleanup !IMPORTANT
This patch changes the directory structure of dokuwiki as suggested in http://www.freelists.org/archives/dokuwiki/06-2005/msg00045.html As the changes.log is not managed through darcs you need to move it your self to the new location in data/changes.log I think I modified the code at all nessessary places, but I may have forgotten a few things. darcs-hash:20050605103842-9977f-af20f63c1d604888375d175d89ac6bd71566d47d.gz
Diffstat (limited to 'inc/auth/mysql.php')
-rw-r--r--inc/auth/mysql.php182
1 files changed, 182 insertions, 0 deletions
diff --git a/inc/auth/mysql.php b/inc/auth/mysql.php
new file mode 100644
index 000000000..758fe3b77
--- /dev/null
+++ b/inc/auth/mysql.php
@@ -0,0 +1,182 @@
+<?php
+/**
+ * MySQL authentication backend
+ *
+ * PHP's MySQL extension is needed
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//check for MySQL extension on load
+if(!function_exists('mysql_connect'))
+ msg("MySQL extension not found",-1);
+
+/**
+ * Execute SQL
+ *
+ * Executes SQL statements and returns the results as list
+ * of hashes. Returns false on error. Returns auto_increment
+ * IDs on INSERT statements.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function auth_mysql_runsql($sql_string) {
+ global $conf;
+ $cnf = $conf['auth']['mysql'];
+
+ $link = @mysql_connect ($cnf['server'], $cnf['user'], $cnf['password']);
+ if(!$link){
+ msg('MySQL: Connection to database failed!',-1);
+ return false;
+ }
+ $result = @mysql_db_query($cnf['database'],$sql_string,$link);
+ if(!$result){
+ msg('MySQL: '.mysql_error($link));
+ return false;
+ }
+
+ //mysql_db_query returns 1 on a insert statement -> no need to ask for results
+ if ($result != 1) {
+ for($i=0; $i< mysql_num_rows($result); $i++) {
+ $temparray = mysql_fetch_assoc($result);
+ $resultarray[]=$temparray;
+ }
+ mysql_free_result ($result);
+ } elseif (mysql_insert_id($link)) {
+ $resultarray = mysql_insert_id($link); //give back ID on insert
+ } else
+ $resultarray = 0; // asure that the return value is valid
+
+ mysql_close ($link);
+ return $resultarray;
+}
+
+/**
+ * Check user+password [required auth function]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct. Furtheron it
+ * might be checked wether the user is member of
+ * the right group
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @return bool
+ */
+function auth_checkPass($user,$pass){
+ global $conf;
+ $cnf = $conf['auth']['mysql'];
+
+ $sql = str_replace('%u',addslashes($user),$cnf['passcheck']);
+ $sql = str_replace('%g',addslashes($conf['defaultgroup']),$sql);
+ $result = auth_mysql_runsql($sql);
+
+ if(count($result)){
+ return(auth_verifyPassword($pass,$result[0]['pass']));
+ }else{
+ return(false);
+ }
+}
+
+/**
+ * Return user info [required auth function]
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function auth_getUserData($user){
+ global $conf;
+ $cnf = $conf['auth']['mysql'];
+
+ $sql = str_replace('%u',addslashes($user),$cnf['userinfo']);
+ $result = auth_mysql_runsql($sql);
+ if(!count($result)) return false;
+ $info = $result[0];
+
+ $sql = str_replace('%u',addslashes($user),$cnf['groups']);
+ $result = auth_mysql_runsql($sql);
+ if(!count($result)){
+ $info['grps'][] = $conf['defaultgroup'];
+ }else{
+ foreach($result as $row){
+ $info['grps'][] = $row['group'];
+ }
+ }
+
+ return $info;
+}
+
+/**
+ * Create a new User [required auth function]
+ *
+ * user string username
+ * pass string password
+ * name string full name of the user
+ * mail string email address
+ *
+ * Returns false if the user already exists, null when an error
+ * occoured and the cleartext password of the new user if
+ * everything went well.
+ *
+ * The user HAS TO be added to the default group by this
+ * function
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+function auth_createUser($user,$pass,$name,$mail){
+ global $conf;
+ $cnf = $conf['auth']['mysql'];
+
+ //check if user exists
+ $info = auth_getUserData($user);
+ if ($info != false) return false;
+
+ //get groupid of default group
+ if($cnf['getgroupid']){
+ $sql = str_replace('%g',addslashes($conf['defaultgroup']),$cnf['getgroupid']);
+ $result = auth_mysql_runsql($sql);
+ if($result === false) return null;
+ if (count($result) == 1){
+ $gid = $result[0]['gid'];
+ }else{
+ msg("MySQL: Couldn't find the default group",-1);
+ return null;
+ }
+ }
+
+ //prepare the insert
+ $sql = str_replace('%u' ,addslashes($user),$cnf['adduser']);
+ $sql = str_replace('%p' ,addslashes(auth_cryptPassword($pass)),$sql);
+ $sql = str_replace('%n' ,addslashes($name),$sql);
+ $sql = str_replace('%e' ,addslashes($mail),$sql);
+ $sql = str_replace('%gid',addslashes($gid),$sql);
+ $sql = str_replace('%g' ,addslashes($conf['defaultgroup']),$sql);
+
+ //do the insert
+ $uid = auth_mysql_runsql($sql);
+ if($uid == 0){
+ msg("Registering of the new user '$user' failed!", -1);
+ return null;
+ }
+
+ //add to default group
+ if ($cnf['addusergroup']) {
+ $sql = str_replace('%uid',addslashes($uid),$cnf['addusergroup']);
+ $sql = str_replace('%u' ,addslashes($user),$sql);
+ $sql = str_replace('%gid',addslashes($gid),$sql);
+ $sql = str_replace('%g' ,addslashes($conf['defaultgroup']),$sql);
+ $result = auth_mysql_runsql($sql);
+ if($result === false) msg("MySQL: couldn't add user to the default group");
+ }
+
+ return $pass;
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :