Module: check_mk
Branch: master
Commit: d8aa7985d51f91164dbcfb6e95e2493c9315966f
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=d8aa7985d51f91…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Thu Oct 25 15:26:08 2018 +0200
Unbreak pylint test: Resurrected dead strip_snmp_value.
Change-Id: Id45c1b1fbbeb0647928298aef662b987af84ba86
---
cmk_base/classic_snmp.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/cmk_base/classic_snmp.py b/cmk_base/classic_snmp.py
index e1822d1..e650a39 100644
--- a/cmk_base/classic_snmp.py
+++ b/cmk_base/classic_snmp.py
@@ -279,3 +279,56 @@ def _snmp_base_command(what, access_data, context_name):
options += ["-n", context_name]
return command + options
+
+#.
+# .--SNMP helpers--------------------------------------------------------.
+# | ____ _ _ __ __ ____ _ _ |
+# | / ___|| \ | | \/ | _ \ | |__ ___| |_ __ ___ _ __ ___ |
+# | \___ \| \| | |\/| | |_) | | '_ \ / _ \ | '_ \ / _ \ '__/ __| |
+# | ___) | |\ | | | | __/ | | | | __/ | |_) | __/ | \__ \ |
+# | |____/|_| \_|_| |_|_| |_| |_|\___|_| .__/ \___|_| |___/ |
+# | |_| |
+# +----------------------------------------------------------------------+
+# | Internal helpers for processing SNMP things |
+# '----------------------------------------------------------------------'
+
+
+def strip_snmp_value(value, hex_plain=False):
+ v = value.strip()
+ if v.startswith('"'):
+ v = v[1:-1]
+ if len(v) > 2 and _is_hex_string(v):
+ return value if hex_plain else _convert_from_hex(v)
+ # Fix for non hex encoded string which have been somehow encoded by the
+ # netsnmp command line tools. An example:
+ # Checking windows systems via SNMP with hr_fs: disk names like c:\
+ # are reported as c:\\, fix this to single \
+ return v.strip().replace('\\\\', '\\')
+ return v
+
+
+def _is_hex_string(value):
+ # as far as I remember, snmpwalk puts a trailing space within
+ # the quotes in case of hex strings. So we require that space
+ # to be present in order make sure, we really deal with a hex string.
+ if value[-1] != ' ':
+ return False
+ hexdigits = "0123456789abcdefABCDEF"
+ n = 0
+ for x in value:
+ if n % 3 == 2:
+ if x != ' ':
+ return False
+ else:
+ if x not in hexdigits:
+ return False
+ n += 1
+ return True
+
+
+def _convert_from_hex(value):
+ hexparts = value.split()
+ r = ""
+ for hx in hexparts:
+ r += chr(int(hx, 16))
+ return r