LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Software (https://www.linuxquestions.org/questions/linux-software-2/)
-   -   Problems with Ampache (https://www.linuxquestions.org/questions/linux-software-2/problems-with-ampache-180083/)

cyris 05-10-2004 05:20 PM

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.


All times are GMT -5. The time now is 11:59 AM.