tpar44
tpar44

Reputation: 1451

Global variables in PHP Not Being Set Correctly

I am new to PHP and having trouble using Global variables. I have a global array called profile. However, when I declare access the contents of a specific index of profile, 'authorized', the value does not change outside of the function is was set in. I fear that it might be due to the fact that the 'authorized' index was not declared in the array when the array was declared. However, there are instances of this occurring with other indexes so I'm not really sure. Any help would be really helpful!

Declaration of profile:

/**
 * User profile
 * @name $profile
 * @global array $GLOBALS['profile']
 */
$GLOBALS['profile'] = array(
    # Basic Config - Required
'username' => 'tom',
'x' => 'filler',
'y' => 'filler',
'salt' => 'filler',

    # Optional Config - Please see README before setting these
#   'microid'   =>  array('mailto:user@site', 'http://delegator'),
#   'pavatar'   =>  'http://your.site.com/path/pavatar.img',

    # Advanced Config - Please see README before setting these
    'allow_gmp' =>  true,
#   'allow_test'    =>  false,
#   'allow_suhosin' =>  false,
#   'auth_realm'    =>  'phpMyID',
#   'force_bigmath' =>  false,
#   'idp_url'   =>  'http://192.168.1.5/MyID.config.php',
#   'lifetime'  =>  1440,
#   'paranoid'  =>  false, # EXPERIMENTAL

    # Debug Config - Please see README before setting these
#   'debug'     =>  false,
#   'logfile'   =>  '/tmp/phpMyID.debug.log',
);

Function where profile['authorized'] is set:

/**
 *Handles the validation of the signature from the user
 */
function validate_mode()
{
global $profile;

user_session();


$qString = strtoupper('abc');
$pString = strtoupper('abc');
$gString = '10';
$aString = strtoupper($_POST['a']);
$zString = strtoupper($_POST['z']);
$yString = strtoupper($_POST['y']);
$cString = $_POST['c'];
$c = gmp_init($cString, 16);
//echo$cString;

$q1 = gmp_init($qString, 16);
$p1 = gmp_init($pString, 16);
$g1 = gmp_init($gString, 16);
$a = gmp_init($aString, 16);
$z = gmp_init($zString, 16);
//$hex_y = base64_decode(yString);
$y = gmp_init($yString, 16);
//echo $yString;

$hash = sha1($pString,false);

$hash = $hash . sha1($qString,false);
$hash = $hash . sha1($gString,false);
$hash = $hash . sha1($yString,false);
$hash = $hash . sha1($cString,false);
$hash = $hash . sha1($aString,false);
$full_hash =sha1($hash,false);

//echo $full_hash;
if (gmp_cmp($z, $q1) < 0)
    {
        $temp_ans = gmp_powm($a, $q1, $p1);
        if (gmp_cmp($temp_ans, 1) == 0)
        {

                $this_hash = gmp_init($full_hash, 16);
                $temp_pow = gmp_powm($g1,$z,$p1);
                $temp_inner =gmp_powm($y,$this_hash, $p1);
                $temp_mid = gmp_mul($a, $temp_inner);
                $temp_pow2 = gmp_mod($temp_mid, $p1);

                if (gmp_cmp($temp_pow, $temp_pow2) == 0)
                {   
                    $compare = strcmp($cString,$_SESSION['challenge']);
                    if ($compare == 0)
                    {
                        $_SESSION['auth_url'] = $profile['idp_url'];

                        $profile['authorized'] = true;
                        // return to the refresh url if they get in
                        wrap_redirect($profile['idp_url']."?openid.mode=id_res");
                    }//ends the $compare == 0;
                    else 
                        echo "The session stored challenge value does not match the one supplied"."\n";
                }//ends the gmp_cmp if statement.
                else
                    echo"g^z mod p doesn't equal a*y^c mod p"."\n";
        }//ends the if($temp_ans ==1)
        else
            echo"a^q  mod p does not equal 1 so we exited"."\n";
    }//ends the if comparing of z and q
    else
        echo"Z is greater than Q so it is exiting"."<br>";
}//ends the validate mode

The function where profile['authorized'] is accessed and the value has not changed:

function id_res_mode () {
    global $profile;
echo "authorization".$profile['authorized'];
    user_session();

    if ($profile['authorized'])
        wrap_html('You are logged in as ' . $_SESSION['username']);

    wrap_html('You are not logged in');
}

Upvotes: 0

Views: 188

Answers (1)

James F
James F

Reputation: 554

You didn't declare authorized in the array. Just FYI, for next time you're debugging, you would have gotten an "undefined index" warning if you had error reporting for warnings turned on.

Upvotes: 1

Related Questions