]> granicus.if.org Git - python/commitdiff
Fix for PR#111: when using the inplace option, give the new file the
authorGuido van Rossum <guido@python.org>
Mon, 18 Oct 1999 21:41:43 +0000 (21:41 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 18 Oct 1999 21:41:43 +0000 (21:41 +0000)
same permissions as the old file, plugging a security hole.
(Not using exactly the suggested bugfix.)

Lib/fileinput.py

index 2e26b5b2cd90814473031090da8e5ddb520f7ec4..8f73fad222f2cd6dbe28a149cef29ef4c8016d13 100644 (file)
@@ -73,7 +73,7 @@ XXX Possible additions:
 
 """
 
-import sys, os
+import sys, os, stat
 
 _state = None
 
@@ -203,10 +203,22 @@ class FileInput:
                         self._filename + (self._backup or ".bak"))
                     try: os.unlink(self._backupfilename)
                     except os.error: pass
-                    # The next three lines may raise IOError
+                    # The next few lines may raise IOError
                     os.rename(self._filename, self._backupfilename)
                     self._file = open(self._backupfilename, "r")
-                    self._output = open(self._filename, "w")
+                    try:
+                        perm = os.fstat(self._file.fileno())[stat.ST_MODE]
+                    except:
+                        self._output = open(self._filename, "w")
+                    else:
+                        fd = os.open(self._filename,
+                                     os.O_CREAT | os.O_WRONLY | os.O_TRUNC,
+                                     perm)
+                        self._output = os.fdopen(fd, "w")
+                        try:
+                            os.chmod(self._filename, perm)
+                        except:
+                            pass
                     self._savestdout = sys.stdout
                     sys.stdout = self._output
                 else: