]> git.ipfire.org Git - thirdparty/suricata-update.git/commitdiff
Shorten the state of being written for rule files
authorShivani Bhardwaj <shivanib134@gmail.com>
Tue, 6 Nov 2018 17:33:43 +0000 (23:03 +0530)
committerShivani Bhardwaj <shivanib134@gmail.com>
Thu, 3 Sep 2020 15:51:33 +0000 (21:21 +0530)
In an attempt to have shorter window for rule files of being written,
write the rules at first to `<filename>.tmp` and then rename the file.

Closes Redmine ticket #2327

suricata/update/main.py

index 147007f4a147a883fe185b026011859f90b80489..c7d59318814bd7cf02de555a84a846b298ff8adb 100644 (file)
@@ -483,7 +483,8 @@ def write_merged(filename, rulemap, dep_files):
                         len(added),
                         len(removed),
                         len(modified)))
-    with io.open(filename, encoding="utf-8", mode="w") as fileobj:
+    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:
@@ -492,8 +493,8 @@ def write_merged(filename, rulemap, dep_files):
                         handle_dataset_files(rule, dep_files)
                     else:
                         handle_filehash_files(rule, dep_files, kw)
-
             print(rule.format(), file=fileobj)
+    os.rename(tmp_filename, filename)
 
 def write_to_directory(directory, files, rulemap, dep_files):
     # List of rule IDs that have been added.
@@ -550,8 +551,10 @@ def write_to_directory(directory, files, rulemap, dep_files):
                             else:
                                 handle_filehash_files(rule, dep_files, kw)
                     content.append(rulemap[rule.id].format())
-            io.open(outpath, encoding="utf-8", mode="w").write(
+            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 write_yaml_fragment(filename, files):
     logger.info(