summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorKarl 'vollmerk' Vollmer <vollmer@ampache.org>2006-01-13 09:49:47 +0000
committerKarl 'vollmerk' Vollmer <vollmer@ampache.org>2006-01-13 09:49:47 +0000
commit10c147aa5e2e1be5a3d4eddebff1cdf1df0b604a (patch)
tree8433a42e47a5583b0f298a96cacc7f6f6689ae9a /modules
parentf2bf44079e365e8ff78cd48d901d5a86020bf13f (diff)
downloadampache-10c147aa5e2e1be5a3d4eddebff1cdf1df0b604a.tar.gz
ampache-10c147aa5e2e1be5a3d4eddebff1cdf1df0b604a.tar.bz2
ampache-10c147aa5e2e1be5a3d4eddebff1cdf1df0b604a.zip
removed libglue in favor of brand new vauth session handler fixes remember me
Diffstat (limited to 'modules')
-rw-r--r--modules/init.php69
-rw-r--r--modules/libglue/README393
-rw-r--r--modules/libglue/auth.php399
-rw-r--r--modules/libglue/config.php173
-rw-r--r--modules/libglue/dbh.php53
-rw-r--r--modules/libglue/libdb.php95
-rw-r--r--modules/libglue/session.php416
-rw-r--r--modules/libglue/session2.php346
-rw-r--r--modules/vauth/auth.lib.php74
-rw-r--r--modules/vauth/dbh.lib.php64
-rw-r--r--modules/vauth/init.php160
-rw-r--r--modules/vauth/session.lib.php236
12 files changed, 558 insertions, 1920 deletions
diff --git a/modules/init.php b/modules/init.php
index 34230f52..08f85645 100644
--- a/modules/init.php
+++ b/modules/init.php
@@ -76,47 +76,21 @@ if (!$results = read_config($configfile,0)) {
// Cheat a little to setup the extra vars needed by libglue
-//FIXME: Untile we have a config updater force stream as allowed playback method
+//FIXME: Until we have a config updater force stream as allowed playback method
if (!$results['conf']['allow_stream_playback']) {
$results['conf']['allow_stream_playback'] = "true";
}
$results['conf']['raw_web_path'] = $results['conf']['web_path'];
$results['conf']['web_path'] = $http_type . $_SERVER['HTTP_HOST'] . $results['conf']['web_path'];
-$results['conf']['version'] = '3.3.2-Beta2 (Build 001)';
+$results['conf']['version'] = '3.3.2-Beta2 (Build 002)';
$results['conf']['catalog_file_pattern']= 'mp3|mpc|m4p|m4a|mp4|aac|ogg|rm|wma|asf|flac|spx|ra';
-$results['libglue']['local_table'] = 'session';
-$results['libglue']['local_sid'] = 'id';
-$results['libglue']['local_expirecol'] = 'expire';
-$results['libglue']['local_usercol'] = 'username';
-$results['libglue']['local_typecol'] = 'type';
-$results['libglue']['local_datacol'] = 'value';
-$results['libglue']['mysql_table'] = 'user';
-$results['libglue']['mysql_usercol'] = 'username';
-$results['libglue']['mysql_passwdcol'] = 'password';
-$results['libglue']['local_dbh_name'] = 'local_dbh';
-$results['libglue']['auth_methods'] = 'mysql';
-$results['libglue']['user_username'] = 'username';
-$results['libglue']['mysql_fields'] = 'username,fullname,email,access,offset_limit';
-$results['libglue']['mysql_host'] = $results['libglue']['local_host'];
-$results['libglue']['mysql_db'] = $results['libglue']['local_db'];
-$results['libglue']['mysql_username'] = $results['libglue']['local_username'];
-$results['libglue']['mysql_user'] = $results['libglue']['local_username'];
-$results['libglue']['mysql_passwd'] = $results['libglue']['local_pass'];
-$results['libglue']['mysql_pass'] = $results['libglue']['local_pass'];
-$results['libglue']['mysql_passcol'] = 'password';
-$results['libglue']['dbh'] = $results['libglue']['local_dbh_name'];
-$results['libglue']['auth_page'] = $results['conf']['web_path'];
-$results['libglue']['login_page'] = $results['conf']['web_path'] . "/login.php";
$results['conf']['http_port'] = $_SERVER['SERVER_PORT'];
if (!$results['conf']['prefix']) {
$results['conf']['prefix'] = $prefix;
}
if (!$results['libglue']['stop_auth']) {
- $results['libglue']['stop_auth'] = $results['conf']['prefix'] . "/modules/libglue/gone.fishing";
-}
-if (!$results['libglue']['libglue_path']) {
- $results['libglue']['libglue_path']= $results['conf']['prefix'] . "/modules/libglue";
+ $results['libglue']['stop_auth'] = $results['conf']['prefix'] . "/modules/vauth/gone.fishing";
}
if (!$results['conf']['http_port']) {
$results['conf']['http_port'] = '80';
@@ -136,20 +110,31 @@ if (!$results['conf']['ellipse_threshold_artist']) {
if (!$results['conf']['ellipse_threshold_title']) {
$results['conf']['ellipse_threshold_title'] = 27;
}
+if (!$results['conf']['raw_web_path']) {
+ $results['conf']['raw_web_path'] = '/';
+}
+/* Variables needed for vauth Module */
+//FIXME: Rename this array as we are no longer using libglue
+$results['libglue']['cookie_path'] = $results['conf']['raw_web_path'];
+$results['libglue']['cookie_domain'] = $_SERVER['HTTP_HOST'];
+$results['libglue']['cookie_life'] = $results['libglue']['sess_cookielife'];
+$results['libglue']['session_name'] = $results['libglue']['sess_name'];
+$results['libglue']['cookie_secure'] = '0';
+$results['libglue']['session_length'] = '9000';
+$results['libglue']['mysql_password'] = $results['libglue']['local_pass'];
+$results['libglue']['mysql_username'] = $results['libglue']['local_username'];
+$results['libglue']['mysql_hostname'] = $results['libglue']['local_host'];
+$results['libglue']['mysql_db'] = $results['libglue']['local_db'];
/* Temp Fixes */
$results['conf'] = fix_preferences($results['conf']);
-
// Setup Static Arrays
-libglue_param($results['libglue']);
conf($results['conf']);
-// Libglue Requires
-require_once(libglue_param('libglue_path') . "/auth.php");
-require_once(libglue_param('libglue_path') . "/session.php");
-require_once(libglue_param('libglue_path') . "/dbh.php");
+// Vauth Requires
+require_once(conf('prefix') . '/modules/vauth/init.php');
// Librarys
require_once(conf('prefix') . '/lib/album.lib.php');
@@ -209,17 +194,11 @@ require_once(conf('prefix') . "/lib/class/access.class.php");
require_once(conf('prefix') . "/lib/class/error.class.php");
require_once(conf('prefix') . "/lib/class/genre.class.php");
-
/* Set a new Error Handler */
$old_error_handler = set_error_handler("ampache_error_handler");
-/* Some Libglue Hacks */
-$array['dbh_name'] = 'stupid_pos';
-$array['stupid_pos'] = check_sess_db('local');
-libglue_param($array);
-/* End Libglue Hacks */
-
-
+/* Initilize the Vauth Library */
+vauth_init($results['libglue']);
/* Check their PHP Vars to make sure we're cool here */
if ($results['conf']['memory_limit'] < 16) {
@@ -257,7 +236,7 @@ srand((double) microtime() * 1000003);
// If we don't want a session
if (!isset($no_session) AND conf('use_auth')) {
- if (!check_session()) { logout(); exit(); }
+ if (!vauth_check_session()) { logout(); exit(); }
init_preferences();
set_theme();
$user = new User($_SESSION['userdata']['username']);
@@ -271,7 +250,7 @@ elseif (!conf('use_auth')) {
$auth['info']['id'] = -1;
$auth['info']['access'] = "admin";
$auth['info']['offset_limit'] = 50;
- if (!check_session()) { make_local_session_only($auth); }
+ if (!vauth_check_session()) { vauth_session_create($auth); }
$user = new User(-1);
$user->fullname = $auth['info']['fullname'];
$user->offset_limit = $auth['info']['offset_limit'];
diff --git a/modules/libglue/README b/modules/libglue/README
deleted file mode 100644
index b847586b..00000000
--- a/modules/libglue/README
+++ /dev/null
@@ -1,393 +0,0 @@
-libglue - 8/17/03
-
-libglue provides a set of libraries for use with applications
-developed here at Oregon State University.
-
-This set of libraries includes:
-- mysql session handling,
-- MySQL/LDAP/'shared' authentication methods
-- a database handler
-
-Contents:
-1 Authentication Methods
- 1.1 LDAP Authentication
- 1.2 MySQL Authentication
- 1.3 Shared Authentication
-2 Database schemas
- 2.1 For Session management
- 2.2 For LDAP Authentication
- 2.3 For MySQL Authentication
- 2.4 For Shared Authentication
-3 The Config file
- 3.1 Formatting
- 3.2 Subsections
- 3.3 Arrays
- 3.3 Retrieving options
-4 Session management
-5 Libglue in action
-
-6 Help, FAQs
-
-
-1 Authentication Methods
---------------------------------------------------------------------------------
- Libglue currently supports 3 authentication methods: LDAP, MySQL, and
- 'Shared.' It can support any combination of these concurrently, by falling
- through in the order you specify (see Section 3.3).
-
- 1.1 LDAP Authentication
- ------------------------------------------------------------------------------
- To use LDAP authentication, you must have LDAP support for PHP.
- See http://php.net/manual/en/ref.ldap.php for how to configure php with LDAP.
-
- You must provide credentials for your LDAP server in the config file.
- Anonymous LDAP authentication is possible, but not with libglue today.
-
- libglue has two functions for ldap authentication, both in 'LIBGLUE/auth.php':
-
- mixed get_ldap_user($username [,$fields])
-
- object auth_ldap($username,$password)
-
- 'auth_ldap' is intended for internal use, while 'get_ldap_user' is a utility
- for app developers to use. Both have similar layouts:
-
- - connect to ldap service
- - bind to ldap with credential from config file
- - search for '$username' in the space specified in the config file
- - attempt to bind with supplied user credentials (auth_ldap only)
-
- 'get_ldap_user' returns an array of fields on success (if '$fields' is
- not specified, it will return all the information for the specified user),
- and an error string on failure.
-
- 'auth_ldap' returns an 'auth_response' object, with success indicated by
- the value of auth_response->success. (This class is defined in 'auth.php').
-
- 'auth_ldap' is typically only going to be called from a login script.
- 'get_ldap_user' could be used when granting access to a new user.
-
- Config Options:
- ldap_host
- ldap_auth_dn
- ldap_user_dn
- ldap_filter
- ldap_pass
- ldap_fields
- ldap_version
-
-
- 1.2 MySQL Authentication
- ------------------------------------------------------------------------------
- MySQL Authentication (like all of libglue) requires MySQL support in PHP.
- It defaults to using the MySQL PASSWORD() function to check passwords, but
- can also use PHP crypt() for compatability with other applications
- (pam_mysql for example).
-
- MySQL Authentication assumes the local database specified in the config file
- is being used. It is possible to support a different database, but that
- begins to duplicate functionality from Share Authentication (Section 1.3).
-
- Config Options:
- mysql_host
- mysql_db
- mysql_username
- mysql_passwd
- mysql_table
- mysql_usercol
- mysql_passcol
- mysql_other
- mysql_fields
-
- 'mysql_other' is an optional clause appended to the query.
- Ex: mysql_other = "access = 'admin'"
-
- 'mysql_fields' is a comma separated list of the fields to return from
- 'mysql_table'
- Ex: mysql_fields = 'id,username,email,homedir'
-
- 1.3 Shared Authentication
- ------------------------------------------------------------------------------
- Because libglue uses a mysql database to store session info, it is possible
- to share session information between applications, creating a "Single Sign
- On" (SSO) framework for web applications. libglue supports this out of
- the box, with the following assumptions:
- 1) The initial authentication is being handled elsewhere
- 2) "SSO" session data is stored in a mysql database.
- 3) The SSO database uses the schema described in Section 2.3.
-
- libglue keeps track of the 'type' of authentication each session uses, so
- can still use LDAP or MySQL authentication when also using SSO.
-
- Config options:
- sso_host
- sso_db
- sso_username
- sso_pass
- sso_table
- sso_sid
- sso_usercol
- sso_expirecol
- sso_length
- sso_dbh_name
-
-
-2 Database schemas
---------------------------------------------------------------------------------
-
- Below are sample schemas for use with libglue. Mandatory fields are
- indicated with a '*'. Unless stated otherwise, field NAMES can be set in
- the config file.
-
- 2.1 For Session Management
- ------------------------------------------------------------------------------
- CREATE TABLE session_data (
- * id varchar(32) NOT NULL default '',
- * username varchar(16) NOT NULL default '',
- * expire int(10) unsigned NOT NULL default '0',
- * type enum('sso','mysql','ldap') NOT NULL default 'sso',
- * data text,
- PRIMARY KEY (id))
-
- This session table should work for any type of authentication you do.
- 'id' is an md5sum by default (as generated by php) but you can make
- something else up if you've got the spare entropy. 'Type' obviously
- only applies if you're using more than 1 type of authentication,
- but the code assumes that it's present.
-
- 'data' is the field where serialized php data (from $_SESSION) is stored.
- If you overflow this field, weird things may happen.
-
-
- 2.2 For LDAP Authentication
- ------------------------------------------------------------------------------
-
- Basic LDAP authentication with libglue doesn't require a mysql database,
- only session management. However, you will most likely need to store
- some user information locally, in which case the table definition in
- Section 2.3 is a good starting point.
-
- 2.3 For MySQL Authentication
- ------------------------------------------------------------------------------
-
- CREATE TABLE user (
- * id int(11) NOT NULL default '0',
- * username varchar(255) NOT NULL default '',
- * password varchar(255) default NULL,
- fullname varchar(255) NOT NULL default '',
- email varchar(255) default NULL,
- status enum('disabled','enabled','dev') NOT NULL default 'enabled',
- expire date default NULL,
- phone varchar(255) NOT NULL default '',
- PRIMARY KEY (id),
- UNIQUE KEY username (username),
- UNIQUE KEY id (id)
- }
-
- Feel free to add columns to this table and then specify them in
- 'mysql_fields' to make them part of your session data.
-
- 2.3 For Shared Authentication
- ------------------------------------------------------------------------------
-
- If you need to store user data locally, see the definition in Section 2.3.
-
-
-3 The Config file
---------------------------------------------------------------------------------
-
- 3.1 Formatting
- ------------------------------------------------------------------------------
- The libglue config file is a lot like the smb.cnf file if you've ever used
- samba (it's really easy to parse). Options are specified like
-
- option = value
-
- 'option' is a letter followed by any number of letters or numbers.
- The spaces between 'option' and 'value' are optional.
- 'value' may be single quoted, double quoted, or not quoted at all.
- semicolons at the end of the line are ignored.
- '#' is the single-line comment character.
-
- 3.2 Subsections
- ------------------------------------------------------------------------------
- The config file parser can generate subsections in the config:
-
- > [libglue]
- > option1 = value;
- > option2 = 'value';
- > option3 = "value"
- > [conf]
- > option1 = value;
- > otheroption = othervalue;
- > [other]
- > foo = "bar";
-
- The parser then returns:
- array(
- 'libglue' => ('option1' => 'value',
- 'option2' => 'value',
- 'option3' => 'value'),
- 'conf' => ('option1' => 'value',
- 'otheroption' => 'othervalue'),
- 'other' => ('foo' => 'bar')
- );
-
- 3.3 Arrays
- ------------------------------------------------------------------------------
- You can create arrays of values in the config file by declaring an option
- multiple times:
-
- [libglue]
- ldap_fields = 'cn'
- ldap_fields = 'homedirectory'
- ldap_fields = 'uidnumber'
- ldap_fields = 'uid'
- ldap_fields = 'osuuid'
-
- would return the following:
- array(
- 'libglue' => ('ldap_fields' => (
- 0 => 'cn',
- 1 => 'homedirectory',
- 2 => 'uidnumber',
- 3 => 'uid',
- 4 => 'osuuid')
- )
- )
-
-
- 3.3 Retrieving options
- ------------------------------------------------------------------------------
- LIBGLUE/config.php defines two functions, conf() and libglue_param() for
- retrieving values from the config file. See "Libglue in action" below.
-
-
-4 Session Data and Management
---------------------------------------------------------------------------------
-
- Libglue should relieve some of the burden of session management from your app
- once a user is authenticated. The config file has the following parameters,
-
- user_data_name - Name of the array to store authentication session data in.
- Ex:
- user_data_name = 'user'
-
- Libglue then puts all the account information it retrieves
- into $_SESSION['user']
-
- user_id - fieldname for userid,
- stored in $_SESSION[user_data_name][user_id]
- user_username - fieldname for username,
- stored in $_SESSION[user_data_name][user_username]
-
- Then for each of your authentication methods:
-
- ldap_uidfield = 'uidnumber'
- ldap_usernamefield = 'uid'
- mysql_uidfield = 'id'
- mysql_usernamefield = 'username'
-
- Note that in this case, 'sso' isn't really an authentication method
- (the info has to be looked up either in ldap or mysql).
-
- What this lets you do is ignore account type in your application, since
- every session will have the same field names.
-
-
-5 Libglue in action
---------------------------------------------------------------------------------
-
- Libglue assumes there are three basic types of files in your application:
- 1) Login/Authentication page
- 2) Restricted pages
- 3) Logout/Cleanup page
-
- Example login and logout pages are in the LIBGLUE/examples directory.
-
- For (2), you'll be calling the same code over and over. It is a good idea
- to create an init file to take care of these common tasks in your application.
- In each file, you'll do a
-
- > $restricted = 1;
- > require_once('/path/to/init.php');
-
- right off the bat; libglue needs to run before anything else so it can send
- HTTP headers for cookies and redirection if necessary.
-
- Here is a sample init.php:
-
-
- <?php
- //config defines readconfig(), libglue_param(), and conf()
- require_once("/data/libglue/config.php");
- // 1st parameter is the path to the config file
- // 2nd parameter is DEBUG (1 or 0)
- // '$config' will hold the parsed config data
- $config = read_config("/data/app/conf/config.conf",0);
-
- // Register subsection 'libglue' in libglue_param()
- libglue_param($config['libglue']);
-
- //Register subsection 'app' in conf()
- conf($config['app']);
- //Require the rest of the libglue code:
- // Authentication methods:
- require_once('/data/libglue/auth.php');
- // Session handling code:
- require_once('/data/libglue/session.php');
- // Common database handle:
- require_once('/data/libglue/dbh.php');
-
- // This is optional, if you have some pages where session data and
- // authentication aren't relevant. Otherwise just do check_session().
- if($restricted === 1) check_session();
- ?>
-
- libglue_param() and conf() make use of static member variables and
- tests on paramter types to register/retrieve config data. When passed an
- array, these functions assume you're registering config options. If given
- a string, as in:
-
- $database_name = libglue_param('local_db');
-
- the function will look for the key 'local_db' in the values that have been
- previously registered with it. This is a little bit hokey, but objects
- don't yet support static members in php so it's about the best we can do.
-
-
- Session management is just taken care of; anything you put in $_SESSION in
- your app is serialized, stored in the db when the page is done redering,
- and retrieved on page load.
-
-
- Database handle management is nice with libglue; if you've defined
- 'dbh' in the config file, you can call dbh() to use that database handle again:
-
- $dbh = dbh();
- mysql_query($sql, $dbh);
-
- or
-
- mysql_query($sql, dbh());
-
-
-6 Help, FAQs
---------------------------------------------------------------------------------
-
- Libglue is distributed at:
-
- http://oss.oregonstate.edu/libglue/
-
- as it becomes more mature and widely used, this page may include more help
- documentation.
-
- For now, feel free to email
-
- cws-prog@lists.orst.edu
-
- with any questions or bug reports.
-
--- Central Web Services,
- Oregon State University
-
diff --git a/modules/libglue/auth.php b/modules/libglue/auth.php
deleted file mode 100644
index 1cd55418..00000000
--- a/modules/libglue/auth.php
+++ /dev/null
@@ -1,399 +0,0 @@
-<?php
-/* ------------------- CVS INFO ----------------------
- *
- * $Source: /data/cvsroot/ampache/libglue/auth.php,v $
- * last modified by $Author: vollmerk $ at $Date: 2003/11/27 10:19:28 $
- *
- * Libglue, a free php library for handling authentication
- * and session management.
- *
- * Written and distributed by Oregon State University.
- * http://oss.oregonstate.edu/libglue
- *
- * ---------------------------------------------------
- */
-
-//
-// Attempt to authenticate using the services in
-// auth_methods, and returns an auth_config object
-// which describes the results of the authentication
-// attempt
-function authenticate($username, $password)
-{
- // First thing to do is check for the gone fishing file:
- $stopfile = libglue_param('stop_auth');
- if ( file_exists($stopfile) )
- {
- echo "We should tell the users here that no one can log in.\n";
- exit();
- }
-
- $methods = libglue_param('auth_methods');
- if(!is_array($methods))
- {
- $auth = call_user_func("auth_$methods",$username,$password);
- }
- else
- {
- foreach($methods as $method)
- {
- $auth = call_user_func("auth_$method", $username,$password);
- if($auth['success'] == 1) break;
- }
- }
- return $auth;
-}
-
-function get_ldap_user ($username,$fields=0)
-{
- $auth = array();
-
- $auth_dn = libglue_param('ldap_auth_dn');
- $user_dn = libglue_param('ldap_user_dn');
- $filter = libglue_param('ldap_filter');
- $host = libglue_param('ldap_host');
- $pass = libglue_param('ldap_pass');
- $ldapfields = libglue_param('ldap_fields');
- $protocol = libglue_param('ldap_version');
-
- // can we even connect?
- if ( $ldap_link = @ldap_connect( $host ) )
- {
-
- //Snazzy new protocol stuff
- if(!empty($protocol)) ldap_set_option($ldap_link,
- LDAP_OPT_PROTOCOL_VERSION,
- $protocol);
-
- // now try and bind with system credentials for searching.
- if ( @ldap_bind($ldap_link, $filter."".$auth_dn, $pass) )
- {
- // now search and retrieve our user data
- $ldap_uid = libglue_param('ldap_uidfield');
- $ldap_username = libglue_param('ldap_usernamefield');
-
- //force uid and username to be part of the query
- if(!in_array($ldap_uid,$ldapfields)) $ldapfields[] = $ldap_uid;
- if(!in_array($ldap_username,$ldapfields)) $ldapfields[] = $ldap_username;
-
- $sr = ldap_search($ldap_link, $user_dn, "(".$filter."".$username.")", $ldapfields, 0, 1);
-/* $sr = @ldap_search($ldap_link, $user_dn, "(".$filter."".$username.")");*/
-
- //info will contain a 1-element array with our user's info
- $info = ldap_get_entries($ldap_link, $sr);
-
- foreach($ldapfields as $field)
- {
- $auth[$field] = $info[0][$field][0];
- }
- $sess_username = libglue_param('user_username');
- $sess_id = libglue_param('user_id');
- $auth[$sess_username] = $username;
- $auth[$sess_id] = $info[0][$ldap_uid][0];
- }
-
- //
- // Here means we couldn't use the service.
- // So it's most likely config related.
- // Check the username and password?
- //
- else
- { $auth['error'] = libglue_param('bad_auth_cred'); }
- }
-
- //
- // This most often will mean we can't reach the server.
- // Perhaps it's down, or we mistyped the address.
- //
- else
- { $auth['error'] = libglue_param('connect_error'); }
-
- // Done with the link, give it back
- ldap_close($ldap_link);
-
- $auth_methods = libglue_param('auth_methods');
- if(!is_array($auth_methods)) $auth_methods = array($auth_methods);
- if(in_array('sso',$auth_methods,TRUE)) $auth['type'] = 'sso';
- else $auth['type'] = 'ldap';
- return $auth;
-}
-
-function get_mysql_user ($username,$fields=null)
-{
- $auth = array();
- $dbh = dbh();
- $user_table = libglue_param('mysql_table');
- $mysql_uid = libglue_param('mysql_uidfield');
- $mysql_username = libglue_param('mysql_usernamefield');
- $mysql_fields = libglue_param('mysql_fields');
- $sql = "SELECT ";
- if(is_null($fields)) $sql .= " * ";
- else
- {
- if(!is_array($fields)) $fields = array($fields);
- foreach($fields as $field)
- {
- $sql .= "$field,";
- }
- $sql = substr($sql, 0, strlen($sql)-1);
- }
-
- $sql .= " FROM $user_table WHERE $mysql_username = '$username'";
- $result = mysql_query($sql, $dbh);
-
- foreach($ldapfields as $field)
- {
- $auth[$field] = $info[0][$field][0];
- }
- $sess_username = libglue_param('user_username');
- $sess_id = libglue_param('user_id');
- $auth[$sess_username] = $username;
- $auth[$sess_id] = $info[0][$ldap_uid][0];
-
- $auth['type'] = 'mysql';
- return $auth;
-}
-
-
-function auth_ldap ($username, $password)
-{
- $auth = array();
- $auth['success'] = 0; // don't want to keep setting this
- $auth_dn = libglue_param('ldap_auth_dn');
- $user_dn = libglue_param('ldap_user_dn');
- $filter = libglue_param('ldap_filter');
- $host = libglue_param('ldap_host');
- $pass = libglue_param('ldap_pass');
- $ldapfields = libglue_param('ldap_fields');
- // Did we get fed proper variables?
- if(!$username || !$password)
- {
- $auth['error'] = libglue_param('empty_field');
- // I'm not a huge fan of returning here,
- // but why force more logic?
- return $auth;
- }
-
- // can we even connect?
- if ( $ldap_link = @ldap_connect( $host ) )
- {
- // now try and bind with system credentials for searching.
- if ( @ldap_bind($ldap_link, $filter."".$auth_dn, $pass) )
- {
- // now search and retrieve our user data
- $ldap_uid = libglue_param('ldap_uidfield');
- $ldap_username = libglue_param('ldap_usernamefield');
-
- //force uid and username to be part of the query
- if(!in_array($ldap_uid,$ldapfields)) $ldapfields[] = $ldap_uid;
- if(!in_array($ldap_username,$ldapfields)) $ldapfields[] = $ldap_username;
-
- $sr = ldap_search($ldap_link, $user_dn, "(".$filter."".$username.")", $ldapfields, 0, 1);
- //info will contain a 1-element array with our user's info
- $info = @ldap_get_entries($ldap_link, $sr);
-
- //
- // The real authentication:
- // binding here with the user's credentials
- //
- //if ( ldap_bind($ldap_link, $user_dn, $password) ) {
- if ( ($info["count"] == 1) && (@ldap_bind($ldap_link,
- $info[0]['dn'],
- $password) ) )
- {
- $auth['info'] = array();
- foreach($ldapfields as $field)
- {
- $auth['info'][$field] = $info[0][$field][0];
- }
- $sess_username = libglue_param('user_username');
- $sess_id = libglue_param('user_id');
- $auth['info'][$sess_username] = $username;
- $auth['info'][$sess_id] = $info[0][$ldap_uid][0];
- $auth['success'] = 1;
- }
- else
- {
- // show the error here, better than anything I can come up with
- // most likely bad username or password
- // We'll handle two cases, where the username doesn't exist,
- // and where more than 1 exists separately in case we
- // decide to do some logging or something fancy someday
- if($info["count"] == 0)
- {
- $auth['error'] = libglue_param('login_failed');
- }
- else
- {
- // We could return the error here
- // EXCEPT that we want the error message to be the same
- // for a bad password as a bad username
- // $auth->error = ldap_error($ldap_link);
- $auth['error'] = libglue_param('login_failed');
- }
- }
- }
-
- //
- // Here means we couldn't use the service.
- // So it's most likely config related.
- // Check the username and password?
- //
- else
- {
- $auth['error'] = libglue_param('bad_auth_cred');
- }
- }
-
- //
- // This most often will mean we can't reach the server.
- // Perhaps it's down, or we mistyped the address.
- //
- else
- {
- $auth['error'] = libglue_param('connect_error');
- }
-
- // Done with the link, give it back
- ldap_close($ldap_link);
- $auth['type'] = 'ldap';
- return $auth;
-}
-
-/*
- * MySQL authentication.
- * returns true/false depending on whether the user was authenticated
- * successfully
- * The crypt settings below assume the php crypt() function created the passwords.
- * But hopson updated it to use mysql PASSWORD() instead
- */
-
-function auth_mysql($username, $password) {
-
- $auth = array();
- $auth['success'] = 0;
-
- // Did we get fed proper variables?
- if(!$username or !$password) {
- $auth['error'] = 'Empty username/password';
- return $auth;
- }
-
- //
- // Retrieve config parameters set in config.php
- //
- $dbhost = libglue_param('mysql_host');
- $dbuser = libglue_param('mysql_user');
- $dbpass = libglue_param('mysql_pass');
- $dbname = libglue_param('mysql_db');
- $passfield = libglue_param('mysql_passcol');
- $table = libglue_param('mysql_table');
- $usercol = libglue_param('mysql_usercol');
- $other = libglue_param('mysql_other');
- $fields = libglue_param('mysql_fields');
-
-
- $mysql_uidfield = libglue_param('mysql_uidfield');
- $mysql_usernamefield = libglue_param('mysql_usernamefield');
-
- if(!preg_match("/$mysql_uidfield/",$fields)) $fields .= ",$mysql_uidfield";
- if(!preg_match("/$mysql_usernamefield/",$fields)) $fields .= ",$mysql_usernamefield";
-
- if($other == '') $other = '1=1';
-
- if ($mysql_link = @mysql_connect($dbhost,$dbuser,$dbpass))
- {
- //
- // now retrieve the stored password to use as salt
- // for password checking
- //
- $sql = "SELECT $passfield FROM $table" .
- " WHERE $usercol = '$username' " .
- " AND $other LIMIT 1";
- @mysql_select_db($dbname, $mysql_link);
- $result = @mysql_query($sql, $mysql_link);
- $row = @mysql_fetch_array($result);
-
- $password_check_sql = "PASSWORD('$password')";
-
- $sql = "SELECT version()";
- $db_results = @mysql_query($sql, $mysql_link);
- $version = @mysql_fetch_array($db_results);
-
- $mysql_version = substr(preg_replace("/(\d+)\.(\d+)\.(\d+).*/","$1$2$3",$version[0]),0,3);
-
- if ($mysql_version > "409" AND substr($row[0],0,1) !== "*") {
- $password_check_sql = "OLD_PASSWORD('$password')";
- }
-
- $sql = "SELECT $fields FROM $table" .
- " WHERE $usercol = '$username'" .
- " AND $passfield = $password_check_sql" .
- " AND $other LIMIT 1";
- $rs = @mysql_query($sql, $mysql_link);
- //This should only fail on a badly formed query.
- if(!$rs)
- {
- $auth['error'] = @mysql_error();
- }
-
- //
- // Retrieved the right info, set auth->success and info.
- //
- if (@mysql_num_rows($rs) == 1)
- {
- // username and password are successful
- $row = mysql_fetch_array($rs);
- $sess_username = libglue_param('user_username');
- $sess_id = libglue_param('user_id');
- $auth[$info][$sess_username] = $row[$mysql_usernamefield];
- $auth[$info][$sess_id] = $row[$mysql_uidfield];
- $auth[$info] = $row;
- $auth['info'] = $row;
- $auth['success'] = 1;
- }
-
- //
- // We didn't find anything matching. No user, bad password, ?
- //
- else
- {
- $auth['error'] = libglue_param('login_failed');
- }
- }
-
- //
- // Couldn't connect to database at all.
- //
- else
- {
- $auth['error'] = libglue_param('bad_auth_cred');
- }
-
- $auth['type'] = 'mysql';
- return $auth;
-
-} // auth_mysql
-
-
-function auth_sso ($username, $password)
-{
- $auth = new auth_response();
- $auth->success = 0;
- $auth->error = "SSO Authentication failed.";
- return $auth;
-}
-
-// This is the auth_response class that will be returned during
-// and authentication - this allows us to set some variables
-// by the session for later lookup
-class auth_response {
- var $username;
- var $userid;
- var $error;
- var $success;
- var $info;
-}
-
-
-?>
diff --git a/modules/libglue/config.php b/modules/libglue/config.php
deleted file mode 100644
index c1ca07a8..00000000
--- a/modules/libglue/config.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-
-function read_config($config_file, $debug = 0) {
- $fp = fopen($config_file,'r');
- if(!is_resource($fp)) die("Can't open config file $config_file");
- $file_data = fread($fp,filesize($config_file));
- fclose($fp);
-
- // explode the var by \n's
- $data = explode("\n",$file_data);
- if($debug) echo "<pre>";
-
- $count = 0;
- $config_name = '';
- foreach($data as $value)
- {
- $count++;
- if (preg_match("/^\[([A-Za-z]+)\]$/",$value,$matches))
- {
- // If we have previous data put it into $results...
- if (!empty($config_name) && count(${$config_name})) $results[$config_name] = ${$config_name};
- $config_name = $matches[1];
- } // if it is a [section] name
-
- elseif ($config_name)
- {
- // if it's not a comment
- if (preg_match("/^(\w[\w\d]*)\s*=\s*\"{1}(.*?)\"{1};*$/",$value,$matches)
- || preg_match("/^(\w[\w\d]*)\s*=\s*\'{1}(.*?)\'{1};*$/", $value, $matches)
- || preg_match("/^(\w[\w\d]*)\s*=\s*[\'\"]{0}(.*)[\'\"]{0};*$/",$value,$matches))
- {
- if (isset(${$config_name}[$matches[1]]) && is_array(${$config_name}[$matches[1]]) && isset($matches[2]) )
- {
- if($debug)
- echo "Adding value <strong>$matches[2]</strong> to existing key <strong>$matches[1]</strong>\n";
- array_push(${$config_name}[$matches[1]], $matches[2]);
- }
- elseif (isset(${$config_name}[$matches[1]]) && isset($matches[2]) )
- {
- if($debug)
- echo "Adding value <strong>$matches[2]</strong> to existing key $matches[1]</strong>\n";
- ${$config_name}[$matches[1]] = array(${$config_name}[$matches[1]],$matches[2]);
- }
- elseif ($matches[2] !== "")
- {
- if($debug)
- echo "Adding value <strong>$matches[2]</strong> for key <strong>$matches[1]</strong>\n";
- ${$config_name}[$matches[1]] = $matches[2];
- }
-
- // if there is something there and it's not a comment
- elseif ($value{0} !== "#" AND strlen(trim($value)) > 0)
- {
- echo "Error Invalid Config Entry --> Line:$count"; die;
- } // else if it's not a comment and there is something there
-
- else
- {
- if($debug)
- echo "Key <strong>$matches[1]</strong> defined, but no value set\n";
- }
- } // end if it's not a comment
-
- } // else if no config_name
-
-
- elseif (preg_match("/^([\w\d]+)\s+=\s+[\"]{1}(.*?)[\"]{1}$/",$value,$matches)
- || preg_match("/^([\w\d]+)\s+=\s+[\']{1}(.*?)[\']{1}$/", $value, $matches)
- || preg_match("/^([\w\d]+)\s+=\s+[\'\"]{0}(.*)[\'\"]{0}$/",$value,$matches))
- {
- if (is_array($results[$matches[1]]) && isset($matches[2]) )
- {
- if($debug)
- echo "Adding value <strong>$matches[2]</strong> to existing key <strong>$matches[1]</strong>\n";
- array_push($results[$matches[1]], $matches[2]);
- }
- elseif (isset($results[$matches[1]]) && isset($matches[2]) )
- {
- if($debug)
- echo "Adding value <strong>$matches[2]</strong> to existing key $matches[1]</strong>\n";
- $results[$matches[1]] = array($results[$matches[1]],$matches[2]);
- }
- elseif ($matches[2] !== "")
- {
- if($debug)
- echo "Adding value <strong>$matches[2]</strong> for key <strong>$matches[1]</strong>\n";
- $results[$matches[1]] = $matches[2];
- }
-
- // if there is something there and it's not a comment
- elseif ($value{0} !== "#" AND strlen(trim($value)) > 0)
- {
- echo "Error Invalid Config Entry --> Line:$count"; die;
- } // else if it's not a comment and there is something there
-
- else
- {
- if($debug)
- echo "Key <strong>$matches[1]</strong> defined, but no value set\n";
- }
-
- } // end else
-
- } // foreach
-
- if (count(${$config_name}))
- {
- $results[$config_name] = ${$config_name};
- }
-
- if($debug) echo "</pre>";
-
- return $results;
-
-} // end read_config
-
-function libglue_param($param,$clobber=0)
-{
- static $params = array();
- if(is_array($param))
- //meaning we are setting values
- {
- foreach ($param as $key=>$val)
- {
- if(!$clobber && isset($params[$key]))
- {
- echo "Error: attempting to clobber $key = $val\n";
- exit();
- }
- $params[$key] = $val;
- }
- return true;
- }
- else
- //meaning we are trying to retrieve a parameter
- {
- if(isset($params[$param])) return $params[$param];
- else return false;
- }
-}
-
-function conf($param,$clobber=0)
-{
- static $params = array();
- if(is_array($param))
- //meaning we are setting values
- {
- foreach ($param as $key=>$val)
- {
- if(!$clobber && isset($params[$key]))
- {
- echo "Error: attempting to clobber $key = $val\n";
- exit();
- }
- $params[$key] = $val;
- }
- return true;
- }
- else
- //meaning we are trying to retrieve a parameter
- {
- if(isset($params[$param])) return $params[$param];
- else return false;
- }
-}
-
-function dbh($str='')
-{
- if($str !== '') $dbh = libglue_param(libglue_param($str));
- else $dbh = libglue_param(libglue_param('dbh'));
- if(!is_resource($dbh)) die("Bad database handle: $dbh");
- else return $dbh;
-}
diff --git a/modules/libglue/dbh.php b/modules/libglue/dbh.php
deleted file mode 100644
index 92824efc..00000000
--- a/modules/libglue/dbh.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/*
- * ---------------------------- CVS INFO --------------------------------
- *
- * $Source: /data/cvsroot/ampache/libglue/dbh.php,v $
- * last modified by $Author: vollmerk $ at $Date: 2003/11/24 05:53:13 $
- *
- * Libglue, a free php library for handling authentication
- * and session management.
- *
- * Written and distributed by Oregon State University.
- * http://oss.oregonstate.edu/libglue
- *
- * -----------------------------------------------------------------------
- */
-
-/*----------------------------------------------------------------------
-
- For complete information on this toolkit see the README located in this
- directory.
-
- This is the database handler class. This will setup and return a
- database handle for use in your application. Simply pass it a
- username and password. If an error occurs you'll be presented with
- a verbose reason for the error.
-----------------------------------------------------------------------*/
-
-function setup_sess_db($name, $host, $db, $username, $password)
-{
- $dbh = mysql_connect($host, $username, $password) or header("Location:" . conf('web_path') . "/test.php");
- if ( !is_resource($dbh) )
- {
- echo "Unable to connect to \"". $host ."\" in order to \n" .
- "use the \"". $db ."\" database with account \"".$username." : ".$password.
- "\"\n . Perhaps the database is not " .
- "running, \nor perhaps the admin needs to change a few variables in\n ".
- "the config files in order to point to the correct database.\n";
- echo "Details: " .
- mysql_errno() . ": " .
- mysql_error() . "\n";
- die();
- }
-
- else
- {
- @mysql_select_db($db, $dbh) or header("Location:" . conf('web_path') . "/test.php");
- libglue_param(array($name=>$dbh));
- }
-
- return $dbh;
-}
-
-?>
diff --git a/modules/libglue/libdb.php b/modules/libglue/libdb.php
deleted file mode 100644
index 00e8a9b2..00000000
--- a/modules/libglue/libdb.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-//
-// PHP itself sort of supports the behavior defined here,
-// but I don't trust it, and I think it's better to do
-// application-level database abstraction.
-//
-
-function db_connect($host='localhost',$user=null,$password=null)
-{
- static $dbh = null;
- // If we haven't already connected, do so
- // The first call must include this info
- // Subsequent calls that provide this info may bork db_query() below if you're not careful,
- // but until I can have static class variables, I'm not going to make an object
- // out of this mojo.
- if(!empty($host) && isset($user) && isset($password)) $dbh = @mysql_connect($host,$user,$password);
-
- // If we've already connected successfully, we're good
- if(is_resource($dbh)){ return $dbh; }
- // On a failed connection, let's just die?
- else die("Unable to create database connection in db_connect()");
-}
-
-function db_makeinsert($vars, $table)
-{
- static $tables = array();
- $dbh = db_connect();
- if(!isset($tables[$table])) $tables[$table] = db_describe($table);
- $fields = $tables[$table];
-
- foreach($fields as $field)
- {
- //only addslashes if magic quotes is off
- if(get_magic_quotes_gpc) $vars[$field['Field']] = stripslashes($vars[$field['Field']]);
- addslashes($vars[$field['Field']]);
-
- if(isset($vars[$field['Field']]))
- {
-
- $q1 = isset($q1)? $q1.','.$field['Field']:'INSERT INTO '.$table.'('.$field['Field'];
- $q2 = isset($q2)? $q2.",\"".$field[$var['Field']]."\"":" VALUES(\"".$vars[$field['Field']]."\"";
- }
- }
- $q1.=')';
- $q2.=')';
- $query = $q1.$q2;
- return $query;
-}
-
-
-function db_select($database, $dbh=null)
-{
- if(is_resource($dbh)) @mysql_select_db($database);
- else @mysql_select_db($database, db_connect());
-}
-
-function db_describe($thingy)
-{
- $descriptions = array();
- foreach( (explode(',',$thingy)) as $field)
- {
- db_query("DESCRIBE $field");
- while($row = db_fetch()){ $descriptions[] = $row; }
- }
- return $descriptions;
-}
-
-function db_query($qry=null, $dbh=null)
-{
- static $result = null;
- if(!is_resource($dbh)) $dbh = db_connect();
- if(is_null($qry))
- {
- if(is_resource($result)) return $result;
- else return false;
- }
- else
- {
- $result = @mysql_query($qry, $dbh);
- return $result;
- }
-}
-
-function db_fetch($result=null)
-{
- if(!is_resource($result)) return @mysql_fetch_array(db_query());
- else return @mysql_fetch_array($result);
-}
-
-function db_scrub($var,$htmlok=false)
-{
- if(!get_magic_quotes_gpc()) $var = addslashes($var);
- return $var;
-}
-
diff --git a/modules/libglue/session.php b/modules/libglue/session.php
deleted file mode 100644
index 7f18ce8a..00000000
--- a/modules/libglue/session.php
+++ /dev/null
@@ -1,416 +0,0 @@
-<?php
-/* ------------------- CVS INFO ----------------------
- *
- * $Source: /data/cvsroot/ampache/libglue/session.php,v $
- * last modified by $Author: vollmerk $ at $Date: 2003/11/24 05:53:13 $
- *
- * Libglue, a free php library for handling authentication
- * and session management.
- *
- * Written and distributed by Oregon State University.
- * http://oss.oregonstate.edu/libglue
- *
- * ---------------------------------------------------
- */
-
-
-function check_sess_db($dbtype = 'local') {
-
- if($dbtype === 'sso') {
- $dbh = libglue_param(libglue_param('sso_dbh_name'));
- if(is_resource($dbh)) return $dbh;
- $dbh_name = libglue_param('sso_dbh_name');
- $host = libglue_param('sso_host');
- $db = libglue_param('sso_db');
- $user = libglue_param('sso_username');
- $pass = libglue_param('sso_pass');
- $name = libglue_param('sso_dbh_name');
- }
- elseif($dbtype === 'local')
- {
- $dbh = libglue_param(libglue_param('local_dbh_name'));
- if(is_resource($dbh)) return $dbh;
- $dbh_name = libglue_param('local_dbh_name');
- $host = libglue_param('local_host');
- $db = libglue_param('local_db');
- $user = libglue_param('local_username');
- $pass = libglue_param('local_pass');
- $name = libglue_param('local_dhb_name');
- }
- $dbh = setup_sess_db($dbh_name,$host,$db,$user,$pass);
-
- if(is_resource($dbh)) return $dbh;
- else die("Could not connect to $dbtype database for session management");
-}
-
-//
-// Really we are just checking the session here -- we want to see if
-
-// if the user has a valid session, if they do then we'll let them do
-// what they need to do.
-//
-
-function check_session($id=0)
-{
- //If an id isn't passed in, retrieve one from the cookie
- if($id===0) {
-
- /*
- We don't need to set cookie params here php
- is smart enough to know which cookie it wants
- via the session_name. Setting cookie params
- here sometimes made php create a new cookie
- which is very bad :) -- Vollmer
- */
- $name = libglue_param('sess_name');
- if($name) session_name($name);
-
- // Start the session, then get the cookie id
- session_start();
- $id = strip_tags($_COOKIE[$name]);
- }
-
- // Determine if we need to check the SSO database:
- $auth_methods = libglue_param('auth_methods');
- if(!is_array($auth_methods)) $auth_methods = array($auth_methods);
- $sso_mode = in_array('sso',$auth_methods,TRUE);
-
- $local = get_local_session($id);
- if($sso_mode) $sso = get_sso_session($id);
-
- if($sso_mode && !$sso)
- {
- return FALSE;
- }
- else if ($sso_mode && is_array($sso))
- {
- if(is_array($local)) return TRUE;
- else
- {
- //
- // Should we do gc here, just in case
- // local is only expired?
- // (The insert in make_local_session
- // will fail if we don't)
- //
- $newlocal = make_local_session_sso($sso);
- return $newlocal;
- }
- }
- //If we get here, we're not using SSO mode
- else if (!is_array($local))
- {
- return FALSE;
- }
- else return TRUE;
-}
-
-function make_local_session_only($data,$id=0)
-{
- if($id===0)
- {
- $name = libglue_param('sess_name');
- $domain = libglue_param('sess_domain');
- if($name) session_name($name);
- //Lifetime of the cookie:
- $cookielife = libglue_param('sess_cookielife');
- if(empty($cookielife)) $cookielife = 0;
- //Secure cookie?
- $cookiesecure = libglue_param('sess_cookiesecure');
- if(empty($cookiesecure)) $cookiesecure = 0;
- //Cookie path:
- $cookiepath = libglue_param('sess_cookiepath');
- if(empty($cookiepath)) $cookiepath = '/';
-
- if(!empty($domain)) session_set_cookie_params($cookielife,$cookiepath,$domain,$cookiesecure);
-
- // Start the session
- session_start();
-
-
- /*
- Before a refresh we do not have a cookie value
- here so let's use session_id() --Vollmer
- */
- $id = session_id();
- }
-
- $userfield = libglue_param('user_username');
- $username = $data['info'][$userfield];
- $type = $data['type'];
-
- $local_dbh = check_sess_db('local');
- $local_table = libglue_param('local_table');
- $local_sid = libglue_param('local_sid');
- $local_usercol = libglue_param('local_usercol');
- $local_datacol = libglue_param('local_datacol');
- $local_expirecol = libglue_param('local_expirecol');
- $local_typecol = libglue_param('local_typecol');
- $sql= "INSERT INTO $local_table ".
- " ($local_sid,$local_usercol,$local_typecol,value)".
- " VALUES ('$id','$username','$type','')";
- $db_result = mysql_query($sql, $local_dbh);
-
- if($db_result) return TRUE;
- else return FALSE;
-}
-
-function make_local_session_sso($sso_session)
-{
- $sso_usercol = $sso_session[libglue_param('sso_usercol')];
- $sso_sid = $sso_session[libglue_param('sso_sid')];
- $sso_expire = $sso_session[libglue_param('sso_expirecol')];
-
- $user = get_ldap_user($sso_usercol);
-
- $data = array('user'=>$user);
-
- //Somewhat stupidly, we have to initialize $_SESSION here,
- // or sess_write will blast it for us
- $_SESSION = $data;
-
- $db_data = serialize($data);
- $local_dbh = check_sess_db('local');
-
- //Local stuff we need:
- $local_table = libglue_param('local_table');
- $local_sid = libglue_param('local_sid');
- $local_usercol = libglue_param('local_usercol');
- $local_datacol = libglue_param('local_datacol');
- $local_expirecol = libglue_param('local_expirecol');
- $local_typecol = libglue_param('local_typecol');
- $sql= "INSERT INTO $local_table ".
- " ($local_sid,$local_usercol,$local_datacol,$local_expirecol,$local_typecol)".
- " VALUES ('$sso_sid','$sso_usercol','$db_data','$sso_expire','sso')";
- $db_result = mysql_query($sql, $local_dbh);
-
- if($db_result) return TRUE;
- else return FALSE;
-}
-
-function get_local_session($sid)
-{
- $local_table = libglue_param('local_table');
- $local_sid = libglue_param('local_sid');
- $local_expirecol = libglue_param('local_expirecol');
- $local_length = libglue_param('local_length');
- $local_usercol = libglue_param('local_usercol');
- $local_datacol = libglue_param('local_datacol');
- $local_typecol = libglue_param('local_typecol');
-
- $local_dbh = check_sess_db('local');
- $time = time();
- $sql = "SELECT * FROM $local_table WHERE $local_sid='$sid' AND $local_expirecol > $time";
- $db_result = mysql_query($sql, $local_dbh);
- $session = mysql_fetch_array($db_result);
-
- if(is_array($session)) $retval = $session;
- else $retval = FALSE;
-
- if($retval === FALSE)
- {
- //Find out what's going on
- }
-
- return $retval;
-}
-
-function get_sso_session($sid)
-{
- $sso_table = libglue_param('sso_table');
- $sso_sid = libglue_param('sso_sid');
- $sso_expirecol = libglue_param('sso_expirecol');
- $sso_length = libglue_param('sso_length');
- $sso_usercol = libglue_param('sso_usercol');
-
- $sso_dbh = check_sess_db('sso');
- $time = time();
- $sql = "SELECT * FROM $sso_table WHERE $sso_sid='$sid' AND $sso_expirecol > $time";
- $db_result = mysql_query($sql, $sso_dbh);
- $sso_session = mysql_fetch_array($db_result);
-
- $retval = (is_array($sso_session))?$sso_session:FALSE;
- return $retval;
-}
-
-
-
-// This will start the session tools, then destroy anything in the database then
-// clear all of the session information
-function logout ($id=0)
-{
- sess_destroy($id);
- $login_page = libglue_param('login_page');
- // should clear both the database information as well as the
- // current session info
- header("Location: $login_page");
- die();
- return true;
-}
-
-// Double checks that we have a database handle
-// Args are completely ignored - we're using a database here
-function sess_open($save_path, $session_name)
-{
- $local_dbh = check_sess_db();
- if ( !is_resource($local_dbh) )
- {
- echo "<!-- Unable to connect to local server in order to " .
- "use the session database. Perhaps the database is not ".
- "running, or perhaps the admin needs to change a few variables in ".
- "the config file in order to point to the correct ".
- "database.-->\n";
- return FALSE;
- }
-
- $auth_methods = libglue_param('auth_methods');
- if(!is_array($auth_methods)) $auth_methods = array($auth_methods);
- if(in_array('sso',$auth_methods,TRUE))
- {
- $sso_dbh = check_sess_db('sso');
- if ( !is_resource($sso_dbh) )
- {
- echo "<!-- Unable to connect to the SSO server in order to " .
- "use the session database. Perhaps the database is not ".
- "running, or perhaps the admin needs to change a few variables in ".
- "modules/include/global_settings in order to point to the correct ".
- "database.-->\n";
- return FALSE;
- }
- }
- return TRUE;
-}
-
-// Placeholder function, does nothing
-function sess_close()
-{
- return true;
-}
-
-// Retrieve session identified by 'key' from the database
-// and return the data field
-function sess_read($key)
-{
- $retval = 0;
- $session = get_local_session($key);
- $datacol = libglue_param('local_datacol');
- if(is_array($session)) $retval = $session[$datacol];
- else $retval = "";
- return $retval;
-}
-
-
-//
-// Save the session data $val to the database
-//
-function sess_write($key, $val)
-{
- $local_dbh = check_sess_db('local');
- $local_datacol = libglue_param('local_datacol');
- $local_table = libglue_param('local_table');
- $local_sid = libglue_param('local_sid');
-
- $auth_methods = libglue_param('auth_methods');
- $local_expirecol = libglue_param('local_expirecol');
- $local_length = libglue_param('local_length');
- $time = $local_length+time();
-
- // If they've got the long session
- if ($_COOKIE['amp_longsess'] == '1') {
- $time = time() + 86400*364;
- }
-
- if(!is_array($auth_methods)) $auth_methods = array($auth_methods);
- if(!in_array('sso',$auth_methods,TRUE))
- {
- // If not using sso, we now need to update the expire time
- $sql = "UPDATE $local_table SET $local_datacol='" . sql_escape($val) . "',$local_expirecol='$time'".
- " WHERE $local_sid = '$key'";
- }
- else $sql = "UPDATE $local_table SET $local_datacol='" . sql_escape($val) . "',$local_expirecol='$time'".
- " WHERE $local_sid = '$key'";
-
- return mysql_query($sql, $local_dbh);
-}
-
-//
-// Remove the current session from the database.
-//
-function sess_destroy($id=0)
-{
- if($id == 0) {
- session_start();
- $id = session_id();
- }
-
- $auth_methods = libglue_param('auth_methods');
- if(!is_array($auth_methods)) $auth_methods = array($auth_methods);
- if(in_array('sso',$auth_methods,TRUE))
- {
- $sso_sid = libglue_param('sso_sid');
- $sso_table = libglue_param('sso_table');
- $sso_dbh = check_sess_db('sso');
- $sql = "DELETE FROM $sso_table WHERE $sso_sid = '$id' LIMIT 1";
- $result = mysql_query($sql, $sso_dbh);
- }
- $local_sid = libglue_param('local_sid');
- $local_table = libglue_param('local_table');
-
- $local_dbh = check_sess_db('local');
- $sql = "DELETE FROM $local_table WHERE $local_sid = '$id' LIMIT 1";
- $result = mysql_query($sql, $local_dbh);
- $_SESSION = array();
-
- /* Delete the long ampache session cookie */
- setcookie ("amp_longsess", "", time() - 3600);
-
- /* Delete the ampache cookie as well... */
- setcookie (libglue_param('sess_name'),"", time() - 3600);
-
- return TRUE;
-}
-
-//
-// This function is called with random frequency
-// to remove expired session data
-//
-function sess_gc($maxlifetime)
-{
- $auth_methods = libglue_param('auth_methods');
- if(!is_array($auth_methods)) $auth_methods = array($auth_methods);
- if(in_array('sso',$auth_methods,TRUE))
- {
- //Delete old sessions from SSO
- // We do 'where length' so we don't accidentally blast
- // another app's sessions
- $sso_expirecol = libglue_param('sso_expirecol');
- $sso_table = libglue_param('sso_table');
- $sso_length = libglue_param('sso_length');
- $local_length = libglue_param('local_length');
-
- $sso_dbh = check_sess_db('sso');
- $time = time();
- $sql = "DELETE FROM $sso_table WHERE $sso_expirecol < $time".
- " AND $sso_length = '$local_length'";
- $result = mysql_query($sql, $sso_dbh);
- }
- $local_expirecol = libglue_param('local_expirecol');
- $local_table = libglue_param('local_table');
- $time = time();
- $local_dbh = check_sess_db('local');
- $sql = "DELETE FROM $local_table WHERE $local_expirecol < $time";
- $result = mysql_query($sql, $local_dbh);
- return true;
-}
-
-//
-// Register all our cool session handling functions
-//
-session_set_save_handler(
- "sess_open",
- "sess_close",
- "sess_read",
- "sess_write",
- "sess_destroy",
- "sess_gc");
-?>
diff --git a/modules/libglue/session2.php b/modules/libglue/session2.php
deleted file mode 100644
index 171dc1ca..00000000
--- a/modules/libglue/session2.php
+++ /dev/null
@@ -1,346 +0,0 @@
-<?php
- require_once('libdb.php');
-
-function libglue_sess_db($dbtype = 'local')
-{
- if($dbtype === 'sso')
- {
- $dbh = libglue_param(libglue_param('sso_dbh_name'));
- if(is_resource($dbh)) return $dbh;
- $dbh_name = libglue_param('sso_dbh_name');
- $host = libglue_param('sso_host');
- $db = libglue_param('sso_db');
- $user = libglue_param('sso_username');
- $pass = libglue_param('sso_pass');
- $name = libglue_param('sso_dbh_name');
- }
- elseif($dbtype === 'local')
- {
- $dbh = libglue_param(libglue_param('local_dbh_name'));
- if(is_resource($dbh)) return $dbh;
- $dbh_name = libglue_param('local_dbh_name');
- $host = libglue_param('local_host');
- $db = libglue_param('local_db');
- $user = libglue_param('local_username');
- $pass = libglue_param('local_pass');
- $name = libglue_param('local_dhb_name');
- }
- $dbh = db_connect($host,$user,$pass);
- db_select($db);
- libglue_param(array($dbh_name=>$dbh));
-
- if(is_resource($dbh)) return $dbh;
- else die("Could not connect to $dbtype database for session management");
-}
-
-/* This function is public */
-function check_session($id=null)
-{
- if(is_null($id))
- {
- //From Karl Vollmer, vollmerk@net.orst.edu:
- // naming the session and starting it is sufficient
- // to retrieve the cookie
- $name = libglue_param('sess_name');
- if(!empty($name)) session_name($name);
- session_start();
- $id = strip_tags($_COOKIE[$name]);
- }
-
- // Now what we have a session id, let's verify it:
- if(libglue_sso_mode())
- {
- // if sso mode, we must have a valid sso session already
- $sso_sess = libglue_sso_check($id);
- if(!is_null($sso_sess))
- {
- // if sso is valid, it's okay to create a new local session
- if($local_sess = libglue_local_check($id))
- {
- return true;
- }
- else
- {
- libglue_local_create($id,
- $sso_sess[libglue_param('sso_username_col')],
- 'sso',
- $sso_sess[libglue_param('sso_expire_col')]);
- return true;
- }
- }
- else
- // libglue_sso_check failed
- {
- libglue_sess_destroy($id);
- return false;
- }
- }
- else
- {
- //if not in sso mode, there must be a local session
- if($local_sess = libglue_local_check($id))
- {
- return true;
- }
- else
- {
- //you're gone buddy
- libglue_sess_destroy($id);
- return false;
- }
- }
-}
-
-// private function, don't ever use this:
-function libglue_sso_mode()
-{
- $auth_methods = libglue_param('auth_methods');
- if(!is_array($auth_methods)) $auth_methods = array($auth_methods);
- return (in_array('sso',$auth_methods))?true:false;
-}
-
-function libglue_sso_check($sess_id)
-{
- // Read the sso info from the config file:
- $sso_table = libglue_param('sso_table');
- $sso_sid = libglue_param('sso_sessid_col');
- $sso_expire_col = libglue_param('sso_expire_col');
- $sso_length = libglue_param('sso_length');
- $sso_username_col = libglue_param('sso_username_col');
-
- $sso_dbh = libglue_sess_db('sso');
- $sql = "SELECT * FROM $sso_table WHERE $sso_sid='$sess_id' AND $sso_expire_col > UNIX_TIMESTAMP()";
- $db_result = db_query($sql, $sso_dbh);
- if(is_resource($db_result)) $sso_session = db_fetch($db_result);
- else $sso_session = null;
-
- $retval = (is_array($sso_session))?$sso_session:null;
- return $retval;
-}
-
-function libglue_local_check($sess_id)
-{
- static $retval = -1;
- if($retval != -1) return $retval;
-
- $local_table = libglue_param('local_table');
- $local_sid = libglue_param('local_sid');
- $local_expirecol = libglue_param('local_expirecol');
- $local_length = libglue_param('local_length');
- $local_usercol = libglue_param('local_usercol');
- $local_datacol = libglue_param('local_datacol');
- $local_typecol = libglue_param('local_typecol');
-
- $local_dbh = libglue_sess_db('local');
- $sql = "SELECT $local_datacol FROM $local_table WHERE $local_sid='$sess_id' AND $local_expirecol > UNIX_TIMESTAMP()";
- $db_result = db_query($sql, $local_dbh);
- if(is_resource($db_result)) $session = db_fetch($db_result);
- else $session = null;
-
- if(is_array($session))
- {
- $retval = $session[$local_datacol];
- }
- else $retval = null;
- return $retval;
-}
-
-function libglue_local_create($sess_id, $username, $type, $expire)
-{
- if($type === "sso" || $type === "ldap")
- $userdata = get_ldap_user($username);
- else if($type === "mysql")
- $userdata = get_mysql_user($username);
-
- $data = array(libglue_param('user_data_name')=>$userdata);
-
- // It seems we have to set $_SESSION manually, or it gets blasted
- // by php's session write handler
- $_SESSION = $data;
- $db_data = serialize($data);
- $local_dbh = libglue_sess_db('local');
-
- // Local parameters we need:
- $local_table = libglue_param('local_table');
- $local_sid = libglue_param('local_sid');
- $local_usercol = libglue_param('local_usercol');
- $local_datacol = libglue_param('local_datacol');
- $local_expirecol = libglue_param('local_expirecol');
- $local_typecol = libglue_param('local_typecol');
-
- // session data will be saved when the script terminates,
- // but not the rest of this fancy info
- $sql= "INSERT INTO $local_table ".
- " ($local_sid,$local_usercol,$local_datacol,$local_expirecol,$local_typecol)".
- " VALUES ('$sess_id','$username','$db_data','$expire','$type')";
- $db_result = db_query($sql, $local_dbh);
- if(!$db_result) die("Died trying to create local session: <pre><br>$sql</pre>");
-}
-
-function sess_open()
-{
- if(libglue_sso_mode())
- {
- if(!is_resource(libglue_sess_db('sso')))
- {
- die("<!-- Unable to connect to the SSO server in order to " .
- "use the session database. Perhaps the database is not ".
- "running, or perhaps the admin needs to change a few variables in ".
- "modules/include/global_settings in order to point to the correct ".
- "database.-->\n");
- return false;
- }
- }
-
- if(!is_resource(libglue_sess_db('local')))
- {
- die("<!-- Unable to connect to local server in order to " .
- "use the session database. Perhaps the database is not ".
- "running, or perhaps the admin needs to change a few variables in ".
- "the config file in order to point to the correct ".
- "database.-->\n");
- return false;
- }
- return true;
-}
-
-function sess_close(){ return true; }
-
-function sess_write($sess_id, $sess_data)
-{
- $local_dbh = libglue_sess_db('local');
- $local_datacol = libglue_param('local_datacol');
- $local_table = libglue_param('local_table');
- $local_sid = libglue_param('local_sid');
-
- $auth_methods = libglue_param('auth_methods');
- $local_expire = libglue_param('local_expirecol');
- $local_length = libglue_param('local_length');
- $time = $local_length+time();
-
- // If not using sso, we now need to update the expire time
- $local_expire = libglue_param('local_expirecol');
- $local_length = libglue_param('local_length');
- $time = $local_length+time();
- $sql = "UPDATE $local_table SET $local_datacol='$sess_data',$local_expire='$time'".
- " WHERE $local_sid = '$sess_id'";
- db_query($sql, $local_dbh);
-
- if(libglue_sso_mode())
- {
- $sso_table = libglue_param('sso_table');
- $sso_expire_col = libglue_param('sso_expire_col');
- $sso_sess_length = libglue_param('sso_length_col');
- $sso_sess_id = libglue_param('sso_sessid_col');
- $time = time();
- $sql = "UPDATE $sso_table SET $sso_expire_col = $sso_sess_length + UNIX_TIMESTAMP() WHERE $sso_sess_id = '$sess_id'";
- $sso_dbh = libglue_sess_db('sso');
- db_query($sql, $sso_dbh);
- }
- return true;
-}
-
-//
-// This function is called with random frequency
-// to remove expired session data
-//
-function sess_gc($maxlifetime)
-{
- if(libglue_sso_mode())
- {
- //Delete old sessions from SSO
- // We do 'where length' so we don't accidentally blast
- // another app's sessions
- $sso_expirecol = libglue_param('sso_expire_col');
- $sso_table = libglue_param('sso_table');
- $sso_length = libglue_param('sso_length_col');
- $local_length = libglue_param('local_length');
-
- $sso_dbh = libglue_sess_db('sso');
- $time = time();
- $sql = "DELETE FROM $sso_table WHERE $sso_expirecol < $time".
- " AND $sso_length = '$local_length'";
- $result = db_query($sql, $sso_dbh);
- }
- $local_expire = libglue_param('local_expire');
- $local_table = libglue_param('local_table');
- $time = time();
- $local_dbh = libglue_sess_db('local');
- $sql = "DELETE FROM $local_table WHERE $local_expire < $time";
- $result = db_query($sql, $local_dbh);
- return true;
-}
-
-function libglue_sess_destroy($id=null)
-{
- if(is_null($id))
- {
- //From Karl Vollmer, vollmerk@net.orst.edu:
- // naming the session and starting it is sufficient
- // to retrieve the cookie
- $name = libglue_param('sess_name');
- if(!empty($name)) session_name($name);
- session_start();
- $id = strip_tags($_COOKIE[$name]);
- }
- if(libglue_sso_mode())
- {
- $sso_sid = libglue_param('sso_sessid_col');
- $sso_table = libglue_param('sso_table');
- $sso_dbh = libglue_sess_db('sso');
- $sql = "DELETE FROM $sso_table WHERE $sso_sid = '$id' LIMIT 1";
- $result = db_query($sql, $sso_dbh);
- }
- $local_sid = libglue_param('local_sid');
- $local_table = libglue_param('local_table');
-
- $local_dbh = libglue_sess_db('local');
- $sql = "DELETE FROM $local_table WHERE $local_sid = '$id' LIMIT 1";
- $result = db_query($sql, $local_dbh);
-
- // It is very important we destroy our current session cookie,
- // because if we don't, a person won't be able to log in again
- // without closing their browser - SSO doesn't respect
- //
- // Code from http://php.oregonstate.edu/manual/en/function.session-destroy.php,
- // Written by powerlord@spamless.vgmusic.com, 18-Nov-2002 08:41
- //
- $cookie = session_get_cookie_params();
- if ((empty($cookie['domain'])) && (empty($cookie['secure'])) )
- {
- setcookie(session_name(), '', time()-3600, $cookie['path']);
- } elseif (empty($CookieInfo['secure'])) {
- setcookie(session_name(), '', time()-3600, $cookie['path'], $cookie['domain']);
- } else {
- setcookie(session_name(), '', time()-3600, $cookie['path'], $cookie['domain'], $cookie['secure']);
- }
- // end powerloard
-
- unset($_SESSION);
- unset($_COOKIE[session_name()]);
-
- return TRUE;
-}
-
-function logout($id=null)
-{
- libglue_sess_destroy($id);
- $login_page = libglue_param('login_page');
- header("Location: $login_page");
- die();
- return true; //because why not?
-}
-
-
-//
-// Register all our cool session handling functions
-//
-session_set_save_handler(
- "sess_open",
- "sess_close",
- "libglue_local_check",
- "sess_write",
- "libglue_sess_destroy",
- "sess_gc");
-
-?>
diff --git a/modules/vauth/auth.lib.php b/modules/vauth/auth.lib.php
new file mode 100644
index 00000000..fdd3060d
--- /dev/null
+++ b/modules/vauth/auth.lib.php
@@ -0,0 +1,74 @@
+<?php
+/*
+
+ Copyright (c) 2006 Karl Vollmer
+ All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+/**
+ * Authenticate library
+ * Yup!
+ */
+
+/**
+ * authenticate
+ * This takes a username and passwords and returns false on failure
+ * on success it returns true, and the username + type in an array
+ */
+function authenticate($username,$password) {
+
+ /* Don't even try if stop auth is in place */
+ if (file_exists(vauth_conf('stop_auth'))) {
+ return false;
+ }
+
+ /* Call the functions! */
+ $results = vauth_mysql_auth($username,$password);
+
+ return $results;
+
+} // authenticate
+
+
+/**
+ * vauth_mysql_auth
+ * This functions does mysql authentication againsts a user table
+ * That has a username and a password field change it if you don't like it!
+ */
+function vauth_mysql_auth($username,$password) {
+
+ $username = sql_escape($username);
+ $password = sql_escape($password);
+
+ $sql = "SELECT username FROM user WHERE username='$username' AND password=PASSWORD('$password')";
+ $db_results = mysql_query($sql, vauth_dbh());
+
+ $results = mysql_fetch_assoc($db_results);
+
+ if (!$results) {
+ return false;
+ }
+
+ $results['type'] = 'mysql';
+ $results['success'] = true;
+
+ return $results;
+
+} // vauth_mysql_auth
+
+?>
diff --git a/modules/vauth/dbh.lib.php b/modules/vauth/dbh.lib.php
new file mode 100644
index 00000000..eb3575d0
--- /dev/null
+++ b/modules/vauth/dbh.lib.php
@@ -0,0 +1,64 @@
+<?php
+/*
+
+ Copyright (c) 2006 Karl Vollmer
+ All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+/**
+ * Database Handler File
+ * This file contains functions for handling the database connection
+ * Yup!
+ */
+
+
+/**
+ * vauth_dbh
+ * Init's the dbh yea
+ */
+function vauth_dbh($handle='vauth_dbh') {
+
+ $dbh = vauth_conf($handle);
+
+ /* If we don't have a db connection yet */
+ if (!is_resource($dbh)) {
+
+ $hostname = vauth_conf('mysql_hostname');
+ $username = vauth_conf('mysql_username');
+ $password = vauth_conf('mysql_password');
+ $database = vauth_conf('mysql_db');
+
+ $dbh = mysql_pconnect($hostname, $username, $password);
+ $select_db = mysql_select_db($database, $dbh);
+
+ /* If either one of these fails */
+ if (!is_resource($dbh) || !$select_db) {
+ vauth_error('Database Connection Failed' . mysql_error());
+ return false;
+ }
+
+ vauth_conf(array($handle => $dbh),1);
+
+ } // if no db connection
+
+ return $dbh;
+
+} // vauth_dbh
+
+
+?>
diff --git a/modules/vauth/init.php b/modules/vauth/init.php
new file mode 100644
index 00000000..f79c18f6
--- /dev/null
+++ b/modules/vauth/init.php
@@ -0,0 +1,160 @@
+<?php
+/*
+
+ Copyright (c) 2006 Karl Vollmer
+ All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+/**
+ * init script
+ * This script requires all of the additional libraries and does a little error checking to
+ * make sure that we've got the variables we need to make everything work.
+ * Be default you should include this file then call the vauth_init() function
+ * passing in an array of the elements we need (see more docs that in theory I'll write)
+ */
+
+/**
+ * vauth_init
+ * This function loads in the extra lib files and checks the data we've got
+ * If it doesn't find everything it needs it will return use PHP's Error method
+ * to throw an exception and return false
+ */
+function vauth_init($data) {
+
+ /* Check for the variables we are going to need first */
+ if (isset($data['auth_methods']['mysql'])) {
+ if (!isset($data['mysql_hostname'])) {
+ vauth_error('No Mysql Hostname Defined [mysql_hostname]');
+ $error_status = true;
+ }
+ if (!isset($data['mysql_db'])) {
+ vauth_error('No Mysql Database Defined [mysql_db]');
+ $error_status = true;
+ }
+ if (!isset($data['mysql_username'])) {
+ vauth_error('No Mysql Username Defined [mysql_username]');
+ $error_status = true;
+ }
+ if (!isset($data['mysql_password'])) {
+ vauth_error('No Mysql Password Defined [mysql_password]');
+ $error_status = true;
+ }
+ } // if we're doing mysql auth
+
+ if (isset($data['auth_methods']['ldap'])) {
+
+
+
+ } // if we're doing ldap auth
+
+ if (isset($data['auth_methods']['http'])) {
+
+
+ } // if we're doing http auth
+
+ if (!isset($data['stop_auth'])) {
+ vauth_error('No Stop File Defined [stop_auth]');
+ $error_status = true;
+ }
+
+ if (!isset($data['session_length'])) {
+ vauth_error('No Session Length Defined [session_length]');
+ $error_status = true;
+ }
+
+ if (!isset($data['session_name'])) {
+ vauth_error('No Session Name Defined [session_name]');
+ $error_status = true;
+ }
+
+ if (!isset($data['cookie_life'])) {
+ vauth_error('No Cookie Life Defined [cookie_life]');
+ $error_status = true;
+ }
+
+ if (!isset($data['cookie_secure'])) {
+ vauth_error('Cookie Secure Not Defined [cookie_secure]');
+ $error_status = true;
+ }
+
+ if (!isset($data['cookie_path'])) {
+ vauth_error('Cookie Path Not Defined [cookie_path]');
+ $error_status = true;
+ }
+
+ if (!isset($data['cookie_domain'])) {
+ vauth_error('Cookie Domain Not Defined [cookie_domain]');
+ $error_status = true;
+ }
+
+ /* If an error has occured then return false */
+ if ($error_status) { return false; }
+
+ /* Load the additional libraries that we may or may not need... */
+ require_once 'dbh.lib.php';
+ require_once 'session.lib.php';
+ require_once 'auth.lib.php';
+
+ vauth_conf($data);
+
+ return true;
+
+} // vauth_init
+
+/**
+ * vauth_error
+ * This function throws a PHP error with whatever went wrong. If you don't use a custom
+ * Error handler this will get spit out the screen, otherwise well whatever you do with it
+ * is what is going to happen to it... amazing huh!
+ */
+function vauth_error($string) {
+
+ trigger_error($string,E_USER_WARNING);
+ return true;
+
+} // vauth_error
+
+
+/**
+ * vauth_conf
+ * This is a function with a static array that we store the configuration variables in
+ * So we don't have to worry about globalizing anything
+ */
+function vauth_conf($param,$clobber=0) {
+
+ static $params = array();
+
+ // We are trying to set variables
+ if(is_array($param)) {
+ foreach ($param as $key=>$val) {
+ if(!$clobber && isset($params[$key])) {
+ vauth_error("Attempting to clobber $key = $val");
+ return false;
+ }
+ $params[$key] = $val;
+ }
+ return true;
+ }
+ // We are attempting to retrive a variable
+ else {
+ if($params[$param]) return $params[$param];
+ else return;
+ }
+
+} // vauth_conf
+
+?>
diff --git a/modules/vauth/session.lib.php b/modules/vauth/session.lib.php
new file mode 100644
index 00000000..680f3f9e
--- /dev/null
+++ b/modules/vauth/session.lib.php
@@ -0,0 +1,236 @@
+<?php
+/*
+
+ Copyright (c) 2006 Karl Vollmer
+ All rights reserved.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+/**
+ * Session Library
+ * This sets up the custom session handler mojo
+ * and then contains the functions that the session handler references
+ */
+
+/* Always register the customer handler */
+session_set_save_handler(
+ 'vauth_sess_open',
+ 'vauth_sess_close',
+ 'vauth_sess_read',
+ 'vauth_sess_write',
+ 'vauth_sess_destory',
+ 'vauth_sess_gc');
+
+/**
+ * vauth_sess_open
+ * This is the function for opening a new session, we just verify that we have a
+ * database connection, nothing more (since this is a dbh session handler
+ */
+function vauth_sess_open($save_path,$session_name) {
+
+ if (!is_resource(vauth_dbh())) {
+ vauth_error('Session open failed, no database handle');
+ return false;
+ }
+
+ return true;
+
+} // vauth_sess_open
+
+/**
+ * vauth_sess_close
+ * Placeholder function, don't have anything to do in this one for now
+ */
+function vauth_sess_close() {
+ return true;
+} // vauth_sess_close
+
+/**
+ * vauth_sess_read
+ * Takes a Key and looks in the database, and returns the value
+ */
+function vauth_sess_read($key) {
+
+ $results = vauth_get_session($key);
+ if (!is_array($results)) {
+ vauth_error('Unable to read session data');
+ return '';
+ }
+
+ /* Return the value column from the db */
+ return $results['value'];
+
+} // vauth_sess_read
+
+/**
+ * vauth_sess_write
+ * Saves the session information to the database
+ */
+function vauth_sess_write($key,$value) {
+
+ $length = vauth_conf('session_length');
+ $expire = time() + intval($length);
+ $value = sql_escape($value);
+ $key = sql_escape($key);
+
+ $sql = "UPDATE session SET value='$value', expire='$expire'" .
+ " WHERE id='$key'";
+ $db_results = mysql_query($sql, vauth_dbh());
+
+ return $db_results;
+
+} // vauth_sess_write
+
+/**
+ * vauth_sess_destory
+ * This removes the specified session from the database
+ */
+function vauth_sess_destory($key) {
+
+ $key = sql_escape($key);
+
+ /* Remove any database entries */
+ $sql = "DELETE FROM session WHERE id='$key'";
+ $db_results = mysql_query($sql, vauth_dbh());
+
+ /* Destory the Cookie */
+ setcookie (vauth_conf('session_name'),'',time() - 86400);
+
+ return true;
+
+} // vauth_sess_destory
+
+/**
+ * vauth_sess_gc
+ * This is the randomly called garbage collection function
+ */
+function vauth_sess_gc($maxlifetime) {
+
+ $sql = "DELETE FROM session WHERE expire < '" . time() . "'";
+ $db_results = mysql_query($sql, vauth_dbh());
+
+ return true;
+
+} // vauth_sess_gc
+
+/**
+ * vauth_logout
+ * This logs you out of your vauth session
+ */
+function vauth_logout($key) {
+
+ vauth_sess_destory($key);
+ return true;
+
+} // vauth_logout
+
+/**
+ * vauth_get_session
+ * This returns the data for the specified session
+ */
+function vauth_get_session($key) {
+
+ $key = sql_escape($key);
+
+ $sql = "SELECT * FROM session WHERE id='$key' AND expire > '" . time() . "'";
+ $db_results = mysql_query($sql, vauth_dbh());
+
+ $results = mysql_fetch_assoc($db_results);
+
+ return $results;
+
+} // vauth_get_session
+
+
+/**
+ * vauth_session_create
+ * This is called when you want to create a new session
+ * It takes care of setting the initial cookie, and inserting the first chunk
+ * of data
+ */
+function vauth_session_create($data) {
+
+ /* Set the Cookies Paramaters, this is very very important */
+ $cookie_life = vauth_conf('cookie_life');
+ $cookie_path = vauth_conf('cookie_path');
+ $cookie_domain = vauth_conf('cookie_domain');
+ $cookie_secure = vauth_conf('cookkie_secure');
+
+ session_set_cookie_params($cookie_life,$cookie_path,$cookie_domain,$cookie_secure);
+
+ session_name(vauth_conf('session_name'));
+
+ /* Start the Session */
+ session_start();
+
+ /* Before a refresh we don't have the cookie, so use session_id() */
+ $key = session_id();
+
+ $username = sql_escape($data['username']);
+ $type = sql_escape($data['type']);
+ $value = sql_escape($data['value']);
+
+ /* Insert the row */
+ $sql = "INSERT INTO session (`id`,`username`,`type`,`value`) " .
+ " VALUES ('$key','$username','$type','$value')";
+ $db_results = mysql_query($sql, vauth_dbh());
+
+ return $db_results;
+
+} // vauth_session_create
+
+/**
+ * vauth_check_session
+ * This checks for an existing session, and if it's still there starts it and returns true
+ */
+function vauth_check_session() {
+
+ /* Make sure we're still valid */
+ $session_name = vauth_conf('session_name');
+
+ $key = scrub_in($_COOKIE[$session_name]);
+
+ $results = vauth_get_session($key);
+
+ if (!is_array($results)) {
+ return false;
+ }
+
+ /* Check for Rememeber Me */
+ $cookie_name = vauth_conf('session_name') . "_remember";
+ if ($_COOKIE[$cookie_name]) {
+ $month = 86400*30;
+ vauth_conf(array('cookie_life'=>$month),1);
+ }
+
+ /* Set the Cookie Paramaters */
+ session_set_cookie_params(
+ vauth_conf('cookie_life'),
+ vauth_conf('cookie_path'),
+ vauth_conf('cookie_domain'),
+ vauth_conf('cookie_secure'));
+
+ /* Set Session name so it knows what cookie to get */
+ session_name($session_name);
+
+ session_start();
+
+ return true;
+
+} // vauth_check_session
+
+?>