def write_merged(filename, rulemap): if not args.quiet: # List of rule IDs that have been added. added = [] # List of rule objects that have been removed. removed = [] # List of rule IDs that have been modified. modified = [] oldset = {} if os.path.exists(filename): for rule in rule_mod.parse_file(filename): oldset[rule.id] = True if not rule.id in rulemap: removed.append(rule) elif rule.format() != rulemap[rule.id].format(): modified.append(rulemap[rule.id]) for key in rulemap: if not key in oldset: added.append(key) enabled = len([rule for rule in rulemap.values() if rule.enabled]) logger.info("Writing rules to %s: total: %d; enabled: %d; " "added: %d; removed %d; modified: %d" % (filename, len(rulemap), enabled, len(added), len(removed), len(modified))) with io.open(filename, encoding="utf-8", mode="w") as fileobj: for rule in rulemap: print(rulemap[rule].format(), file=fileobj)
def write_to_directory(directory, files, rulemap, dep_files): # List of rule IDs that have been added. added = [] # List of rule objects that have been removed. removed = [] # List of rule IDs that have been modified. modified = [] oldset = {} if not args.quiet: for filename in files: outpath = os.path.join(directory, os.path.basename(filename)) if os.path.exists(outpath): for rule in rule_mod.parse_file(outpath): oldset[rule.id] = True if not rule.id in rulemap: removed.append(rule) elif rule.format() != rulemap[rule.id].format(): modified.append(rule.id) for key in rulemap: if not key in oldset: added.append(key) enabled = len([rule for rule in rulemap.values() if rule.enabled]) logger.info("Writing rule files to directory %s: total: %d; " "enabled: %d; added: %d; removed %d; modified: %d" % (directory, len(rulemap), enabled, len(added), len(removed), len(modified))) for filename in sorted(files): outpath = os.path.join(directory, os.path.basename(filename)) logger.debug("Writing %s." % outpath) if not filename.endswith(".rules"): open(outpath, "wb").write(files[filename]) else: content = [] for line in io.StringIO(files[filename].decode("utf-8")): rule = rule_mod.parse(line) if not rule: content.append(line.strip()) else: for kw in file_kw: if kw in rule: if "dataset" == kw: handle_dataset_files(rule, dep_files) else: handle_filehash_files(rule, dep_files, kw) content.append(rulemap[rule.id].format()) tmp_filename = ".".join([outpath, "tmp"]) io.open(tmp_filename, encoding="utf-8", mode="w").write(u"\n".join(content)) os.rename(tmp_filename, outpath)
def import_file(self, file_path: str, source: str, default_classification: str = None): self.log.info(f"Importing file: {file_path}") cur_file = os.path.expanduser(file_path) if os.path.exists(cur_file): signatures = parse_file(cur_file) return self._save_signatures( signatures, source, cur_file, default_classification=default_classification) else: raise Exception(f"File {cur_file} does not exists.")
def write_merged(filename, rulemap, dep_files): if not args.quiet: # List of rule IDs that have been added. added = [] # List of rule objects that have been removed. removed = [] # List of rule IDs that have been modified. modified = [] oldset = {} if os.path.exists(filename): for rule in rule_mod.parse_file(filename): oldset[rule.id] = True if not rule.id in rulemap: removed.append(rule) elif rule.format() != rulemap[rule.id].format(): modified.append(rulemap[rule.id]) for key in rulemap: if not key in oldset: added.append(key) enabled = len([rule for rule in rulemap.values() if rule.enabled]) logger.info("Writing rules to %s: total: %d; enabled: %d; " "added: %d; removed %d; modified: %d" % ( filename, len(rulemap), enabled, len(added), len(removed), len(modified))) tmp_filename = ".".join([filename, "tmp"]) with io.open(tmp_filename, encoding="utf-8", mode="w") as fileobj: for sid in rulemap: rule = rulemap[sid] for kw in file_kw: if kw in rule: if "dataset" == kw: handle_dataset_files(rule, dep_files) else: handle_filehash_files(rule, dep_files, kw) print(rule.format(), file=fileobj) os.rename(tmp_filename, filename)