mirror of
https://github.com/centreon/centreon-plugins.git
synced 2025-07-31 01:24:35 +02:00
fix(generic-snmp): issue in the walk fixed
This commit is contained in:
parent
0760bc53eb
commit
2a7014edf3
@ -183,7 +183,7 @@ pub fn r_snmp_get(target: &str, oid: &str, community: &str) -> SnmpResult {
|
|||||||
trace!("Received {} bytes", resp.0);
|
trace!("Received {} bytes", resp.0);
|
||||||
assert!(resp.0 > 0);
|
assert!(resp.0 > 0);
|
||||||
let decoded: Message<Pdus> = rasn::ber::decode(&buf[0..resp.0]).unwrap();
|
let decoded: Message<Pdus> = rasn::ber::decode(&buf[0..resp.0]).unwrap();
|
||||||
build_response(decoded, false).0
|
build_response(decoded, "", false).0
|
||||||
}
|
}
|
||||||
|
|
||||||
//#[no_mangle]
|
//#[no_mangle]
|
||||||
@ -265,7 +265,7 @@ pub fn r_snmp_walk(target: &str, oid: &str) -> SnmpResult {
|
|||||||
}
|
}
|
||||||
message = create_next_request(request_id, &resp_oid);
|
message = create_next_request(request_id, &resp_oid);
|
||||||
}
|
}
|
||||||
retval.concat(build_response(decoded, true).0);
|
retval.concat(build_response(decoded, &oid, true).0);
|
||||||
request_id += 1;
|
request_id += 1;
|
||||||
}
|
}
|
||||||
retval
|
retval
|
||||||
@ -346,7 +346,7 @@ pub fn r_snmp_bulk_get(
|
|||||||
trace!("Received {} bytes", resp.0);
|
trace!("Received {} bytes", resp.0);
|
||||||
assert!(resp.0 > 0);
|
assert!(resp.0 > 0);
|
||||||
let decoded: Message<Pdus> = rasn::ber::decode(&buf[0..resp.0]).unwrap();
|
let decoded: Message<Pdus> = rasn::ber::decode(&buf[0..resp.0]).unwrap();
|
||||||
let (result, _completed) = build_response(decoded, false);
|
let (result, _completed) = build_response(decoded, "", false);
|
||||||
retval.concat(result);
|
retval.concat(result);
|
||||||
retval
|
retval
|
||||||
}
|
}
|
||||||
@ -417,7 +417,7 @@ pub fn r_snmp_bulk_walk(target: &str, _version: &str, community: &str, oid: &str
|
|||||||
let resp_oid = &resp.0.variable_bindings[0].name;
|
let resp_oid = &resp.0.variable_bindings[0].name;
|
||||||
let n = resp_oid.len() - 1;
|
let n = resp_oid.len() - 1;
|
||||||
}
|
}
|
||||||
let (result, completed) = build_response(decoded, true);
|
let (result, completed) = build_response(decoded, &oid, true);
|
||||||
retval.concat(result);
|
retval.concat(result);
|
||||||
if completed {
|
if completed {
|
||||||
break;
|
break;
|
||||||
@ -434,21 +434,16 @@ pub fn r_snmp_bulk_walk(target: &str, _version: &str, community: &str, oid: &str
|
|||||||
retval
|
retval
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_response(decoded: Message<Pdus>, walk: bool) -> (SnmpResult, bool) {
|
fn build_response(decoded: Message<Pdus>, oid: &str, walk: bool) -> (SnmpResult, bool) {
|
||||||
let mut retval = SnmpResult::new();
|
let mut retval = SnmpResult::new();
|
||||||
let mut completed = false;
|
let mut completed = false;
|
||||||
|
|
||||||
if let Pdus::Response(resp) = &decoded.data {
|
if let Pdus::Response(resp) = &decoded.data {
|
||||||
let vars = &resp.0.variable_bindings;
|
let vars = &resp.0.variable_bindings;
|
||||||
let mut header = "".to_string();
|
|
||||||
for var in vars {
|
for var in vars {
|
||||||
let name = var.name.to_string();
|
let name = var.name.to_string();
|
||||||
if walk {
|
if walk {
|
||||||
if header == "" {
|
if !name.starts_with(oid) {
|
||||||
// We remove from name the last number after the last "." to get the header.
|
|
||||||
let n = name.rfind('.').unwrap();
|
|
||||||
header = name[0..n].to_string();
|
|
||||||
} else if !name.starts_with(&header) {
|
|
||||||
completed = true;
|
completed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user