]> git.ipfire.org Git - people/ms/ipfire-2.x.git/commitdiff
ovpnmain.cgi: Refactor modccnet()
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 20 Mar 2024 11:25:58 +0000 (12:25 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 2 Jun 2025 19:45:52 +0000 (19:45 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
html/cgi-bin/ovpnmain.cgi

index 7df115d0f9933c38c6b1704ef83a3f4490d98727..51348d1693f22294accfe983d8ad3a3974ec1fe0 100644 (file)
@@ -452,47 +452,58 @@ sub addccdnet($$) {
        &writeserverconf();
 }
 
-sub modccdnet
-{
+sub modccdnet($$) {
+       my $newname = shift;
+       my $oldname = shift;
 
-       my $newname=$_[0];
-       my $oldname=$_[1];
        my %ccdconfhash=();
-       my %ccdhash=();
+       my %conns=();
 
-       # Check if the new name is valid.
-       if(!&validccdname($newname)) {
-               $errormessage=$Lang::tr{'ccd err invalidname'};
+       # Do nothing if nothing has changed
+       if ($newname eq $oldname) {
                return;
        }
 
+       # Check if the new name is valid
+       unless (&validccdname($newname)) {
+               $errormessage = $Lang::tr{'ccd err invalidname'};
+               return;
+       }
+
+       # Load all subnets
        &General::readhasharray("${General::swroot}/ovpn/ccd.conf", \%ccdconfhash);
+
+       # Check if the name already exists
+       foreach my $key (keys %ccdconfhash) {
+               if ($ccdconfhash{$key}[0] eq $newname) {
+                       $errormessage = $Lang::tr{'ccd err netadrexist'};
+                       return;
+               }
+       }
+
+       # Update!
        foreach my $key (keys %ccdconfhash) {
                if ($ccdconfhash{$key}[0] eq $oldname) {
-                       foreach my $key1 (keys %ccdconfhash) {
-                               if ($ccdconfhash{$key1}[0] eq $newname){
-                                       $errormessage=$errormessage.$Lang::tr{'ccd err netadrexist'};
-                                       return;
-                               }else{
-                                       $ccdconfhash{$key}[0]= $newname;
-                                       &General::writehasharray("${General::swroot}/ovpn/ccd.conf", \%ccdconfhash);
-                                       last;
-                               }
-                       }
+                       $ccdconfhash{$key}[0] = $newname;
+                       last;
                }
        }
 
-       &General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%ccdhash);
-               foreach my $key (keys %ccdhash) {
-                       if ($ccdhash{$key}[32] eq $oldname) {
-                               $ccdhash{$key}[32]=$newname;
-                               &General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%ccdhash);
-                               last;
-                       }
+       # Load all configurations
+       &General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%conns);
+
+       # Update all matching connections
+       foreach my $key (keys %conns) {
+               if ($conns{$key}[32] eq $oldname) {
+                       $conns{$key}[32] = $newname;
                }
+       }
 
-       return 0;
+       # Write back the configuration
+       &General::writehasharray("${General::swroot}/ovpn/ccd.conf", \%ccdconfhash);
+       &General::writehasharray("${General::swroot}/ovpn/ovpnconfig", \%conns);
 }
+
 sub ccdmaxclients
 {
        my $ccdnetwork=$_[0];