]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/commitdiff
openvpn ccd: Fix subnet mask validation.
authorAlexander Marx <amarx@ipfire.org>
Wed, 21 Nov 2012 10:49:53 +0000 (11:49 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 23 Nov 2012 11:56:54 +0000 (12:56 +0100)
config/cfgroot/general-functions.pl
html/cgi-bin/ovpnmain.cgi

index 602617361bbae69b69ae80e1b5e954640bc8dab9..605556718f96aa1a0df4d03c1fa9052bcd27c17a 100644 (file)
@@ -383,13 +383,13 @@ sub validipandmask
        if ($ccdip=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1>0 && $1<=255 && $2>=0 && $2<=255 && $3>=0 && $3<=255 && $4<=255 ))) {
                #Subnet in decimal and valid?
                if ($ccdsubnet=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1<=255  && $2<=$1 && $3<=$2  && $4<=$3 )))  {
-                       for (my $i=8;$i<=30;$i++){
+                       for (my $i=8;$i<=32;$i++){
                                if (&General::cidrtosub($i) eq $ccdsubnet){
                                        return 1;
                                }
                        }       
                #Subnet already in binary format?
-               }elsif ($ccdsubnet=~/^(\d{1,2})$/ && (($1<=30 && $1>=8))){
+               }elsif ($ccdsubnet=~/^(\d{1,2})$/ && (($1<=32 && $1>=8))){
                        return 1;
                }else{
                        return 0;
index 038adb13895c0e172d50e41421ae6ac78d553154..ca43e7dd5df960e82346aef0bd4e533aa3a0d89f 100755 (executable)
@@ -494,21 +494,36 @@ sub addccdnet
        my $checkup;
        my $ccdip;
        my $baseaddress;
-       if(!&General::validhostname($ccdname)){
+       
+       
+       #check name     
+       if ($ccdname eq '') 
+       {
+               $errormessage=$errormessage.$Lang::tr{'ccd err name'}."<br>";
+               return
+       }
+       
+       if(!&General::validhostname($ccdname))
+       {
                $errormessage=$Lang::tr{'ccd err invalidname'};
                return;
        }
-       #check ip
-       if (&General::validipandmask($ccdnet)){
-                       $ccdnet=&General::iporsubtocidr($ccdnet);       
-       }else{
+               
+       ($ccdip,$subcidr) = split (/\//,$ccdnet);
+       $subcidr=&General::iporsubtocidr($subcidr);
+       #check subnet
+       if ($subcidr > 30)
+       {
                $errormessage=$Lang::tr{'ccd err invalidnet'};
                return;
        }
-       ($ccdip,$subcidr) = split (/\//,$ccdnet);
-       if ($ccdname eq '') {
-               $errormessage=$errormessage.$Lang::tr{'ccd err name'}."<br>";
+       #check ip
+       if (!&General::validipandmask($ccdnet)){
+               $errormessage=$Lang::tr{'ccd err invalidnet'};
+               return;
        }
+       
+       
        #check if we try to use same network as ovpn server
        if (&General::iporsubtocidr($ccdnet) eq &General::iporsubtocidr($ovpnsubnet)) {
                        $errormessage=$errormessage.$Lang::tr{'ccd err isovpnnet'}."<br>";