LinuxQuestions.org
Go Job Hunting at the LQ Job Marketplace
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Software
User Name
Password
Linux - Software This forum is for Software issues.
Having a problem installing a new program? Want to know which application is best for the job? Post your question in this forum.

Notices



Reply
 
Search this Thread
Old 05-10-2004, 06:20 PM   #1
cyris
Member
 
Registered: Apr 2001
Distribution: Gentoo 1.4_rc3; Slackware 8.1; Red Hat 8.0
Posts: 49

Rep: Reputation: 15
Problems with Ampache


I am working on getting ampache installed on my server, but I have run into a problem that I can't figure out. Below are the errors I am getting and below that is a copy of the session.php file it is talking about.

Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/localhost/htdocs/ampache/libglue/session.php on line 206

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /var/www/localhost/htdocs/ampache/libglue/session.php:206) in /var/www/localhost/htdocs/ampache/libglue/session.php on line 70

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/localhost/htdocs/ampache/libglue/session.php:206) in /var/www/localhost/htdocs/ampache/libglue/session.php on line 70

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/localhost/htdocs/ampache/libglue/session.php on line 206

Warning: Cannot modify header information - headers already sent by (output started at /var/www/localhost/htdocs/ampache/libglue/session.php:206) in /var/www/localhost/htdocs/ampache/libglue/session.php on line 246

Code:
<?
/* ------------------- 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)".
          " 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_expire = libglue_param('local_expirecol');
    $local_length = libglue_param('local_length');
    $time = $local_length+time();

    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
        $local_expire = libglue_param('local_expirecol');
        $local_length = libglue_param('local_length');
        $time = $local_length+time();
        $sql = "UPDATE $local_table SET $local_datacol='$val',$local_expire='$time'".
               " WHERE $local_sid = '$key'";
    }
    else $sql = "UPDATE $local_table SET $local_datacol='$val',$local_expire='$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)
    // if an id is not passed in, figure it out
    {
        $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);

        session_start();

        $id = strip_tags($_COOKIE[$name]);
    }

    $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();
    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_expire = libglue_param('local_expire');
    $local_table = libglue_param('local_table');
    $time = time();
    $local_dbh = check_sess_db('local');
    $sql = "DELETE FROM $local_table WHERE $local_expire < $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");
?>
Sorry it is so long.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
cisco 350 wireless problems and suse x-server problems incognito9 Linux - Wireless Networking 5 10-14-2004 08:53 AM
Ampache Prob with SUSE 9.1 - Clients can&#180;t stream audio Bikerpete Linux - Networking 0 08-18-2004 09:31 AM
Problems with OSS while trying to avoid problems in ALSA (scratchy sound) GT_Onizuka Linux - General 1 02-06-2004 12:55 AM
Problems, problems, problems. Lets start with the soundcard Kre8ive Linux - Newbie 5 08-07-2003 02:20 AM
Problems, problems, problems. Lets start with the ES 1868 AudioDrive Kre8ive Linux - Newbie 1 08-06-2003 08:04 PM


All times are GMT -5. The time now is 10:38 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration