From d61926e6bef6c4d8105a2848362377dce91d7fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Araujo?= Date: Sat, 8 Dec 2012 14:51:47 -0500 Subject: Create ~/.pypirc securely (#13512). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There was a window between the write and the chmod where the user’s password would be exposed, depending on default permissions. Philip Jenvey’s patch fixes it. --- Lib/distutils/config.py | 11 +---------- Misc/ACKS | 1 + Misc/NEWS | 3 +++ 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py index 5b625f3..1fd5334 100644 --- a/Lib/distutils/config.py +++ b/Lib/distutils/config.py @@ -4,7 +4,6 @@ Provides the PyPIRCCommand class, the base class for the command classes that uses .pypirc in the distutils.command package. """ import os -import sys from configparser import ConfigParser from distutils.cmd import Command @@ -43,16 +42,8 @@ class PyPIRCCommand(Command): def _store_pypirc(self, username, password): """Creates a default .pypirc file.""" rc = self._get_rc_file() - f = open(rc, 'w') - try: + with os.fdopen(os.open(rc, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f: f.write(DEFAULT_PYPIRC % (username, password)) - finally: - f.close() - try: - os.chmod(rc, 0o600) - except OSError: - # should do something better here - pass def _read_pypirc(self): """Reads the .pypirc file.""" diff --git a/Misc/ACKS b/Misc/ACKS index 9e662f6..0567069 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -512,6 +512,7 @@ Zbyszek Jędrzejewski-Szmek Drew Jenkins Flemming Kjær Jensen Philip H. Jensen +Philip Jenvey MunSic Jeong Chris Jerdonek Pedro Diaz Jimenez diff --git a/Misc/NEWS b/Misc/NEWS index 02e4d48..3adc531 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -177,6 +177,9 @@ Library - Issue #16628: Fix a memory leak in ctypes.resize(). +- Issue #13512: Create ~/.pypirc securely (CVE-2011-4944). Initial patch by + Philip Jenvey, tested by Mageia and Debian. + - Issue #7719: Make distutils ignore ``.nfs*`` files instead of choking later on. Initial patch by SilentGhost and Jeff Ramnani. -- cgit v0.12