]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - config/cfgroot/general-functions.pl
Import VPN changes by the Special Interest Group.
[ipfire-2.x.git] / config / cfgroot / general-functions.pl
index 78f925f7058c81b8f93220f49ebc2fad3ad47a1d..567f2e104ec5cb02bae2e588e0b18472a7ab7957 100644 (file)
@@ -18,6 +18,7 @@ use strict;
 use Socket;
 use IO::Socket;
 use Net::SSLeay;
+use Net::IPv4Addr;
 
 $|=1; # line buffering
 
@@ -88,6 +89,7 @@ sub writehash
        flock FILE, 2;
        foreach $var (keys %$hash) 
        {
+               if ( $var eq "__CGI__"){next;}
                $val = $hash->{$var};
                # Darren Critchley Jan 17, 2003 added the following because when submitting with a graphic, the x and y
                # location of the mouse are submitted as well, this was being written to the settings file causing
@@ -102,6 +104,41 @@ sub writehash
        close FILE;
 }
 
+sub writehashpart
+{
+       # This function replaces the given hash in the original hash by keeping the old
+       # content and just replacing the new content
+
+       my $filename = $_[0];
+       my $newhash = $_[1];
+       my %oldhash;
+       my ($var, $val);
+
+       readhash("${filename}", \%oldhash);
+
+       foreach $var (keys %$newhash){
+               $oldhash{$var}=$newhash->{$var};
+       }
+
+       # write cgi vars to the file.
+       open(FILE, ">${filename}") or die "Unable to write file $filename";
+       flock FILE, 2;
+       foreach $var (keys %oldhash) 
+       {
+               if ( $var eq "__CGI__"){next;}
+               $val = $oldhash{$var};
+               # Darren Critchley Jan 17, 2003 added the following because when submitting with a graphic, the x and y
+               # location of the mouse are submitted as well, this was being written to the settings file causing
+               # some serious grief! This skips the variable.x and variable.y
+               if (!($var =~ /(.x|.y)$/)) {
+                       if ($val =~ / /) {
+                               $val = "\'$val\'"; }
+                       if (!($var =~ /^ACTION/)) {
+                               print FILE "${var}=${val}\n"; }
+               }
+       }
+       close FILE;
+}
 
 sub age
 {
@@ -371,6 +408,20 @@ sub NextIP
                             );
 }
 
+sub ipcidr
+{
+       my ($ip,$cidr) = &Net::IPv4Addr::ipv4_parse(shift);
+       return "$ip\/$cidr";
+}
+
+sub ipcidr2msk
+{
+       my ($ip,$cidr) = &Net::IPv4Addr::ipv4_parse(shift);
+       my $netmask = &Net::IPv4Addr::ipv4_cidr2msk($cidr);
+       return "$ip\/$netmask";
+}
+
+
 sub validemail {
     my $mail = shift;
     return 0 if ( $mail !~ /^[0-9a-zA-Z\.\-\_]+\@[0-9a-zA-Z\.\-]+$/ );