def testNetgroupParser(self): """Ensure we can extract users from a netgroup file.""" parser = linux_file_parser.NetgroupParser() dat = u"""group1 (-,user1,) (-,user2,) (-,user3,) #group1 comment group2 (-,user4,) (-,user2,) super_group (-,user5,) (-,user6,) (-,文德文,) group1 group2 super_group2 (-,user7,) super_group super_group3 (-,user5,) (-,user6,) group1 group2 """ dat_fd = StringIO.StringIO(dat) config_lib.CONFIG.Set("Artifacts.netgroup_user_blacklist", ["user2", "user3"]) out = list(parser.Parse(None, dat_fd, None)) users = [] for result in out: if isinstance(result, rdfvalue.Anomaly): self.assertTrue(utils.SmartUnicode(u"文德文") in result.symptom) else: users.append(result) self.assertItemsEqual([x.username for x in users], [u"user1", u"user4", u"user5", u"user6", u"user7"]) dat_fd.seek(0) config_lib.CONFIG.Set("Artifacts.netgroup_filter_regexes", [r"^super_group3$"]) out = list(parser.Parse(None, dat_fd, None)) self.assertItemsEqual([x.username for x in out], [u"user5", u"user6"])
def testNetgroupParserBadInput(self): parser = linux_file_parser.NetgroupParser() dat = """group1 (-,user1,) (-,user2,) (-,user3,) #group1 comment group2 user4 (-user2,) super_group (-,,user5,) (-user6,) group1 group2 super_group2 (-,user7,) super_group """ self.assertRaises(parsers.ParseError, list, parser.Parse(None, StringIO.StringIO(dat), None))