refine VLAN compound key assertion checks
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 16 Jan 2014 10:20:19 +0000 (14:20 +0400)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 16 Jan 2014 11:02:05 +0000 (15:02 +0400)
Replace "uint-uint" assertion with "uint-vlan" and "uint-vlan1" and make
use of these in respective ophandlers such that these attribute a
malformed VLAN compound key to user's input (InvalidRequestArgException)
rather than an internal error (InvalidArgException).

wwwroot/inc/functions.php
wwwroot/inc/navigation.php
wwwroot/inc/ophandlers.php

index e920e1282cec02a33bb44e579ec06176317c3b93..ac5cae9433314f67a19472f373dd068b721c4242 100644 (file)
@@ -276,10 +276,6 @@ function genericAssertion ($argname, $argtype)
                return assertStringArg ($argname, TRUE);
        case 'uint':
                return assertUIntArg ($argname);
-       case 'uint-uint':
-               if (! preg_match ('/^([1-9][0-9]*)-([1-9][0-9]*)$/', assertStringArg ($argname), $m))
-                       throw new InvalidRequestArgException ($argname, $sic[$argname], 'illegal format');
-               return $m;
        case 'uint0':
                return assertUIntArg ($argname, TRUE);
        case 'inet':
@@ -377,6 +373,15 @@ function genericAssertion ($argname, $argtype)
                if ($sic[$argname] > VLAN_MAX_ID or $sic[$argname] < VLAN_MIN_ID)
                        throw new InvalidRequestArgException ($argname, $sic[$argname], 'not a valid VLAN ID');
                return $sic[$argname];
+       case 'uint-vlan':
+       case 'uint-vlan1':
+               if (! preg_match ('/^([1-9][0-9]*)-([1-9][0-9]*)$/', assertStringArg ($argname), $m))
+                       throw new InvalidRequestArgException ($argname, $sic[$argname], 'format error');
+               if ($argtype == 'uint-vlan' and $m[2] == VLAN_DFL_ID)
+                       throw new InvalidRequestArgException ($argname, $sic[$argname], 'default VLAN not allowed');
+               if ($m[2] > VLAN_MAX_ID or $m[2] < VLAN_MIN_ID)
+                       throw new InvalidRequestArgException ($argname, $sic[$argname], 'not a valid VLAN ID');
+               return $sic[$argname];
        case 'rackcode/expr':
                if ('' == assertStringArg ($argname, TRUE))
                        return array();
index c32649a8df4406eb4eab6ccc1728752bd61d9ef1..75c74bb220cb8f420a6451ce72462eaf2e12e931 100644 (file)
@@ -731,7 +731,7 @@ $delayauth['vlandomain-8021qorder-del'] = TRUE;
 
 $page['vlan']['parent'] = 'vlandomain';
 $page['vlan']['bypass'] = 'vlan_ck';
-$page['vlan']['bypass_type'] = 'string';
+$page['vlan']['bypass_type'] = 'uint-vlan1';
 $tab['vlan']['default'] = 'View';
 $tab['vlan']['edit'] = 'Edit';
 $tab['vlan']['ipv4'] = 'IPv4';
index 01858394db9c9b37aa87e5cdeaaf51c505128d08..b73c5b9af80843d349613dd5c648368ed1576e35 100644 (file)
@@ -910,7 +910,7 @@ function addIPv4Prefix ()
 
        $taglist = isset ($_REQUEST['taglist']) ? $_REQUEST['taglist'] : array();
        global $sic;
-       $vlan_ck = empty ($sic['vlan_ck']) ? NULL : $sic['vlan_ck'];
+       $vlan_ck = empty ($sic['vlan_ck']) ? NULL : genericAssertion ('vlan_ck', 'uint-vlan1');
        $net_id = createIPv4Prefix ($_REQUEST['range'], $sic['name'], isCheckSet ('is_connected'), $taglist, $vlan_ck);
        showSuccess ('IP network ' . mkA ($_REQUEST['range'], 'ipv4net', $net_id) . ' has been created');
 }
@@ -922,7 +922,7 @@ function addIPv6Prefix ()
 
        $taglist = isset ($_REQUEST['taglist']) ? $_REQUEST['taglist'] : array();
        global $sic;
-       $vlan_ck = empty ($sic['vlan_ck']) ? NULL : $sic['vlan_ck'];
+       $vlan_ck = empty ($sic['vlan_ck']) ? NULL : genericAssertion ('vlan_ck', 'uint-vlan1');
        $net_id = createIPv6Prefix ($_REQUEST['range'], $sic['name'], isCheckSet ('is_connected'), $taglist, $vlan_ck);
        showSuccess ('IP network ' . mkA ($_REQUEST['range'], 'ipv6net', $net_id) . ' has been created');
 }
@@ -2806,7 +2806,7 @@ $msgcode['bindVLANtoIPv4']['OK'] = 48;
 function bindVLANtoIPv4 ()
 {
        genericAssertion ('id', 'uint');
-       genericAssertion ('vlan_ck', 'uint-uint');
+       genericAssertion ('vlan_ck', 'uint-vlan1');
        global $sic;
        commitSupplementVLANIPv4 ($sic['vlan_ck'], $sic['id']);
        showFuncMessage (__FUNCTION__, 'OK');
@@ -2816,7 +2816,7 @@ $msgcode['bindVLANtoIPv6']['OK'] = 48;
 function bindVLANtoIPv6 ()
 {
        genericAssertion ('id', 'uint');
-       genericAssertion ('vlan_ck', 'uint-uint');
+       genericAssertion ('vlan_ck', 'uint-vlan1');
        global $sic;
        commitSupplementVLANIPv6 ($sic['vlan_ck'], $_REQUEST['id']);
        showFuncMessage (__FUNCTION__, 'OK');
@@ -2826,7 +2826,7 @@ $msgcode['unbindVLANfromIPv4']['OK'] = 49;
 function unbindVLANfromIPv4 ()
 {
        genericAssertion ('id', 'uint');
-       genericAssertion ('vlan_ck', 'uint-uint');
+       genericAssertion ('vlan_ck', 'uint-vlan1');
        global $sic;
        commitReduceVLANIPv4 ($sic['vlan_ck'], $sic['id']);
        showFuncMessage (__FUNCTION__, 'OK');
@@ -2836,7 +2836,7 @@ $msgcode['unbindVLANfromIPv6']['OK'] = 49;
 function unbindVLANfromIPv6 ()
 {
        genericAssertion ('id', 'uint');
-       genericAssertion ('vlan_ck', 'uint-uint');
+       genericAssertion ('vlan_ck', 'uint-vlan1');
        global $sic;
        commitReduceVLANIPv6 ($sic['vlan_ck'], $sic['id']);
        showFuncMessage (__FUNCTION__, 'OK');
@@ -3277,7 +3277,7 @@ function unlinkPort ()
 
 function clearVlan()
 {
-       assertStringArg ('vlan_ck');
+       genericAssertion ('vlan_ck', 'uint-vlan1');
        list ($vdom_id, $vlan_id) = decodeVLANCK ($_REQUEST['vlan_ck']);
 
        $n_cleared = 0;
@@ -3303,7 +3303,7 @@ function clearVlan()
 
 function deleteVlan()
 {
-       assertStringArg ('vlan_ck');
+       genericAssertion ('vlan_ck', 'uint-vlan');
        $confports = getVLANConfiguredPorts ($_REQUEST['vlan_ck']);
        if (! empty ($confports))
                throw new RackTablesError ("You can not delete VLAN that has assosiated ports");