diff options
Diffstat (limited to 'inc/auth/pgsql.php')
-rw-r--r-- | inc/auth/pgsql.php | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/inc/auth/pgsql.php b/inc/auth/pgsql.php new file mode 100644 index 000000000..b063f405e --- /dev/null +++ b/inc/auth/pgsql.php @@ -0,0 +1,135 @@ +<?php +/** + * PgSQL authentication backend + * (shamelessly based on the original auth_mysql.php ;-) + * + * PHP's PgSQL extension is needed + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Alexander Marx < mad-ml [at] madness [dot] at > + */ + +//check for Postgresql extension on load +if(!function_exists('pg_connect')) + msg("PgSQL extension not found",-1); + +/** + * Execute SQL + * + * Executes SQL statements and returns the results as list + * of hashes. Returns false on error. + * + */ +function auth_pgsql_runsql($sql_string) { + global $conf; + $cnf = $conf['auth']['pgsql']; + + if($cnf['port']) { + $port=" port=".$cnf['port']; + } + + $dsn="host=".$cnf['server']." dbname=".$cnf['database'].$port." user=".$cnf['user']." password=".$cnf['password']; + $link = pg_connect($dsn); + if(!$link){ + msg('PgSQL: Connection to database failed!',-1); + return false; + } + + $result = pg_query($link, $sql_string); + if(!$result){ + msg('PgSQL: '.pg_last_error($link)); + return false; + } + + for($i=0; $i< pg_num_rows($result); $i++) { + $temparray = pg_fetch_assoc($result); + $resultarray[]=$temparray; + } + pg_free_result($result); + pg_close($link); + return $resultarray; +} + +/** + * Check user+password [required auth function] + * + * Checks if the given user exists and the given + * plaintext password is correct + * + * @author Andreas Gohr <andi@splitbrain.org> + * @return bool + */ +function auth_checkPass($user,$pass){ + global $conf; + $cnf = $conf['auth']['pgsql']; + + $sql = str_replace('%u',addslashes($user),$cnf['userinfo']); + $result = auth_pgsql_runsql($sql); + if(count($result)>0) { + $info=$result[0]; + return auth_verifyPassword($pass, $info['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']['pgsql']; + + $sql = str_replace('%u',addslashes($user),$cnf['userinfo']); + $result = auth_pgsql_runsql($sql); + if(!count($result)) return false; + $info = $result[0]; + + $sql = str_replace('%u',addslashes($user),$cnf['groups']); + $result = auth_pgsql_runsql($sql); + if(!count($result)) return false; + foreach($result as $row){ + $info['grps'][] = $row['group']; + } + + return $info; +} + +/** + * Create a new User [required auth function] + */ +function auth_createUser($user,$pass,$name,$mail) { + global $conf; + $cnf = $conf['auth']['pgsql']; + + if($cnf['createuser']) { + $sql = str_replace('%u',addslashes($user),$cnf['userinfo']); + $result = auth_pgsql_runsql($sql); + if(count($result)>0) return false; + + $sql = str_replace('%u',addslashes($user),$cnf['createuser']); + $sql = str_replace('%p',auth_cryptPassword($pass),$sql); + $sql = str_replace('%f',addslashes($name),$sql); + $sql = str_replace('%e',addslashes($mail),$sql); + $sql = str_replace('%g',addslashes($conf['defaultgroup']),$sql); + + $result=auth_pgsql_runsql($sql); + if(count($result)) + return $pass; + } else { + msg("Sorry. Your PgSQL backend is not configured to create new users.",-1); + } + return null; +} + +//Setup VIM: ex: et ts=2 enc=utf-8 : + |