| 
<?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>
 
 |