[BACK]Return to su.cgi CVS log [TXT][DIR] Up to [local] / trango / Net-Telnet-Trango / scripts

Diff for /trango/Net-Telnet-Trango/scripts/su.cgi between version 1.1 and 1.2

version 1.1, 2007/02/07 16:55:12 version 1.2, 2007/02/07 17:42:56
Line 1 
Line 1 
 #!/usr/bin/perl  #!/usr/bin/perl
 # $RedRiver$  # $RedRiver: su.cgi,v 1.1 2007/02/07 16:55:12 andrew Exp $
 ########################################################################  ########################################################################
 # su.cgi *** a CGI for Trango SU utilities.  # su.cgi *** a CGI for Trango SU utilities.
 #  #
Line 13 
Line 13 
 use strict;  use strict;
 use warnings;  use warnings;
   
 my $host_file = '/conf/wstationinfo/hosts.xml';  my $host_file = 'su.yaml';
   
 my $default_mac  = '0001DE';  my $default_mac  = '0001DE';
 my $default_suid = 'all';  my $default_suid = 'all';
Line 22 
Line 22 
 my $Start_SUID = 3;  my $Start_SUID = 3;
   
 use CGI qw/:standard/;  use CGI qw/:standard/;
 use XML::Simple;  use File::Basename;
   use YAML qw/ LoadFile Dump /;
 use Net::Telnet::Trango;  use Net::Telnet::Trango;
   
 use File::Basename;  
   
 my $me = basename($0);  my $me = basename($0);
   
   my $aps = get_aps($host_file);
   
 print header,  print header,
       start_html('Trango SU Utilities'),        start_html('Trango SU Utilities'),
       h1('Trango SU Utilities');        h1('Trango SU Utilities');
   
 my $aps = get_aps($host_file);  
   
 if (param()) {  if (param()) {
   
         my $AP = param('AP');          my $AP = param('AP');
Line 73 
Line 72 
 {  {
         my $file = shift;          my $file = shift;
   
         my $conf = Read_Hosts($file);          my $conf = LoadFile($file);
   
         my %aps;          my %aps;
   
         foreach my $ap (@{ $conf }) {          foreach my $ap (keys %{ $conf }) {
                 if ($ap->{'group'} eq 'Trango') {                  next if $ap eq 'default';
                         my $name = $ap->{'comment'} || $ap->{'name'};                  $aps{ $ap } = $conf->{$ap};
                         $aps{ $name } = $ap;                  if (ref $conf->{default} eq 'HASH') {
                           foreach my $k (keys %{ $conf->{default} }) {
                                   $aps{ $ap }{$k} ||= $conf->{default}->{$k};
                           }
                 }                  }
         }          }
   
Line 88 
Line 90 
   
         return {          return {
                 'rrlhcwap0000' => {                  'rrlhcwap0000' => {
                         group   => 'Trango',                          name     => '192.168.1.1',
                         version => 1,                          password => 'trango',
                         name    => '192.168.1.1',  
                         port    => 161,  
                         Read_Community => 'private',  
                         Write_Community => 'private',  
                 }                  }
         };          };
   
Line 123 
Line 121 
         } keys %{ $aps };          } keys %{ $aps };
   
     print p(start_form(-method => 'GET'),      print p(start_form(-method => 'GET'),
                 'AP:    ', popup_menu(-name=>'AP', -values=>\@ap_names),br,                  'AP:    ', popup_menu(-name=>'AP',    -values=>\@ap_names),br,
             'SUMAC: ', textfield(-name=>'sumac',-default=>$default_mac),br,              'SUMAC: ', textfield( -name=>'sumac', -default=>$default_mac),br,
             'SUID:  ', textfield(-name=>'suid',-default=>$default_suid),br,              'SUID:  ', textfield( -name=>'suid',  -default=>$default_suid),br,
         submit,          submit,
         end_form);          end_form);
   
Line 166 
Line 164 
         my $ap  = shift;          my $ap  = shift;
         my $sumac = shift;          my $sumac = shift;
   
         my $t = login($ap->{'name'}, $ap->{'Telnet_Password'});          my $t = login($ap->{name}, $ap->{password});
   
         my $cur_sus = $t->sudb_view;          my $cur_sus = $t->sudb_view;
   
         my $new_suid = next_suid($cur_sus);          my $new_suid = next_suid($cur_sus);
   
         foreach my $su (@{ $cur_sus }) {          foreach my $su (@{ $cur_sus }) {
                 if ($sumac eq $su->{'mac'}) {                  if ($sumac eq $su->{mac}) {
                         print h3("MAC '$sumac' already in AP '$ap->{'name'}' with SUID '$su->{'suid'}'");                          print h3("MAC '$sumac' already in AP '$ap->{name}' " .
                             "with SUID '$su->{suid}'");
                         $t->exit;                          $t->exit;
                         $t->close;                          $t->close;
                         return undef;                          return undef;
Line 193 
Line 192 
         my $new_sus = $t->sudb_view;          my $new_sus = $t->sudb_view;
         my $added = 0;          my $added = 0;
         foreach my $su (@{ $new_sus }) {          foreach my $su (@{ $new_sus }) {
                 if ($su->{'suid'} == $new_suid) {                  if ($su->{suid} == $new_suid) {
                         $added = 1;                          $added = 1;
                         last;                          last;
                 }                  }
Line 216 
Line 215 
         print p(          print p(
                 "Added new SU with ID '$new_suid' " .                  "Added new SU with ID '$new_suid' " .
                 "and MAC '$sumac' " .                  "and MAC '$sumac' " .
                 "to '$ap->{'name'}'.  " .                  "to '$ap->{name}'.  " .
                 '<a href="' . $me . '?' .                  '<a href="' . $me . '?' .
                 'AP=' . $ap->{'name'} . '&' .                  'AP=' . $ap->{name} . '&' .
                 'suid=' . $new_suid .                  'suid=' . $new_suid .
                 '">Test SU RFLink</a>'                  '">Test SU RFLink</a>'
         );          );
Line 234 
Line 233 
         my $ap  = shift;          my $ap  = shift;
         my $suid = shift;          my $suid = shift;
   
         my $t = login($ap->{'name'}, $ap->{'Telnet_Password'});          my $t = login($ap->{name}, $ap->{password});
   
         my $result = $t->su_testrflink( $suid );          my $result = $t->su_testrflink( $suid );
   
Line 250 
Line 249 
         my @table;          my @table;
         foreach my $su (@{ $result }) {          foreach my $su (@{ $result }) {
                 next unless ref $su eq 'HASH';                  next unless ref $su eq 'HASH';
                 next unless exists $su->{'suid'};                  next unless exists $su->{suid};
                 $su->{'suid'} =~ s/\D//g;                  $su->{suid} =~ s/\D//g;
                 next unless $su->{'suid'};                  next unless $su->{suid};
   
                 push @table, td([ @{ $su }{ @keys } ]);                  push @table, td([ @{ $su }{ @keys } ]);
         }          }
   
         print table({-border=>1,-cellspacing=>0,-cellpadding=>1},          print table({-border=>1,-cellspacing=>0,-cellpadding=>1},
                 caption($ap->{'name'} . ': su testrflink ' . $suid),                  caption($ap->{name} . ': su testrflink ' . $suid),
                 Tr({-align=>'CENTER', -valign=>'TOP'},                  Tr({-align=>'CENTER', -valign=>'TOP'},
                         [ th(\@keys), @table ]                          [ th(\@keys), @table ]
                 )                  )
Line 276 
Line 275 
   
         my $next_id = $Start_SUID;          my $next_id = $Start_SUID;
   
         my %ids = map { $_->{'suid'} => 1 } @{ $sudb };          my %ids = map { $_->{suid} => 1 } @{ $sudb };
   
         my $next_key = sprintf('%04d', $next_id);          my $next_key = sprintf('%04d', $next_id);
         while (exists $ids{$next_key}) {          while (exists $ids{$next_key}) {
Line 286 
Line 285 
   
         return $next_id;          return $next_id;
 }  }
   
 sub Read_Hosts  
 {  
     my $file = shift;  
     my $xs = XML::Simple->new();  
   
         my %Default_SNMP = (  
         Read_Community => 'public',  
                 Telnet_Password => 'password',  
         port => 161,  
         version => 1,  
         );  
   
     my @hosts;  
     my $hosts = $xs->XMLin($file,  
         keyattr => [ 'Station' ],  
         ForceArray => qr/^Host$/,  
     );  
   
     foreach my $group (keys %{ $hosts }) {  
         next if $group eq 'Read_Community';  
   
         foreach my $host (@{ $hosts->{$group}->{Host} }) {  
             foreach my $item ('Read_Community', 'Telnet_Password', 'port', 'version') {  
                 $host->{$item} =  
                     $host->{$item} ||  
                     $hosts->{$group}->{$item} ||  
                     $hosts->{$item} ||  
                     $Default_SNMP{$item};  
             }  
             $host->{group} = $group;  
   
             push @hosts, $host;  
         }  
     }  
   
     return \@hosts;  
 }  
   

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>