=================================================================== RCS file: /cvs/trango/Net-Telnet-Trango/lib/Net/Telnet/Trango.pm,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- trango/Net-Telnet-Trango/lib/Net/Telnet/Trango.pm 2006/01/03 00:22:19 1.5 +++ trango/Net-Telnet-Trango/lib/Net/Telnet/Trango.pm 2006/06/28 23:00:15 1.6 @@ -1,5 +1,5 @@ package Net::Telnet::Trango; -# $RedRiver: Trango.pm,v 1.4 2005/12/30 20:26:41 andrew Exp $ +# $RedRiver: Trango.pm,v 1.5 2006/01/03 00:22:19 andrew Exp $ use strict; use warnings; use base 'Net::Telnet'; @@ -15,11 +15,7 @@ use Net::Telnet::Trango; my $t = new Net::Telnet::Trango ( Timeout => 5 ); - my ($type, $version) = $t->open( Host => $fox ); - - unless (defined $type && defined $version) { - die "Error connecting: $!"; - } + $t->open( Host => $fox ) or die "Error connecting: $!"; $t->login('password') or die "Couldn't log in: $!"; @@ -259,6 +255,7 @@ sulog => { decode => 'sulog', expect => $success }, 'exit' => { no_prompt => 1, cmd_disconnects => 1 }, reboot => { no_prompt => 1, cmd_disconnects => 1 }, + sudb_save => { String => "sudb save", expect => $success }, #su password??? #_bootloader #temp @@ -461,7 +458,7 @@ my @sus; foreach (@lines) { - if (/^\[(\d+)\]\s+(\d+)\s+(\d+)\s+(\d+)\s+([0-9a-fA-F]+)/) { + if (/^\[(\d+)\]\s+(\d+)\s+(\d+)\s+(\d+)\s+([0-9A-Fa-f\s]+)$/) { my %s = ( suid => $1, type => $2, @@ -469,11 +466,151 @@ mir => $4, mac => $5, ); + + $s{'mac'} =~ s/\s//g; + $s{'mac'} = uc($s{'mac'}); + push @sus, \%s; } } return \@sus; +} + +=pod + +=item sudb_add + +Takes the following paramaters + + suid : numeric, + type : (reg|pr) + cir : numeric, + mir : numeric, + mac : Almost any format, it will be reformatted, + +and returns true on success or undef otherwise. + +You should sudb_save() after calling this, or your changes will be lost +when the AP is rebooted. + +=cut + +sub sudb_add +{ + my $self = shift; + my $suid = shift; + my $type = shift; + my $cir = shift; + my $mir = shift; + my $mac = shift; + + if ($suid =~ /\D/) { + return undef; + } + + unless (lc($type) eq 'reg' || lc($type) eq 'pr') { + warn "Invalid type '$type'!"; + return undef; + } + + if ($cir =~ /\D/) { + warn "Invalid CIR '$cir'!"; + return undef; + } + + if ($mir =~ /\D/) { + warn "Invalid MIR '$mir'!"; + return undef; + } + + my $new_mac = $mac; + $new_mac =~ s/[^0-9A-Fa-f]//; + unless (length $new_mac == 12) { + warn "Invalid MAC '$mac'!"; + return undef; + } + $new_mac = join ' ', $new_mac =~ /../g; + + my $string = 'sudb add ' . + $suid . ' ' . + $type . ' ' . + $cir . ' ' . + $mir . ' ' . + $new_mac; + + + return $self->cmd( String => $string, expect => $success ); +} + +=pod + +=item sudb_delete + +Takes either 'all' or the suid of the su to delete +and returns true on success or undef otherwise. + +You should sudb_save() after calling this, or your changes will be lost +when the AP is rebooted. + +=cut + +sub sudb_delete +{ + my $self = shift; + my $suid = shift; + + if ($suid =~ /\D/) { + return undef; + } + + return $self->cmd( String => 'sudb delete ' . $suid, expect => $success ); +} + + +=pod + +=item sudb_modify + +Takes either the suid of the su to delete +as well as what you are changing, either "cir, mir or su2su" +and returns true on success or undef otherwise. + +cir and mir also take a value to set the cir/mir to. + +su2su takes a group id parameter that is in hex. + +You should sudb_save() after calling this, or your changes will be lost +when the AP is rebooted. + +=cut + +sub sudb_modify +{ + my $self = shift; + my $suid = shift; + my $opt = shift; + my $value = shift; + + if ($suid =~ /\D/) { + return undef; + } + + if (lc($opt) eq 'cir' or lc($opt) eq 'mir') { + if ($value =~ /\D/) { + return undef; + } + } elsif (lc($opt) eq 'su2su') { + if ($value =~ /[^0-9A-Za-f]/) { + return undef; + } + } else { + return undef; + } + + my $string = 'sudb modify ' . $suid . ' ' . $opt . ' ' . $value; + + return $self->cmd( String => $string, expect => $success ); } =pod