Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix invalid return values from snmpTargetAddrExtTable
The is_set_ok/set callbacks from the snmpTargetAddrExtTable handlers can
return invalid column numbers in error responses. They store their data in
snmpTargetAddrTable from column #11 onwards and correctly convert the
column numbers before calling the generic table handler. When that
returns an error, however, the errorneous column number remains at >10
and causes a genErr in the further SNMP processing. Fix that by looking
for error responses from the generic table handler and correcting column
numbers therein.
  • Loading branch information
Stefan Zegenhagen authored and proxyles committed Sep 7, 2012
1 parent b974565 commit 9e8e572
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions lib/snmp/src/agent/snmp_community_mib.erl
Expand Up @@ -509,17 +509,17 @@ snmpTargetAddrExtTable(set, RowIndex, Cols0) ->
case (catch verify_snmpTargetAddrExtTable_cols(Cols0, [])) of case (catch verify_snmpTargetAddrExtTable_cols(Cols0, [])) of
{ok, Cols} -> {ok, Cols} ->
NCols = conv3(Cols), NCols = conv3(Cols),
snmp_generic:table_func(set, RowIndex, NCols, conv4(snmp_generic:table_func(set, RowIndex, NCols,
db(snmpTargetAddrExtTable)); db(snmpTargetAddrExtTable)));
Error -> Error ->
Error Error
end; end;
snmpTargetAddrExtTable(is_set_ok, RowIndex, Cols0) -> snmpTargetAddrExtTable(is_set_ok, RowIndex, Cols0) ->
case (catch verify_snmpTargetAddrExtTable_cols(Cols0, [])) of case (catch verify_snmpTargetAddrExtTable_cols(Cols0, [])) of
{ok, Cols} -> {ok, Cols} ->
NCols = conv3(Cols), NCols = conv3(Cols),
snmp_generic:table_func(is_set_ok, RowIndex, NCols, conv4(snmp_generic:table_func(is_set_ok, RowIndex, NCols,
db(snmpTargetAddrExtTable)); db(snmpTargetAddrExtTable)));
Error -> Error ->
Error Error
end. end.
Expand Down Expand Up @@ -583,6 +583,10 @@ conv3([{Idx, Val}|T]) -> [{Idx+10, Val} | conv3(T)];
conv3([]) -> []. conv3([]) -> [].




conv4({ErrAtom, ErrIdx}) -> {ErrAtom, ErrIdx - 10};
conv4(X) -> X.


get(Name, RowIndex, Cols) -> get(Name, RowIndex, Cols) ->
snmp_generic:handle_table_get(db(Name), RowIndex, Cols, foi(Name)). snmp_generic:handle_table_get(db(Name), RowIndex, Cols, foi(Name)).


Expand Down

0 comments on commit 9e8e572

Please sign in to comment.