def load_mib(filenames): """Load the conf.mib dict from a list of filenames""" the_mib = {'iso': ['1']} unresolved = {} for k in six.iterkeys(conf.mib): _mib_register(conf.mib[k], k.split("."), the_mib, unresolved) if isinstance(filenames, (str, bytes)): filenames = [filenames] for fnames in filenames: for fname in glob(fnames): f = open(fname) text = f.read() cleantext = " ".join( _mib_re_strings.split(" ".join( _mib_re_comments.split(text)))) # noqa: E501 for m in _mib_re_oiddecl.finditer(cleantext): gr = m.groups() ident, oid = gr[0], gr[-1] ident = fixname(ident) oid = oid.split() for i, elt in enumerate(oid): m = _mib_re_both.match(elt) if m: oid[i] = m.groups()[1] _mib_register(ident, oid, the_mib, unresolved) newmib = MIBDict(_name="MIB") for oid, key in six.iteritems(the_mib): newmib[".".join(key)] = oid for oid, key in six.iteritems(unresolved): newmib[".".join(key)] = oid conf.mib = newmib
def load_mib(filenames): the_mib = {'iso': ['1']} unresolved = {} for k in conf.mib.iterkeys(): mib_register(k, conf.mib[k].split("."), the_mib, unresolved) if type(filenames) is str: filenames = [filenames] for fnames in filenames: for fname in glob(fnames): f = open(fname) text = f.read() cleantext = " ".join( _mib_re_strings.split(" ".join(_mib_re_comments.split(text)))) for m in _mib_re_oiddecl.finditer(cleantext): gr = m.groups() ident, oid = gr[0], gr[-1] ident = fixname(ident) oid = oid.split() for i, elt in enumerate(oid): m = _mib_re_both.match(elt) if m: oid[i] = m.groups()[1] mib_register(ident, oid, the_mib, unresolved) newmib = MIBDict(_name="MIB") for k, o in the_mib.iteritems(): newmib[k] = ".".join(o) for k, o in unresolved.iteritems(): newmib[k] = ".".join(o) conf.mib = newmib
def load_mib(filenames): the_mib = {'iso': ['1']} unresolved = {} for k in conf.mib.iterkeys(): mib_register(k, conf.mib[k].split("."), the_mib, unresolved) if type(filenames) is str: filenames = [filenames] for fnames in filenames: for fname in glob(fnames): f = open(fname) text = f.read() cleantext = " ".join(_mib_re_strings.split(" ".join(_mib_re_comments.split(text)))) for m in _mib_re_oiddecl.finditer(cleantext): gr = m.groups() ident,oid = gr[0],gr[-1] ident=fixname(ident) oid = oid.split() for i, elt in enumerate(oid): m = _mib_re_both.match(elt) if m: oid[i] = m.groups()[1] mib_register(ident, oid, the_mib, unresolved) newmib = MIBDict(_name="MIB") for k,o in the_mib.iteritems(): newmib[k]=".".join(o) for k,o in unresolved.iteritems(): newmib[k]=".".join(o) conf.mib=newmib
def load_mib(filenames): """Load the conf.mib dict from a list of filenames""" the_mib = {'iso': ['1']} unresolved = {} for k in six.iterkeys(conf.mib): _mib_register(conf.mib[k], k.split("."), the_mib, unresolved) if isinstance(filenames, (str, bytes)): filenames = [filenames] for fnames in filenames: for fname in glob(fnames): f = open(fname) text = f.read() cleantext = " ".join(_mib_re_strings.split(" ".join(_mib_re_comments.split(text)))) # noqa: E501 for m in _mib_re_oiddecl.finditer(cleantext): gr = m.groups() ident, oid = gr[0], gr[-1] ident = fixname(ident) oid = oid.split() for i, elt in enumerate(oid): m = _mib_re_both.match(elt) if m: oid[i] = m.groups()[1] _mib_register(ident, oid, the_mib, unresolved) newmib = MIBDict(_name="MIB") for oid, key in six.iteritems(the_mib): newmib[".".join(key)] = oid for oid, key in six.iteritems(unresolved): newmib[".".join(key)] = oid conf.mib = newmib
def _mib_register( ident, # type: str value, # type: List[str] the_mib, # type: Dict[str, List[str]] unresolved, # type: Dict[str, List[str]] alias, # type: Dict[str, str] ): # type: (...) -> bool """ Internal function used to register an OID and its name in a MIBDict """ if ident in the_mib: # We have already resolved this one. Store the alias alias[".".join(value)] = ident return True if ident in unresolved: # We know we can't resolve this one return False resval = [] not_resolved = 0 # Resolve the OID # (e.g. 2.basicConstraints.3 -> 2.2.5.29.19.3) for v in value: if _mib_re_integer.match(v): resval.append(v) else: v = fixname(plain_str(v)) if v not in the_mib: not_resolved = 1 if v in the_mib: resval += the_mib[v] elif v in unresolved: resval += unresolved[v] else: resval.append(v) if not_resolved: # Unresolved unresolved[ident] = resval return False else: # Fully resolved the_mib[ident] = resval keys = list(unresolved) i = 0 # Go through the unresolved to update the ones that # depended on the one we just did while i < len(keys): k = keys[i] if _mib_register(k, unresolved[k], the_mib, {}, alias): # Now resolved: we can remove it from unresolved del (unresolved[k]) del (keys[i]) i = 0 else: i += 1 return True
def load_mib(filenames): # type: (str) -> None """ Load the conf.mib dict from a list of filenames """ the_mib = {'iso': ['1']} unresolved = {} # type: Dict[str, List[str]] alias = {} # type: Dict[str, str] # Export the current MIB to a working dictionary for k in six.iterkeys(conf.mib): _mib_register(conf.mib[k], k.split("."), the_mib, unresolved, alias) # Read the files if isinstance(filenames, (str, bytes)): files_list = [filenames] else: files_list = filenames for fnames in files_list: for fname in glob(fnames): with open(fname) as f: text = f.read() cleantext = " ".join( _mib_re_strings.split(" ".join(_mib_re_comments.split(text))) ) for m in _mib_re_oiddecl.finditer(cleantext): gr = m.groups() ident, oid_s = gr[0], gr[-1] ident = fixname(ident) oid_l = oid_s.split() for i, elt in enumerate(oid_l): m2 = _mib_re_both.match(elt) if m2: oid_l[i] = m2.groups()[1] _mib_register(ident, oid_l, the_mib, unresolved, alias) # Create the new MIB newmib = MIBDict(_name="MIB") # Add resolved values for oid, key in six.iteritems(the_mib): newmib[".".join(key)] = oid # Add unresolved values for oid, key in six.iteritems(unresolved): newmib[".".join(key)] = oid # Add aliases for key, oid in six.iteritems(alias): newmib[key] = oid conf.mib = newmib
def load_services(filename): # type: (str) -> Tuple[DADict[int, str], DADict[int, str]] spaces = re.compile(b"[ \t]+|\n") tdct = DADict(_name="%s-tcp" % filename) # type: DADict[int, str] udct = DADict(_name="%s-udp" % filename) # type: DADict[int, str] try: with open(filename, "rb") as fdesc: for line in fdesc: try: shrp = line.find(b"#") if shrp >= 0: line = line[:shrp] line = line.strip() if not line: continue lt = tuple(re.split(spaces, line)) if len(lt) < 2 or not lt[0]: continue dtct = None if lt[1].endswith(b"/tcp"): dtct = tdct elif lt[1].endswith(b"/udp"): dtct = udct else: continue port = lt[1].split(b'/')[0] name = fixname(lt[0]) if b"-" in port: sport, eport = port.split(b"-") for i in range(int(sport), int(eport) + 1): dtct[i] = name else: dtct[int(port)] = name except Exception as e: log_loading.warning( "Couldn't parse file [%s]: line [%r] (%s)", filename, line, e, ) except IOError: log_loading.info("Can't open /etc/services file") return tdct, udct
def _process_data(fdesc): for line in fdesc: try: shrp = line.find(b"#") if shrp >= 0: line = line[:shrp] line = line.strip() if not line: continue lt = tuple(re.split(spaces, line)) if len(lt) < 2 or not lt[0]: continue dct[int(lt[1], _integer_base)] = fixname(lt[0]) except Exception as e: log_loading.info( "Couldn't parse file [%s]: line [%r] (%s)", filename, line, e, )
def _mib_register(ident, value, the_mib, unresolved): """Internal function used to register an OID and its name in a MIBDict""" if ident in the_mib or ident in unresolved: return ident in the_mib resval = [] not_resolved = 0 for v in value: if _mib_re_integer.match(v): resval.append(v) else: v = fixname(plain_str(v)) if v not in the_mib: not_resolved = 1 if v in the_mib: v = the_mib[v] elif v in unresolved: v = unresolved[v] if isinstance(v, list): resval += v else: resval.append(v) if not_resolved: unresolved[ident] = resval return False else: the_mib[ident] = resval keys = list(unresolved) i = 0 while i < len(keys): k = keys[i] if _mib_register(k, unresolved[k], the_mib, {}): del (unresolved[k]) del (keys[i]) i = 0 else: i += 1 return True
def _mib_register(ident, value, the_mib, unresolved): """Internal function used to register an OID and its name in a MIBDict""" if ident in the_mib or ident in unresolved: return ident in the_mib resval = [] not_resolved = 0 for v in value: if _mib_re_integer.match(v): resval.append(v) else: v = fixname(plain_str(v)) if v not in the_mib: not_resolved = 1 if v in the_mib: v = the_mib[v] elif v in unresolved: v = unresolved[v] if isinstance(v, list): resval += v else: resval.append(v) if not_resolved: unresolved[ident] = resval return False else: the_mib[ident] = resval keys = list(unresolved) i = 0 while i < len(keys): k = keys[i] if _mib_register(k, unresolved[k], the_mib, {}): del(unresolved[k]) del(keys[i]) i = 0 else: i += 1 return True
def mib_register(ident, value, the_mib, unresolved): if ident in the_mib or ident in unresolved: return ident in the_mib resval = [] not_resolved = 0 for v in value: if _mib_re_integer.match(v): resval.append(v) else: v = fixname(v) if v not in the_mib: not_resolved = 1 if v in the_mib: v = the_mib[v] elif v in unresolved: v = unresolved[v] if type(v) is list: resval += v else: resval.append(v) if not_resolved: unresolved[ident] = resval return False else: the_mib[ident] = resval keys = unresolved.keys() i = 0 while i < len(keys): k = keys[i] if mib_register(k, unresolved[k], the_mib, {}): del (unresolved[k]) del (keys[i]) i = 0 else: i += 1 return True
def mib_register(ident, value, the_mib, unresolved): if ident in the_mib or ident in unresolved: return ident in the_mib resval = [] not_resolved = 0 for v in value: if _mib_re_integer.match(v): resval.append(v) else: v = fixname(v) if v not in the_mib: not_resolved = 1 if v in the_mib: v = the_mib[v] elif v in unresolved: v = unresolved[v] if type(v) is list: resval += v else: resval.append(v) if not_resolved: unresolved[ident] = resval return False else: the_mib[ident] = resval keys = unresolved.keys() i = 0 while i < len(keys): k = keys[i] if mib_register(k,unresolved[k], the_mib, {}): del(unresolved[k]) del(keys[i]) i = 0 else: i += 1 return True
def ident(self, v): return fixname(v[0] if isinstance(v, tuple) else v)
def ident(self, v): # type: (Any) -> str return fixname(v[0] if isinstance(v, tuple) else v)