Multiple bug fixes for AUTOLOAD generated set_ methods
This commit is contained in:
28
Info.pm
28
Info.pm
@@ -3640,6 +3640,21 @@ sub _make_setter {
|
|||||||
my $val = shift;
|
my $val = shift;
|
||||||
my $iid = shift;
|
my $iid = shift;
|
||||||
|
|
||||||
|
my $set_oid = $oid;
|
||||||
|
my $globals = $self->globals();
|
||||||
|
my $attr = $method;
|
||||||
|
$attr =~ s/^set_//;
|
||||||
|
|
||||||
|
# The only thing which may give us the iid in $oid should be
|
||||||
|
# a %GLOBALS entry appended with a number. In that case strip it
|
||||||
|
# from the OID and use it as $iid
|
||||||
|
if ( defined $globals->{$attr} && $globals->{$attr} =~ /(\.\d+$)/ ) {
|
||||||
|
$iid = $1;
|
||||||
|
$set_oid =~ s/$iid//;
|
||||||
|
}
|
||||||
|
|
||||||
|
# If we don't have $iid now we should be a %GLOBALS entry or single
|
||||||
|
# instance MIB leaf so default to zero
|
||||||
$iid = defined $iid ? $iid : '.0';
|
$iid = defined $iid ? $iid : '.0';
|
||||||
|
|
||||||
# prepend dot if necessary to $iid
|
# prepend dot if necessary to $iid
|
||||||
@@ -3648,13 +3663,13 @@ sub _make_setter {
|
|||||||
my $sess = $self->session();
|
my $sess = $self->session();
|
||||||
return unless defined $sess;
|
return unless defined $sess;
|
||||||
|
|
||||||
$oid .= $iid;
|
$set_oid .= "$iid";
|
||||||
|
|
||||||
$self->debug()
|
$self->debug()
|
||||||
and print "SNMP::Info::_set $method$iid ($oid) = $val\n";
|
and print "SNMP::Info::_set $method$iid ($set_oid) = $val\n";
|
||||||
delete $self->{"_$method"};
|
delete $self->{"_$attr"};
|
||||||
|
|
||||||
my $rv = $sess->set( $oid, $val );
|
my $rv = $sess->set( $set_oid, $val );
|
||||||
|
|
||||||
if ( $sess->{ErrorStr} ) {
|
if ( $sess->{ErrorStr} ) {
|
||||||
$self->error_throw("SNMP::Info::_set $sess->{ErrorStr}");
|
$self->error_throw("SNMP::Info::_set $sess->{ErrorStr}");
|
||||||
@@ -4111,6 +4126,7 @@ sub _validate_autoload_method {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $method = shift;
|
my $method = shift;
|
||||||
|
|
||||||
|
my $setter = $method =~ /^set/;
|
||||||
my $attr = $method;
|
my $attr = $method;
|
||||||
$attr =~ s/^(load|set|orig)_//;
|
$attr =~ s/^(load|set|orig)_//;
|
||||||
$attr =~ s/_raw$//;
|
$attr =~ s/_raw$//;
|
||||||
@@ -4168,10 +4184,10 @@ sub _validate_autoload_method {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Tag on .0 for %GLOBALS and single instance MIB leafs unless
|
# Tag on .0 for %GLOBALS and single instance MIB leafs unless
|
||||||
# the leaf ends in a digit
|
# the leaf ends in a digit or we are going to use for a set operation
|
||||||
if ( $table_leaf == 0 && ( $globals->{$attr} || $leaf_name ne $oid ) ) {
|
if ( $table_leaf == 0 && ( $globals->{$attr} || $leaf_name ne $oid ) ) {
|
||||||
|
|
||||||
unless ( $leaf_name =~ /\d$/ ) {
|
unless ( $leaf_name =~ /\d$/ || $setter ) {
|
||||||
$oid .= ".0";
|
$oid .= ".0";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user