Skip to content
Snippets Groups Projects
Select Git revision
  • 21b34619927c7cb824e1f7a7789cf7d52f6851e8
  • php8 default
  • php7
  • master protected
  • rfc3576
  • 1.4.0b1
  • 1.3.0
  • 1.3.1
  • 1.3.0b1
  • 1.2.7
  • 1.2.6
  • 1.2.5
  • 1.0.4
  • 1.2.4
  • 1.2.3
  • 1.2.2
  • 1.2.1
  • 1.2
  • 1.1
  • 1.0
20 results

radius.php

Blame
  • radius.php 5.30 KiB
    <?
    if(!extension_loaded('radius')) {
    	if (preg_match('/windows/i', getenv('OS'))) {
    		dl('php_radius.dll');
    	} else {
    		dl('radius.so');
    	}
    }
    
    $module = 'radius';
    $functions = get_extension_funcs($module);
    echo "Functions available in the test extension:<br>\n";
    foreach($functions as $func) {
    	echo $func . "<br>\n";
    }
    
    //$auth_type = 'chap';
    $auth_type = 'pap';
    
    $res = radius_auth_open();
    echo "$res<br>\n";
    
    //if (!radius_config($res, '/etc/radius.conf')) {
    /*if (!radius_config($res, 'D:/php-devel/pear/PECL/radius/radius.conf')) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    }*/
    
    
    if (!radius_add_server($res, 'carlo.jawa.at', 1812, 'testing123', 3, 3)) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    }
    
    /*if (!radius_add_server($res, 'localhost', 1812, 'testing123', 3, 3)) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    } */
    
    if (!radius_add_server($res, '192.168.201.12', 1812, 'testing123', 3, 3)) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    }
    
    if (!radius_create_request($res, RADIUS_ACCESS_REQUEST)) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    }
    
    if (!radius_put_string($res, RADIUS_USER_NAME, "sepp")) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    }
    
    if ($auth_type == 'chap') {
    	echo "CHAP<br>\n";
    
    	/* generate Challenge */
    	mt_srand(time());
    	$chall = mt_rand();
    
    	// FYI: CHAP = md5(ident + plaintextpass + challenge)
    	$chapval = md5(pack('Ca*',1 , 'sepp' . $chall));
    	// Radius wants the CHAP Ident in the first byte of the CHAP-Password
    	$pass = pack('CH*', 1, $chapval);
    
    	if (!radius_put_attr($res, RADIUS_CHAP_PASSWORD, $pass)) {
    		echo 'RadiusError: RAD_CHAP_PASSWORD:' . radius_strerror($res). "<br>\n";
    		exit;
    	}
    
    	if (!radius_put_attr($res, RADIUS_CHAP_CHALLENGE, $chall)) {
    		echo 'RadiusError: RAD_CHAP_CHALLENGE:' . radius_strerror($res). "<br>\n";
    		exit;
    	}
    
    } else {
    	echo "PAP<br>\n";
    
    	if (!radius_put_string($res, RADIUS_USER_PASSWORD, "sepp")) {
    		echo 'RadiusError:' . radius_strerror($res). "<br>\n";
    		exit;
    	}
    }
    
    if (!radius_put_int($res, RADIUS_SERVICE_TYPE, RADIUS_FRAMED)) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    }
    
    if (!radius_put_int($res, RADIUS_FRAMED_PROTOCOL, RADIUS_PPP)) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    }
    
    $req = radius_send_request($res);
    if (!$req) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    }
    
    switch($req) {
    	case RADIUS_ACCESS_ACCEPT:
    		echo "Radius Request accepted<br>\n";
    		break;
    
    	case RADIUS_ACCESS_REJECT:
    		echo "Radius Request rejected<br>\n";
    		break;
    
    	default:
    		echo "Unexpected return value:$req\n<br>";
    }
    
    while ($resa = radius_get_attr($res)) {
    
    	if (!is_array($resa)) {
    		printf ("Error getting attribute: %s\n",  radius_strerror($res));
    		exit;
    	}
    
    	$attr = $resa['attr'];
    	$data = $resa['data'];
    	//printf("Got Attr:%d %d Bytes %s\n", $attr, strlen($data), bin2hex($data));
    
    	switch ($attr) {
    
    		case RADIUS_FRAMED_IP_ADDRESS:
    			$ip = radius_cvt_addr($data);
    			echo "IP: $ip<br>\n";
    			break;
    
    		case RADIUS_FRAMED_IP_NETMASK:
    			$mask = radius_cvt_addr($data);
    			echo "MASK: $mask<br>\n";
    			break;
    
    		case RADIUS_FRAMED_MTU:
    			$mtu = radius_cvt_int($data);
    			echo "MTU: $mtu<br>\n";
    			break;
    
    		case RADIUS_FRAMED_COMPRESSION:
    			$comp = radius_cvt_int($data);
    			echo "Compression: $comp<br>\n";
    			break;
    
    		case RADIUS_SESSION_TIMEOUT:
    			$time = radius_cvt_int($data);
    			echo "Compression: $time<br>\n";
    			break;
    
    		case RADIUS_SERVICE_TYPE:
    			$type = radius_cvt_int($data);
    			echo "Service Type: $type<br>\n";
    			break;
    
    		case RADIUS_CLASS:
    			$class = radius_cvt_int($data);
    			echo "Class: $class<br>\n";
    			break;
    
    		case RADIUS_FRAMED_PROTOCOL:
    			$proto = radius_cvt_int($data);
    			echo "Protocol: $proto<br>\n";
    			break;
    
    		case RADIUS_FRAMED_ROUTING:
    			$rout = radius_cvt_int($data);
    			echo "Routing: $rout<br>\n";
    			break;
    
    		case RADIUS_FILTER_ID:
    			$id = radius_cvt_string($data);
    			echo "Filter ID: $id<br>\n";
    			break;
    
    		case RADIUS_VENDOR_SPECIFIC:
    			//printf ("Vendor specific (%d)<br>\n", $attr);
    
    			$resv = radius_get_vendor_attr($data);
    			if (is_array($resv)) {
    				$vendor = $resv['vendor'];
    				$attrv = $resv['attr'];
    				$datav = $resv['data'];
    
    				if ($vendor == RADIUS_VENDOR_MICROSOFT) {
    
    					switch ($attrv) {
    
    						case RAD_MICROSOFT_MS_CHAP_ERROR:
    							echo "MS CHAP Error<br>\n";
    							break;
    
    						case RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY:
    							$policy = radius_cvt_int($datav);
    							echo "MS MPPE Policy: $policy<br>\n";
    							break;
    
    						case RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES:
    							$type = radius_cvt_int($datav);
    							echo "MS MPPE Type: $type<br>\n";
    							break;
    
    						default:
    							printf("Unexpected Microsoft attribute: %d<br>\n", $attrv);
    					}
    
    				}
    
    			} else {
    				printf ("Error getting Vendor attribute %s<br>\n", radius_strerror($res));
    			}
    			break;
    
    		default:
    			printf("Unexpected attribute: %d<br>\n", $attr);
    	}
    }
    
    $secret = radius_server_secret($res);
    if (!$secret) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    } else {
    	echo "Shared Secret:$secret<br>\n";
    }
    
    $authent = radius_request_authenticator($res);
    if (!$authent) {
    	echo 'RadiusError:' . radius_strerror($res). "\n<br>";
    	exit;
    } else {
    	printf ("Request Authenticator:%s Len:%d<br>\n", bin2hex($authent), strlen($authent));
    }
    
    radius_close($res);
    
    ?>