[PATCH in main] vfs: use fchmod for _fixfilemode
Adrian Buehlmann
adrian at cadifra.com
Fri Oct 12 22:21:29 UTC 2012
On 2012-10-13 00:19, Adrian Buehlmann wrote:
> # HG changeset patch
> # User Matt Mackall <mpm at selenic.com>
> # Date 1350014314 18000
> # Node ID 76b73ce0ffaca8b562747564ce89f4798b2275e5
> # Parent 4871c1f343fae9f38b9dc9600ab96f2017d116ce
> vfs: use fchmod for _fixfilemode
>
> On general principle, we should use fchmod instead of chmod to avoid
> security pitfalls, although none is likely possible here.
>
> diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
> --- a/mercurial/scmutil.py
> +++ b/mercurial/scmutil.py
> @@ -255,10 +255,10 @@
> def _cansymlink(self):
> return util.checklink(self.base)
>
> - def _fixfilemode(self, name):
> + def _fixfilemode(self, fp):
> if self.createmode is None:
> return
> - os.chmod(name, self.createmode & 0666)
> + os.fchmod(fp.fileno(), self.createmode & 0666)
>
> def __call__(self, path, mode="r", text=False, atomictemp=False):
> if self._audit:
> @@ -305,7 +305,7 @@
> util.rename(util.mktempcopy(f), f)
> fp = util.posixfile(f, mode)
> if nlink == 0:
> - self._fixfilemode(f)
> + self._fixfilemode(fp)
> return fp
>
> def symlink(self, src, dst):
> @@ -329,8 +329,8 @@
> else:
> f = self(dst, "w")
> f.write(src)
> + self._fixfilemode(f)
> f.close()
> - self._fixfilemode(dst)
>
> def audit(self, path):
> self.auditor(path)
http://docs.python.org/library/os.html#os.fchmod
"""
os.fchmod(fd, mode)
Change the mode of the file given by fd to the numeric mode. See the
docs for chmod() for possible values of mode.
Availability: Unix.
New in version 2.6.
"""
More information about the Mercurial-devel
mailing list