]> git.gsnw.org Git - m0n0chwall.git/commitdiff
Add support to Captive Portal for different MAC format styles
authorjdegraeve <jdegraeve@e36fee2c-cc09-0410-a7cc-ebac5c6737de>
Tue, 16 May 2006 11:32:05 +0000 (11:32 +0000)
committerjdegraeve <jdegraeve@e36fee2c-cc09-0410-a7cc-ebac5c6737de>
Tue, 16 May 2006 11:32:05 +0000 (11:32 +0000)
git-svn-id: https://svn.m0n0.ch/wall/trunk@136 e36fee2c-cc09-0410-a7cc-ebac5c6737de

CHANGELOG
captiveportal/index.php
captiveportal/radius_accounting.inc
captiveportal/radius_authentication.inc
phpconf/inc/util.inc
webgui/services_captiveportal.php

index a07a87c8b83c86d31a9ca0e977081c893544f837..b59825c166d769e808766171c9421bcd7ce0df7a 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -8,6 +8,7 @@ $Id$
 
 - changes in Captive portal (jdegraeve):
   - Fixes a bug in the way we handle authentication mechanism. (Potentially allowing double logins and faulty locking)
+  - Add support for different MAC formatting styles.
 
 1.22
 ----
index 829f9f57ff65e99f3007ea31b1165532f4556ad0..4e5d6eb2ce4ab71914a17b7ab04248fbfdeaab08 100755 (executable)
@@ -224,7 +224,8 @@ function portal_mac_radius($clientmac,$clientip) {
     $radmac_secret = $config['captiveportal']['radmac_secret'];
 
     /* authentication against the radius server */
-    $auth_list = radius($clientmac,$radmac_secret,$clientip,$clientmac,"MACHINE LOGIN");
+    $username = mac_format($clientmac);
+    $auth_list = radius($username,$radmac_secret,$clientip,$clientmac,"MACHINE LOGIN");
     if ($auth_list['auth_val'] == 2) {
         return TRUE;
     }
index 9f9064d532e0b55d79f0d65c806d95f18b364666..61b4f9e10f928130d60da7b467e2d1f1e04fa44b 100644 (file)
@@ -48,7 +48,8 @@ function RADIUS_ACCOUNTING_START($ruleno,$username,$sessionid,$radiusip,$radiusp
     global $config;
 
     $retvalue = array();
-    $nas_mac = get_interface_mac($config['interfaces']['wan']['if']);
+    $nas_mac = mac_format(get_interface_mac($config['interfaces']['wan']['if']));
+    $clientmac = mac_format($clientmac);
     $nas_port = $ruleno - 10000;
     $radiusvendor = $config['captiveportal']['radiusvendor'] ? $config['captiveportal']['radiusvendor'] : null;
 
@@ -154,7 +155,8 @@ function RADIUS_ACCOUNTING_STOP($ruleno,$username,$sessionid,$start_time,$radius
     global $config;
 
     $retvalue = array();
-    $nas_mac = get_interface_mac($config['interfaces']['wan']['if']);
+    $nas_mac = mac_format(get_interface_mac($config['interfaces']['wan']['if']));
+    $clientmac = mac_format($clientmac);
     $nas_port = $ruleno - 10000;
     $radiusvendor = $config['captiveportal']['radiusvendor'] ? $config['captiveportal']['radiusvendor'] : null;
     $stop_time = (empty($stop_time)) ? time() : $stop_time;
index c1c5bc7418a9d2021771bfeb2eb42e14a8d5dde4..8439e0217a4209604006c18d6d5fb7cf2a9a7765 100644 (file)
@@ -47,7 +47,8 @@ function RADIUS_AUTHENTICATION($username,$password,$radiusservers,$clientip,$cli
     global $config;
 
     $retvalue = array();
-    $nas_mac = get_interface_mac($config['interfaces']['wan']['if']);
+    $nas_mac = mac_format(get_interface_mac($config['interfaces']['wan']['if']));
+    $clientmac = mac_format($clientmac);
     $nas_port = $ruleno - 10000;
     $radiusvendor = $config['captiveportal']['radiusvendor'] ? $config['captiveportal']['radiusvendor'] : null;
     // Do we even need to set it to NULL?
index 9a5eb4cd3896256500018bbb20ff3ae997a0ef74..a1fa5f21b1bec31c4bea18ee42be21d7521a6392 100644 (file)
@@ -424,4 +424,30 @@ function arp_get_mac_by_ip($ip) {
        return false;
 }
 
+function mac_format($clientmac) {
+    $mac =explode(":", $clientmac);
+
+    global $config;
+
+    $mac_format = $config['captiveportal']['radmac_format'] ? $config['captiveportal']['radmac_format'] : false;
+
+    switch($mac_format) {
+
+        case 'singledash':
+        return "$mac[0]$mac[1]$mac[2]-$mac[3]$mac[4]$mac[5]";
+
+        case 'ietf':
+        return "$mac[0]-$mac[1]-$mac[2]-$mac[3]-$mac[4]-$mac[5]";
+
+        case 'cisco':
+        return "$mac[0]$mac[1].$mac[2]$mac[3].$mac[4]$mac[5]";
+
+        case 'unformatted':
+        return "$mac[0]$mac[1]$mac[2]$mac[3]$mac[4]$mac[5]";
+
+        default:
+        return $clientmac;
+    }
+}
+
 ?>
index 4138a311c05d71048f06942939f0974625a51ef8..66b9d004eba9d646451003d0711181e63e428e29 100755 (executable)
@@ -75,6 +75,7 @@ $pconfig['radiuskey'] = $config['captiveportal']['radiuskey'];
 $pconfig['radiuskey2'] = $config['captiveportal']['radiuskey2'];
 $pconfig['radiusvendor'] = $config['captiveportal']['radiusvendor'];
 $pconfig['radiussession_timeout'] = isset($config['captiveportal']['radiussession_timeout']);
+$pconfig['radmac_format'] = $config['captiveportal']['radmac_format'];
 
 if ($_POST) {
 
@@ -172,6 +173,7 @@ if ($_POST) {
                $config['captiveportal']['radiuskey2'] = $_POST['radiuskey2'];
                $config['captiveportal']['radiusvendor'] = $_POST['radiusvendor'] ? $_POST['radiusvendor'] : false;
                $config['captiveportal']['radiussession_timeout'] = $_POST['radiussession_timeout'] ? true : false;
+        $config['captiveportal']['radmac_format'] = $_POST['radmac_format'] ? $_POST['radmac_format'] : false;
                
                /* file upload? */
                if (is_uploaded_file($_FILES['htmlfile']['tmp_name']))
@@ -217,6 +219,7 @@ function enable_change(enable_change) {
        document.iform.auth_method[1].disabled = endis;
        document.iform.auth_method[2].disabled = endis;
        document.iform.radmac_enable.disabled = radius_endis;
+       document.iform.radmac_format.disabled = radius_endis;
        document.iform.httpslogin_enable.disabled = endis;
        document.iform.httpsname.disabled = endis;
        document.iform.cert.disabled = endis;
@@ -481,6 +484,29 @@ to access after they've authenticated.</td>
                                If RADIUS type is set to Cisco, in RADIUS requests (Authentication/Accounting) the value of Calling-Station-Id will be set to the client's IP address and
                                the Called-Station-Id to the client's MAC address. Default behaviour is Calling-Station-Id = client's MAC address and Called-Station-Id = m0n0wall's WAN MAC address.</td>
                        </tr>
+            <tr>
+                <td class="vncell">MAC address format</td>
+                <td class="vtable">
+                <select name="radmac_format" id="radmac_format">
+                <option>default</option>
+                <?php
+                $macformats = array("singledash","ietf","cisco","unformatted");
+                foreach ($macformats as $macformat) {
+                    if ($pconfig['radmac_format'] == $macformat)
+                        echo "<option selected value=\"$macformat\">$macformat</option>\n";
+                    else
+                        echo "<option value=\"$macformat\">$macformat</option>\n";
+                }
+                ?>
+                </select></br>
+                This option changes the MAC address format used in the whole RADIUS system. Change this if you also
+                need to change the username format for RADIUS MAC authentication.<br>
+                default: 00:11:22:33:44:55<br>
+                singledash: 001122-334455<br>
+                ietf: 00-11-22-33-44-55<br>
+                cisco: 0011.2233.4455<br>
+                unformatted: 001122334455
+            </tr>
                </table>
        </tr>
        <tr>