Changeset 332 for trunk


Ignore:
Timestamp:
Aug 28, 2018, 2:55:44 PM (6 years ago)
Author:
g7moreau
Message:
  • Update change_mac function (more robust) and update many comment
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ddt/ddt

    r331 r332  
    273273      }
    274274
    275    print {*STDERR} "Error: Bad MAC syntax: $mac\n";
     275   print {*STDERR} "Error: bad MAC syntax: $mac\n";
    276276   return 0;
    277277   }
     
    289289
    290290      if ( scalar(@ip_split) != 4 ) {
    291          print {*STDERR} "Error: Bad IP syntax: $ip\n";
     291         print {*STDERR} "Error: bad IP syntax: $ip\n";
    292292         return 0;
    293293         }
     
    302302
    303303   if ($comment !~ m{^20\d\d-\d\d-\d\d\s}) {
    304       print {*STDERR} "Syntax Error: No date like 2014-01-10 at the beginning: $comment\n";
     304      print {*STDERR} "Error: no date like 2014-01-10 at the beginning: $comment\n";
    305305      return 0;
    306306      }
    307307
    308308   if ($comment !~ m{\(\w+\)$}) {
    309       print {*STDERR} "Syntax Error: No (SERVICE) at the end: $comment\n";
     309      print {*STDERR} "Error: no (SERVICE) at the end: $comment\n";
    310310      return 0;
    311311      }
    312312
    313313   if ($comment =~ m{\s\s}) {
    314       print {*STDERR} "Syntax Error: Double space: $comment\n";
     314      print {*STDERR} "Error: double space: $comment\n";
    315315      return 0;
    316316      }
     
    419419
    420420   control_exist_domainset($computer_db, $domainset) or exit;
    421    control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: Hostname already exist in domain set attachement $domainset: $hostname\n";
     421   control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: host already exist in domain set $domainset: $hostname\n";
    422422
    423423   my @domainsetdb = @{$computer_db->{$domainset}};
     
    447447   $mac = normalize_mac_address($mac);
    448448   $comment = normalize_comment($comment);
    449    control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: Hostname already exist in domain set attachement $domainset: $hostname\n";
     449   control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: host already exist in domain set $domainset: $hostname\n";
    450450   control_syntax_mac_address($mac)                   or exit;
    451    control_exist_mac($computer_db, $mac)              or die "Error: Physical MAC address already exists: $mac\n";
     451   control_exist_mac($computer_db, $mac)              or die "Error: physical MAC address already exists: $mac\n";
    452452   control_syntax_ip($ip)                             or exit;
    453    control_exist_ip($computer_db, $ip)                or die "Error: IP address already exist in domain set attachement $domainset: $ip\n";
     453   control_exist_ip($computer_db, $ip)                or die "Error: IP address already exist in domain set $domainset: $ip\n";
    454454   control_syntax_comment($comment)                   or exit;
    455455   my $timestamp = time;
     
    464464      'alias'        =>  '',
    465465      }};
    466    print "Info: Add the host: $hostname, IP: $ip, MAC: $mac, Domain Set: $domainset [OK]\n";
     466   print "Info: Add the host: $hostname, IP: $ip, MAC: $mac, domain set: $domainset [OK]\n";
    467467
    468468   ipamdb_save("$COMPUTER_YAML", $computer_db);
     
    482482   $comment = normalize_comment($comment);
    483483   control_exist_domainset($computer_db, $domainset)  or exit;
    484    control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: Hostname already exist in domain set attachement $domainset: $hostname\n";
     484   control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: host already exist in domain set $domainset: $hostname\n";
    485485   control_syntax_mac_address($mac)                   or exit;
    486    control_exist_mac($computer_db, $mac)              or die "Error: Physical MAC address already exists: $mac\n";
     486   control_exist_mac($computer_db, $mac)              or die "Error: physical MAC address already exists: $mac\n";
    487487   control_syntax_ip($ip)                             or exit;
    488    control_exist_ip($computer_db, $ip)                or die "Error: IP address already exist in domain set attachement $domainset: $ip.\n";
     488   control_exist_ip($computer_db, $ip)                or die "Error: IP address already exist in domain set $domainset: $ip.\n";
    489489   control_syntax_comment($comment)                   or exit;
    490490
     
    499499      'alias'        => '',
    500500      }};
    501    print "Add the computer: $hostname, IP: $ip, MAC: $mac, Domain Set: $domainset\n";
     501   print "Add the computer: $hostname, IP: $ip, MAC: $mac, domain set: $domainset\n";
    502502
    503503   ipamdb_save("$COMPUTER_YAML", $computer_db);
     
    515515   control_exist_domainset($computer_db, $domainset)  or exit;
    516516   control_syntax_mac_address($mac)                   or exit;
    517    control_exist_mac($computer_db, $mac)              or die "Error: Physical MAC address already exists: $mac\n";
    518    control_exist_pool($computer_db, $pool)            or die "Error: The pool doesn't exists: $pool\n";
     517   control_exist_mac($computer_db, $mac)              or die "Error: physical MAC address already exists: $mac\n";
     518   control_exist_pool($computer_db, $pool)            or die "Error: the pool doesn't exists: $pool\n";
    519519   control_syntax_comment($comment)                   or exit;
    520520   push @{$computer_db->{$domainset}}, { $mac => {
     
    527527      'comment'      => $comment,
    528528      }};
    529    print "Info: Add the computer in pool MAC: $mac, Domain Set: $domainset, Pool: $pool [OK]\n";
     529   print "Info: Add the computer in pool MAC: $mac, domain set: $domainset, Pool: $pool [OK]\n";
    530530
    531531   ipamdb_save("$COMPUTER_YAML", $computer_db);
     
    669669
    670670   control_exist_domainset($computer_db, $domainset)           or exit;
    671    control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: Hostname already exist in domain set attachement $domainset: $hostname\n";
     671   control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: host already exist in domain set $domainset: $hostname\n";
    672672   control_syntax_ip($ip)                                      or exit;
    673    control_exist_ip($computer_db, $ip)                         or die "Error: IP address already exist in domain set attachement $domainset: $ip.\n";
     673   control_exist_ip($computer_db, $ip)                         or die "Error: IP address already exist in domain set $domainset: $ip.\n";
    674674   control_syntax_comment($comment)                            or exit;
    675675
    676676   my $mac = join ':', 'FF', 'FF', map({sprintf("%02X", $_)} split(/\./, $ip));
    677677   control_syntax_mac_address($mac)             or exit;
    678    control_exist_mac($computer_db, $mac)         or die "Error: Virtual Physical MAC address already exists: $mac\n";
     678   control_exist_mac($computer_db, $mac)         or die "Error: virtual physical MAC address already exists: $mac\n";
    679679
    680680   push @{$computer_db->{$domainset}}, { $mac => {
     
    687687      'comment'      => $comment,
    688688      }};
    689    print "Add the virtual computer: $hostname, IP: $ip, Domain Set: $domainset\n";
     689   print "Add the virtual computer: $hostname, IP: $ip, domain set: $domainset\n";
    690690
    691691   ipamdb_save("$COMPUTER_YAML", $computer_db);
     
    711711   control_exist_domainset($computer_db, $domainset)  or exit;
    712712   control_syntax_mac_address($mac)                   or exit;
    713    control_exist_mac($computer_db, $mac)              or die "Error: Physical MAC address already exists: $mac\n";
     713   control_exist_mac($computer_db, $mac)              or die "Error: physical MAC address already exists: $mac\n";
    714714   if ($ip ne '') {
    715715      control_syntax_ip($ip) or exit;
    716716      if ( control_exist_ip($computer_db, $ip) == 1 ) {
    717          print "Error: Unkown IP address: $ip\n";
     717         print "Error: unkown IP address: $ip\n";
    718718         exit;
    719719         }
    720720      my @domainsetdb = @{$computer_db->{$domainset}};
    721       my $computer_index = 0;
    722721      LOOP_ON_COMPUTER:
    723722      for my $computer (@domainsetdb) {
    724723         my ($mac_address, $attribute) = %{$computer};
    725 
    726          $computer_index++, next LOOP_ON_COMPUTER if $attribute->{'ip'} ne $ip;
     724         die "Error: physical MAC address $mac already exists in domain set $domainset\n" if $mac_address eq $mac;
     725
     726         next LOOP_ON_COMPUTER if $attribute->{'ip'} ne $ip;
    727727
    728728         $attribute->{'modify_time'} = time;
    729          $computer_db->{$domainset}[$computer_index] = { $mac => $attribute };
     729         $computer->{$mac} = $attribut;      # add new mac
     730         delete $computer->{$mac_address};   # remove old mac
     731
    730732         ipamdb_save("$COMPUTER_YAML", $computer_db);
    731          print "Info: Update host $hostname MAC: $mac IP: $ip [OK]\n";
     733         print "Info: Update host $hostname, domain set $domainset, MAC $mac, IP $attribute->{'ip'} [OK]\n";
    732734         exit;
    733735         }
     
    735737   elsif ($hostname ne '') {
    736738      if ( control_exist_hostname($computer_db, $domainset, $hostname) == 1 ) {
    737          die "Error: Unkown host: $hostname, in domain set: $domainset\n";
     739         die "Error: unkown Host: $hostname, in Domain Set: $domainset\n";
    738740         }
    739741      my @domainsetdb = @{$computer_db->{$domainset}};
    740       my $computer_index = 0;
    741742      LOOP_ON_COMPUTER:
    742743      for my $computer (@domainsetdb) {
    743744         my ($mac_address, $attribute) = %{$computer};
    744 
    745          $computer_index++, next LOOP_ON_COMPUTER if $attribute->{'hostname'} ne $hostname;
     745         die "Error: physical MAC address $mac already exists in domain set $domainset\n" if $mac_address eq $mac;
     746
     747         next LOOP_ON_COMPUTER if $attribute->{'hostname'} ne $hostname;
    746748
    747749         $attribute->{'modify_time'} = time;
    748          $computer_db->{$domainset}[$computer_index] = { $mac => $attribute };
     750         $computer->{$mac} = $attribut;      # add new mac
     751         delete $computer->{$mac_address};   # remove old mac
     752
    749753         ipamdb_save("$COMPUTER_YAML", $computer_db);
    750          print "Info: Update HOST: $hostname DOMAINSET: $domainset MAC: $mac IP: $attribute->{'ip'} [OK]\n";
     754         print "Info: Update host $hostname, domain set $domainset, MAC $mac, IP $attribute->{'ip'} [OK]\n";
    751755         exit;
    752756         }
     
    766770   control_exist_domainset($computer_db, $domainset) or exit;
    767771   if ( control_exist_hostname($computer_db, $domainset, $hostname) == 1 ) {
    768       die "Error: Unkown host: $hostname, in domain set: $domainset\n";
     772      die "Error: unkown host: $hostname, in domain set: $domainset\n";
    769773      }
    770774   control_syntax_ip($ip) or exit;
    771    control_exist_ip($computer_db, $ip) or die "Error: IP address already exist in domain set attachement $domainset: $ip\n";
     775   control_exist_ip($computer_db, $ip) or die "Error: IP address already exist in domain set $domainset: $ip\n";
    772776
    773777   my @domainsetdb = @{$computer_db->{$domainset}};
     
    780784 
    781785      if ($attribute->{'address_type'} eq 'pool-dhcp') {
    782          die "Error: Host $hostname from domain set $domainset belongs to a a pool [FAILED]" .
     786         die "Error: host $hostname from domain set $domainset belongs to a a pool [FAILED]" .
    783787            " ... use 'del-float' command before";
    784788         }
     
    804808   control_syntax_ip($ip)   or exit;
    805809   if ( control_exist_ip($computer_db, $ip) == 1 ) {
    806       die "Error: Unkown IP address: $ip\n";
    807       }
    808    control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: Hostname already exist in domain set attachement $domainset: $hostname\n";
     810      die "Error: unkown IP address: $ip\n";
     811      }
     812   control_exist_hostname($computer_db, $domainset, $hostname) or die "Error: host already exist in domain set $domainset: $hostname\n";
    809813
    810814   my @domainsetdb = @{$computer_db->{$domainset}};
     
    823827      }
    824828
    825    die "Error: Failed to update hostname $hostname [FAILED]\n" .
     829   die "Error: failed to update hostname $hostname [FAILED]\n" .
    826830      " ... no IP $ip belongs to the domain set $domainset\n";
    827831   }
     
    9961000         }
    9971001      }
    998    die "Error: Update of domain set $domainset [FAILED]\n" .
     1002   die "Error: update of domain set $domainset [FAILED]\n" .
    9991003      " ... MAC $mac and IP $ip don't exists in the database\n";
    10001004   }
     
    10311035
    10321036   if ($tags !~ m/^ (?:\w+,)* \w+ $/xms) {
    1033       die "Error: Bad format for tags (comma separated list): $tags\n";
     1037      die "Error: bad format for tags (comma separated list): $tags\n";
    10341038      }
    10351039
     
    10781082      control_syntax_ip($ip);
    10791083      if ( control_exist_ip($computer_db, $ip) == 1 ) {
    1080          die "Error: Unkown IP address: $ip [FAILED]\n";
     1084         die "Error: unkown IP address: $ip [FAILED]\n";
    10811085         }
    10821086
     
    11141118      control_exist_domainset($computer_db, $domainset);
    11151119      if ( control_exist_hostname($computer_db, $domainset, $hostname) == 1 ) {
    1116          die "Error: Unkown host: $hostname, in domain set: $domainset [FAILED]\n";
     1120         die "Error: unkown host: $hostname, in domain set: $domainset [FAILED]\n";
    11171121         }
    11181122
     
    11241128
    11251129         if ($attribute->{'address_type'} eq 'pool-dhcp') {
    1126             die "Error: Host $hostname from domain set $domainset belongs to a a pool [FAILED]" .
     1130            die "Error: host $hostname from domain set $domainset belongs to a a pool [FAILED]" .
    11271131               " ... use 'disable-float' command instead";
    11281132            }
     
    11541158   my $computer_index;
    11551159   if ( control_exist_mac($computer_db, $mac) == 1 ) {
    1156       die "Error: Unkown physical MAC address: $mac [FAILED]\n";
     1160      die "Error: unkown physical MAC address: $mac [FAILED]\n";
    11571161      }
    11581162
     
    11861190            }
    11871191         else {
    1188             die "Error: Host disable $mac [FAILED]" .
     1192            die "Error: host disable $mac [FAILED]" .
    11891193               " ... The host $mac does not belong to the $pool pool.\n";
    11901194            }
     
    12071211      control_syntax_ip($ip);
    12081212      if ( control_exist_ip($computer_db, $ip) == 1 ) {
    1209          print "Error: Unkown IP address: $ip\n";
     1213         print "Error: unkown IP address: $ip\n";
    12101214         exit;
    12111215         }
     
    12441248   else { # enable by Hostname
    12451249      if ( control_exist_hostname($computer_db, $domainset, $hostname) == 1 ) {
    1246          die "Error: Unkown host: $hostname, in domain set: $domainset\n";
     1250         die "Error: unkown host: $hostname, in domain set: $domainset\n";
    12471251         }
    12481252
     
    12531257
    12541258         if ($attribute->{'address_type'} eq 'pool-dhcp') {
    1255             die "Error: Host $hostname from domain set $domainset belongs to a a pool [FAILED]" .
     1259            die "Error: host $hostname from domain set $domainset belongs to a a pool [FAILED]" .
    12561260               " ... use 'enable-float' command instead";
    12571261            }
     
    12821286
    12831287   if ( control_exist_mac($computer_db, $mac) == 1 ) {
    1284       die "Error: Unkown physical MAC address: $mac [FAILED]\n";
     1288      die "Error: unkown physical MAC address: $mac [FAILED]\n";
    12851289      }
    12861290
     
    13001304
    13011305         if ($attribute->{'ip'} ne $pool) {
    1302             die "Error: Host enable $mac [FAILED]" .
     1306            die "Error: host enable $mac [FAILED]" .
    13031307               " ... The host $mac does not belong to the $pool pool.\n";
    13041308            }
     
    14331437   if ($ip ne '') { # delete by IP
    14341438      if ( control_exist_ip($computer_db, $ip) == 1 ) {
    1435          die "Error: Unkown IP address: $ip\n";
     1439         die "Error: unkown IP address: $ip\n";
    14361440         }
    14371441
     
    14521456   else {
    14531457      if ( control_exist_hostname($computer_db, $domainset, $hostname) == 1 ) {
    1454          die "Error: Unkown host: $hostname, in domain set: $domainset\n";
     1458         die "Error: unkown host: $hostname, in domain set: $domainset\n";
    14551459         }
    14561460
     
    14641468
    14651469         if ($attribute->{'address_type'} eq 'pool-dhcp') {
    1466             die "Error: Host remove $hostname from the domain set $domainset [FAILED]" .
     1470            die "Error: host remove $hostname from the domain set $domainset [FAILED]" .
    14671471               " ... The host $hostname belongs to a DHCP pool.\n";
    14681472            }
     
    15081512
    15091513         if ($attribute->{'ip'} ne $pool) {
    1510             die "Error: Host remove $mac [FAILED]" .
     1514            die "Error: host remove $mac [FAILED]" .
    15111515               " ... The host $mac does not belong to the $pool pool.\n";
    15121516            }
     
    15941598
    15951599   $computer_db->{'dset'} ||= {};
    1596    die "Error: Domain Set already exists: $domainset\n" if exists $computer_db->{'dset'}{$domainset};
     1600   die "Error: domain set already exists: $domainset\n" if exists $computer_db->{'dset'}{$domainset};
    15971601
    15981602   control_syntax_comment($comment)    or exit;
     
    16051609      'modify_time'     => $timestamp,
    16061610      };
    1607    $computer_db->{$domainset} ||= []; # Create empty Domain Set computer list by default
     1611   $computer_db->{$domainset} ||= []; # Create empty domain set computer list by default
    16081612   ipamdb_save("$COMPUTER_YAML", $computer_db);
    16091613   }
     
    16421646
    16431647   if ($computer_db->{'pool'}) {
    1644       die "Error: Pool already exists: $pool\n" if exists $computer_db->{'pool'}{$pool};
     1648      die "Error: pool already exists: $pool\n" if exists $computer_db->{'pool'}{$pool};
    16451649      }
    16461650
     
    16571661            for (my $cpt = $first; $cpt <= $last; $cpt++) {
    16581662               my $ip_loc = "$ip1.$ip2.$ip3.$cpt";
    1659                control_syntax_ip($ip_loc) or die "Error: Bad IP syntax: $ip_loc\n";
     1663               control_syntax_ip($ip_loc) or die "Error: bad IP syntax: $ip_loc\n";
    16601664               control_exist_ip($computer_db, $ip_loc) or die "Error: IP address already exists: $ip_loc\n";
    16611665               push @ip_list, $ip_loc;
     
    17391743   die "Error: PXE config already exists: $pxe_config\n" if exists $computer_db->{'pxe'}{$pxe_config};
    17401744
    1741    control_syntax_ip($ip_next_server)  or die "Error: Bad IP syntax: $ip_next_server\n";
     1745   control_syntax_ip($ip_next_server)  or die "Error: bad IP syntax: $ip_next_server\n";
    17421746   control_syntax_comment($comment)    or exit;
    17431747
     
    18551859      control_syntax_ip($ip);
    18561860      if ( control_exist_ip($computer_db, $ip) == 1 ) {
    1857          die "Error: Unkown IP address: $ip\n";
     1861         die "Error: unkown IP address: $ip\n";
    18581862         }
    18591863
     
    18721876                  $computer_db->{$domainset_current}[$computer_index]->{$id}->{'modify_time'} = $timestamp;
    18731877                  $computer_db->{$domainset_current}[$computer_index]->{$id}->{'pxe_config'}  = $pxe_config;
    1874                   print "IP Address: $ip, PXE enabled in config: $pxe_config\n";
     1878                  print "IP address: $ip, PXE enabled in config: $pxe_config\n";
    18751879                  ipamdb_save("$COMPUTER_YAML", $computer_db);
    18761880                  exit;
     
    18831887   else {
    18841888      if ( control_exist_hostname($computer_db, $domainset, $hostname) == 1 ) {
    1885          die "Error: Unkown host: $hostname, in domain set: $domainset\n";
     1889         die "Error: unkown host: $hostname, in domain set: $domainset\n";
    18861890         }
    18871891
     
    19341938      control_syntax_ip($ip);
    19351939      if ( control_exist_ip($computer_db, $ip) == 1 ) {
    1936          die "Error: Unkown IP address: $ip\n";
     1940         die "Error: unkown IP address: $ip\n";
    19371941         }
    19381942
     
    19551959            delete $attribute->{'pxe_config'};
    19561960            ipamdb_save("$COMPUTER_YAML", $computer_db);
    1957             print "Info: IP Address: $ip, PXE disable from config: $pxe_config [OK]\n";
     1961            print "Info: IP address: $ip, PXE disable from config: $pxe_config [OK]\n";
    19581962            exit;
    19591963            }
     
    19621966   else {
    19631967      if ( control_exist_hostname($computer_db, $domainset, $hostname) == 1 ) {
    1964          die "Error: Unkown host: $hostname, in domain set: $domainset\n";
     1968         die "Error: unkown host: $hostname, in domain set: $domainset\n";
    19651969         }
    19661970
     
    19721976
    19731977         if ($attribute->{'address_type'} eq 'pool-dhcp') {
    1974             die "Error. Host $hostname ($domainset) in a pool. No PXE possible [FAILED]\n";
     1978            die "Error: host $hostname ($domainset) in a pool. No PXE possible [FAILED]\n";
    19751979            }
    19761980
     
    20162020
    20172021   if ($tag !~ m/^ \w+ $/xms) {
    2018       die "Error: Bad format for TAG (alphanumeric string): $tag\n";
     2022      die "Error: bad format for TAG (alphanumeric string): $tag\n";
    20192023      }
    20202024
     
    20652069         if (exists $attribute->{'tag'}) {
    20662070            my $hostname = $attribute->{'hostname'};
    2067             die "Error: Computer still use this TAG: $hostname.$domainset_current $mac_address\n" if $tag eq $attribute->{'tag'};
     2071            die "Error: computer still use this TAG: $hostname.$domainset_current $mac_address\n" if $tag eq $attribute->{'tag'};
    20682072            }
    20692073         }
     
    27102714
    27112715         if ( control_exist_hostname($computer_db, $domainset, $hostname) == 0 ) {
    2712             print "Error: Hostname already exist in domain set attachement $domainset: $hostname\n";
     2716            print "Error: host already exist in domain set $domainset: $hostname\n";
    27132717            next;
    27142718            }
    27152719         control_syntax_mac_address($mac) or next;
    27162720         if ( control_exist_mac($computer_db, $mac) == 0) {
    2717             print "Error: Physical MAC address already exists: $mac\n";
     2721            print "Error: physical MAC address already exists: $mac\n";
    27182722            next;
    27192723            }
     
    27702774         control_syntax_mac_address($mac) or next;
    27712775         if (control_exist_mac($computer_db, $mac) == 0) {
    2772             print "Error: Physical MAC address already exists: $mac\n";
     2776            print "Error: physical MAC address already exists: $mac\n";
    27732777            next;
    27742778            }
     
    27762780         #--- cette partie teste si le pool existe.
    27772781         if (not exists $computer_db->{'pool'}{$pool}) {
    2778             print "Error: Create pool with create_pool command before load database: $pool\n";
     2782            print "Error: create pool with create_pool command before load database: $pool\n";
    27792783            exit;
    27802784            }
     
    27932797         else {
    27942798            print "Ajout de la machine $mac [FAILED]\n";
    2795             print "Error: The pool doesn't exists: $pool, for the domain: $domainset\n";
     2799            print "Error: the pool doesn't exists: $pool, for the domain: $domainset\n";
    27962800            }
    27972801         }
     
    28502854   my $date = sprintf '%04i-%02i-%02i-%02i-%02i-%02i', $year, $mon, $mday, $hour, $min, $sec;
    28512855
    2852    copy($COMPUTER_YAML, "$FOLDER_BACKUP/$COMPUTER_BASENAME-$date.conf") or die "Error: Database copy backup failed: $!\n";
     2856   copy($COMPUTER_YAML, "$FOLDER_BACKUP/$COMPUTER_BASENAME-$date.conf") or die "Error: database copy backup failed: $!\n";
    28532857   }
    28542858
Note: See TracChangeset for help on using the changeset viewer.