<?php
// lock.inc.php - v1 8-3-2002 
/* use this to put variables in forms you don't want people changeing (ala, 
   SQL ID variables) just to make it easier on you.  won't prevent the user
   from seeing the variable, and if they know the lock key, they can change
   it anyways (which would be useful in some situations)

   Author: Craig Calef <craig@dod.net>
*/

if(!isset($params))
$params array_merge($HTTP_POST_VARS$HTTP_GET_VARS);

if(!isset(
$lockkey))
    
$lockkey "too many secrets";
/**
 * generate security warnings and stop page rendering if lock is invalid
 */
function enforceLock($name)
{
    global 
$lockkey;
    if(
checkLock($name))
        return;
    else {
        echo 
"<h3>*** SECURITY VIOLATION DETECTED!  LOCKED VARIABLE CHANGED! ***";
        die(
"security violation!  locked data changed");
    }
}

/**
 * this value should be unchanged.
 */
function checkLock($name)
{
    global 
$lockkey;
    global 
$params;
    
$lockvar $name "_lock";
    
$varval $params[$name];
    
$lockval $params[$lockvar];
    
//echo $lockkey . "<BR>" . $varval . "<BR>" . $lockvar . "<BR>" . $name . "<BR>";
    
if(isset($varval) && isset($lockval))
    {
        
$hash md5($lockkey $varval);
        if(
$hash == $lockval)
            return 
true;
    } else {
        echo 
"LOCK NOT PRESENT";
        return 
false;
    }
    return 
false;
}

/**
 * output a hidden variable with a hidden lock
 */
function lockInput($name$value)
{
    global 
$lockkey;
    
$hash md5($lockkey $value);
    echo 
"<INPUT TYPE='hidden' NAME='". ($name "_lock") . "' VALUE='$hash'/>";
    echo 
"<INPUT TYPE='hidden' NAME='$name' VALUE='$value'/>";
}
?>