<?php
 
 
/*********************************************************************
 
 *
 
 * Pure PHP radius class challenge/response demo
 
 *
 
 * Change Log
 
 *
 
 *   2008-07-07 1.2   SysCo/al Initial release
 
 *                             Added Jon Bright (tick Trading Software AG) contribution
 
 *                              - challenge/response support demo for the RSA SecurID New-PIN mode
 
 *
 
 *********************************************************************/
 
 
 
require_once('radius.class.php');
 
 
?>
 
<html>
 
    <head>
 
        <title>
 
            Pure PHP radius class challenge/response demo
 
        </title>
 
    </head>
 
    <body>
 
        <?php
 
        if ((isset($_POST['user'])) && ('' != trim($_POST['user'])))
 
        {
 
            $radius = new Radius('127.0.0.1', 'secret');
 
 
            // Enable Debug Mode for the demonstration
 
            $radius->SetDebugMode(TRUE);
 
 
            if (isset($_POST['state']) && strlen($_POST['state'])>0 && strlen($_POST['state'])<254)
 
            {
 
                $state = $_POST['state'];
 
                $state = pack('H*', $state);
 
            }
 
            else
 
            {
 
                $state = NULL;
 
            }
 
 
            if ($radius->AccessRequest($_POST['user'], $_POST['pass'], 0, $state))
 
            {
 
                echo "<strong>Authentication accepted.</strong>";
 
            }
 
            else
 
            {
 
                if ($radius->GetReceivedPacket()==11) // Access-Challenge, sent by RSA RADIUS when PIN needs changing
 
                {
 
                    if ($radius->GetAttribute(18)!==NULL)
 
                    {
 
                        // There's a Reply-Message, show it to the user.
 
                        // The standard from RSA for this is "Enter a new PIN having from 4 to 8 digits:\000"
 
                        // Since that \000 looks pretty silly in HTML, get rid of it
 
                        $msg = $radius->GetAttribute(18);
 
                        $msg = str_replace("\000","",$msg);
 
                    }
 
                    else
 
                    {
 
                        $msg = "Challenge received from server";
 
                    }
 
                    echo "<strong>".$msg."</strong>";
 
                    ?>
 
                    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
 
                    User: <input name="user" type="text" value="<?php echo $_POST["user"]; ?>" />
 
                    <br />
 
 
                    <?php
 
                    if ($radius->GetAttribute(76)===0) // The RADIUS RFC excludes the possibility of sending this attr, but RSA send it.  0 means "No echo".
 
                    {
 
                        ?>
 
                        Pass: <input name="pass" type="text" value="" /> (text type for educational purpose only) <!-- type="text" for educational purpose only ! -->
 
                        <?php
 
                    }
 
                    else
 
                    {
 
                        ?>
 
                        Pass: <input name="pass" type="text" value="" /> <!-- this should *actually* be text - the server didn't tell us to use "no-echo" -->
 
                        <?php
 
                    }
 
                    if ($radius->GetAttribute(24)!==NULL)
 
                    {
 
                        ?>
 
                        <input name="state" type="hidden" value="<?php echo bin2hex($radius->GetAttribute(24)); ?>" />
 
                        <?php
 
                    }
 
                    ?>
 
                    <br />
 
 
                    <input name="submit" type="submit" value="Check authentication" />
 
                    </form>
 
                    <?php
 
                }
 
                else
 
                {
 
                    echo "<strong>Authentication rejected.</strong>";
 
                }
 
            }
 
            echo "<br />";
 
 
            echo "<br /><strong>GetReadableReceivedAttributes</strong><br />";
 
            echo $radius->GetReadableReceivedAttributes();
 
 
            echo "<br />";
 
            echo "<a href=\"".$_SERVER['PHP_SELF']."\">Reload authentication form</a>";
 
        }
 
        else
 
        {
 
            ?>
 
            <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
 
                User: <input name="user" type="text" value="user" />
 
                <br />
 
 
                Pass: <input name="pass" type="text" value="" /> (text type for educational purpose only) <!-- type="text" for educational purpose only ! -->
 
                <br />
 
                
 
                <input name="submit" type="submit" value="Check authentication" />
 
            </form>
 
            <?php
 
        }
 
        ?>
 
    </body>
 
<html>
 
 
 |