From 477a640cf83cc7f4cca2c7d633cbd4328808b79a Mon Sep 17 00:00:00 2001 From: Nigel Kukard <nkukard@lbsd.net> Date: Sun, 1 Mar 2009 10:29:12 +0000 Subject: [PATCH] * Add raw value aswell to our attributes --- Radius/Packet.pm | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Radius/Packet.pm b/Radius/Packet.pm index 37ab456b..25bec34c 100644 --- a/Radius/Packet.pm +++ b/Radius/Packet.pm @@ -50,7 +50,7 @@ sub vendors { keys %{$_[0]->{VSAttributes}}; } sub vsattributes { keys %{$_[0]->{VSAttributes}->{$_[1]}}; } sub vsattr { $_[0]->{VSAttributes}->{$_[1]}->{$_[2]}; } sub set_vsattr { - my ($self, $vendor, $name, $value, $rewrite_flag) = @_; + my ($self, $vendor, $name, $value, $rewrite_flag, $rawValue) = @_; $self->{VSAttributes}->{$vendor} = {} unless exists($self->{VSAttributes}->{$vendor}); my $attr = $self->{VSAttributes}->{$vendor}; @@ -67,7 +67,7 @@ sub set_vsattr { } } - push @{$attr->{$name}}, $value; + push @{$attr->{$name}}, $value, $rawValue; } sub unset_vsattr { @@ -80,7 +80,7 @@ sub show_unknown_entries { $_[0]->{unknown_entries} = $_[1]; } sub set_attr { - my ($self, $name, $value, $rewrite_flag) = @_; + my ($self, $name, $value, $rewrite_flag, $rawValue) = @_; my ($push, $pos ); $push = 1 unless $rewrite_flag; @@ -101,6 +101,7 @@ sub set_attr } elsif ($found) { $attr[$pos][0] = $name; $attr[$pos][1] = $value; + $attr[$pos][2] = $rawValue; $self->_set_attributes( \@attr ); return; } else { @@ -108,7 +109,7 @@ sub set_attr } } - $self->_push_attr( $name, $value ) if $push; + $self->_push_attr( $name, $value, $rawValue ) if $push; } sub attr @@ -205,7 +206,7 @@ sub unset_attr_slot { # as specified in RFC 2865 sub _attributes { @{ $_[0]->{Attributes} || [] }; } sub _set_attributes { $_[0]->{Attributes} = $_[1]; } -sub _push_attr { push @{ $_[0]->{Attributes} }, [ $_[1], $_[2] ]; } +sub _push_attr { push @{ $_[0]->{Attributes} }, [ $_[1], $_[2], $_[3] ]; } # Decode the password sub password { @@ -475,7 +476,7 @@ sub unpack { my $num=unpack("N", $_[0]); return ( defined $dict->val_has_name($_[1]) && defined $dict->val_name($_[1],$num) ) ? - $dict->val_name($_[1],$num) : $num ; + ($dict->val_name($_[1],$num),undef,$num) : $num ; }, "ipaddr" => sub { return length($_[0]) == 4 ? inet_ntoa($_[0]) : $_[0]; @@ -520,7 +521,7 @@ sub unpack { my $num=unpack("N", $_[0]); return ( $dict->vsaval_has_name($_[2], $_[1]) && $dict->vsaval_name($_[2], $_[1],$num) ) - ? $dict->vsaval_name($_[2], $_[1], $num ) + ? ( $dict->vsaval_name($_[2], $_[1], $num ), undef, $num) : $num; }, "ipaddr" => sub { @@ -557,6 +558,7 @@ sub unpack { { my $length = unpack "x C", $attrdat; my ($type, $value) = unpack "C x a${\($length-2)}", $attrdat; +print(STDERR "Type: $type, length: $length, value: ".unpack('H*',$value).", value: >$value<\n"); if ($type == $VSA) { # Vendor-Specific Attribute my ($vid) = unpack "N", $value; substr ($value, 0, 4) = ""; @@ -597,7 +599,7 @@ sub unpack { substr($value, 0, $vlength) = ""; # Skip this section next; } - my ($val, $tag) = + my ($val, $tag, $rawValue) = &{$vsaunpacker{$dict->vsattr_numtype($vid, $vtype)}}($vvalue, $vtype, $vid); @@ -612,7 +614,7 @@ sub unpack { else { $self->set_vsattr($vid, $dict->vsattr_name($vid, $vtype), - $val); + $val, undef, $rawValue); } substr($value, 0, $vlength) = ""; } @@ -630,14 +632,14 @@ sub unpack { substr($attrdat, 0, $length) = ""; # Skip this section next; } - my ($val,$tag) = &{$unpacker{$dict->attr_numtype($type)}}($value, + my ($val,$tag,$rawValue) = &{$unpacker{$dict->attr_numtype($type)}}($value, $type); if ( defined $tag ) { if ( ! defined $val ) { $val = "-emtpy-" }; $self->set_taggedattr($dict->attr_name($type), $val , $tag); } else { - $self->set_attr($dict->attr_name($type), $val); + $self->set_attr($dict->attr_name($type), $val, undef, $rawValue); } } substr($attrdat, 0, $length) = ""; # Skip this section -- GitLab