1
0
Fork 0
mirror of https://git.code.sf.net/p/archivemail/code synced 2025-03-12 07:42:50 +00:00

Replaced all tempfile.mktemp() calls with mkstemp()/mkdtemp().

Should just serve as a last security fallback, since we operate in a safe
temporary directory and everything should be okay anyway, but that may be less
obvious. :-)
This commit is contained in:
Nikolaus Schulz 2006-10-27 03:23:16 +00:00
parent e491da3a11
commit 5eb4cf3cf6
2 changed files with 32 additions and 34 deletions

View file

@ -461,7 +461,7 @@ class RetainMbox(Mbox):
""" """
assert(final_name) assert(final_name)
temp_name = tempfile.mktemp("retain") temp_name = tempfile.mkstemp("retain")[1]
self.mbox_file = open(temp_name, "w") self.mbox_file = open(temp_name, "w")
self.mbox_file_name = temp_name self.mbox_file_name = temp_name
_stale.retain = temp_name _stale.retain = temp_name
@ -533,7 +533,7 @@ class ArchiveMbox(Mbox):
unexpected_error("""There is already a file named '%s'! unexpected_error("""There is already a file named '%s'!
Have you been previously compressing this archive? You probably should Have you been previously compressing this archive? You probably should
uncompress it manually, and try running me again.""" % compressed_archive) uncompress it manually, and try running me again.""" % compressed_archive)
temp_name = tempfile.mktemp("archive") temp_name = tempfile.mkstemp("archive")[1]
if os.path.isfile(final_name): if os.path.isfile(final_name):
vprint("file already exists that is named: %s" % final_name) vprint("file already exists that is named: %s" % final_name)
shutil.copy2(final_name, temp_name) shutil.copy2(final_name, temp_name)
@ -550,7 +550,7 @@ uncompress it manually, and try running me again.""" % compressed_archive)
Have you been reading this archive? You probably should re-compress it Have you been reading this archive? You probably should re-compress it
manually, and try running me again.""" % final_name) manually, and try running me again.""" % final_name)
temp_name = tempfile.mktemp("archive.gz") temp_name = tempfile.mkstemp("archive.gz")[1]
if os.path.isfile(compressed_filename): if os.path.isfile(compressed_filename):
vprint("file already exists that is named: %s" % \ vprint("file already exists that is named: %s" % \
compressed_filename) compressed_filename)
@ -1071,9 +1071,8 @@ def archive(mailbox_name):
# create a temporary directory for us to work in securely # create a temporary directory for us to work in securely
old_temp_dir = tempfile.tempdir old_temp_dir = tempfile.tempdir
tempfile.tempdir = None tempfile.tempdir = None
new_temp_dir = tempfile.mktemp('archivemail') new_temp_dir = tempfile.mkdtemp('archivemail')
assert(new_temp_dir) assert(new_temp_dir)
os.mkdir(new_temp_dir)
_stale.temp_dir = new_temp_dir _stale.temp_dir = new_temp_dir
tempfile.tempdir = new_temp_dir tempfile.tempdir = new_temp_dir
vprint("set tempfile directory to '%s'" % new_temp_dir) vprint("set tempfile directory to '%s'" % new_temp_dir)

View file

@ -350,7 +350,7 @@ class TestArchiveMbox(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181))
self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE] self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE]
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -377,7 +377,7 @@ class TestArchiveMbox(TestCaseInTempdir):
From is on this line From is on this line
This is after the ^From line""" This is after the ^From line"""
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181), body=body) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181), body=body)
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
assert(os.path.exists(self.mbox_name)) assert(os.path.exists(self.mbox_name))
@ -416,7 +416,7 @@ This is after the ^From line"""
'--date="29 Jul 2000"', '--date="29 July 2000"'): '--date="29 Jul 2000"', '--date="29 July 2000"'):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, headers=headers) self.mbox_name = make_mbox(messages=3, headers=headers)
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
run = "./archivemail.py -q %s %s" % (option, self.mbox_name) run = "./archivemail.py -q %s %s" % (option, self.mbox_name)
self.assertEqual(os.system(run), 0) self.assertEqual(os.system(run), 0)
@ -433,7 +433,7 @@ This is after the ^From line"""
'--date="27 Jul 2000"', '--date="27 July 2000"'): '--date="27 Jul 2000"', '--date="27 July 2000"'):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, headers=headers) self.mbox_name = make_mbox(messages=3, headers=headers)
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
run = "./archivemail.py -q %s %s" % (option, self.mbox_name) run = "./archivemail.py -q %s %s" % (option, self.mbox_name)
self.assertEqual(os.system(run), 0) self.assertEqual(os.system(run), 0)
@ -449,7 +449,7 @@ This is after the ^From line"""
self.setUp() self.setUp()
self.new_mbox = make_mbox(messages=3, hours_old=(24 * 179)) self.new_mbox = make_mbox(messages=3, hours_old=(24 * 179))
self.old_mbox = make_mbox(messages=3, hours_old=(24 * 181)) self.old_mbox = make_mbox(messages=3, hours_old=(24 * 181))
self.mbox_name = tempfile.mktemp() self.mbox_name = tempfile.mkstemp()[1]
shutil.copyfile(self.new_mbox, self.mbox_name) shutil.copyfile(self.new_mbox, self.mbox_name)
append_file(self.old_mbox, self.mbox_name) append_file(self.old_mbox, self.mbox_name)
if execute == "package": if execute == "package":
@ -475,7 +475,7 @@ This is after the ^From line"""
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 179)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 179))
self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE] self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE]
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -499,7 +499,7 @@ This is after the ^From line"""
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181))
self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE] self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE]
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
archive_name = self.mbox_name + "_archive" archive_name = self.mbox_name + "_archive"
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
shutil.copyfile(self.mbox_name, archive_name) # archive has 3 msgs shutil.copyfile(self.mbox_name, archive_name) # archive has 3 msgs
@ -568,7 +568,7 @@ This is after the ^From line"""
for headers in weird_headers: for headers in weird_headers:
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, headers=headers) self.mbox_name = make_mbox(messages=3, headers=headers)
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
assert(os.path.exists(self.mbox_name)) assert(os.path.exists(self.mbox_name))
@ -678,7 +678,7 @@ class TestArchiveMboxPreserveStatus(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181), \ self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181), \
headers={"Status":"RO"}) headers={"Status":"RO"})
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -706,7 +706,7 @@ class TestArchiveMboxPreserveStatus(TestCaseInTempdir):
for execute in ("package", "system_long", "system_short"): for execute in ("package", "system_long", "system_short"):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181))
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -745,7 +745,7 @@ class TestArchiveMboxSuffix(TestCaseInTempdir):
days_old_max = 180 days_old_max = 180
self.mbox_name = make_mbox(messages=3, self.mbox_name = make_mbox(messages=3,
hours_old=(24 * (days_old_max+1))) hours_old=(24 * (days_old_max+1)))
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "system_long": if execute == "system_long":
run = "./archivemail.py --quiet --suffix='%s' %s" % \ run = "./archivemail.py --quiet --suffix='%s' %s" % \
@ -794,7 +794,7 @@ class TestArchiveDryRun(TestCaseInTempdir):
for execute in ("package", "system_long", "system_short"): for execute in ("package", "system_long", "system_short"):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181))
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -829,7 +829,7 @@ class TestArchiveDays(TestCaseInTempdir):
for execute in ("package", "system", "system_long"): for execute in ("package", "system", "system_long"):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 12)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 12))
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.options.days_old_max = 11 archivemail.options.days_old_max = 11
@ -857,7 +857,7 @@ class TestArchiveDays(TestCaseInTempdir):
for execute in ("package", "system", "system_long"): for execute in ("package", "system", "system_long"):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 10)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 10))
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.options.days_old_max = 11 archivemail.options.days_old_max = 11
@ -899,7 +899,7 @@ class TestArchiveDelete(TestCaseInTempdir):
for execute in ("package", "system"): for execute in ("package", "system"):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 179)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 179))
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -920,7 +920,7 @@ class TestArchiveDelete(TestCaseInTempdir):
self.setUp() self.setUp()
self.new_mbox = make_mbox(messages=3, hours_old=(24 * 179)) self.new_mbox = make_mbox(messages=3, hours_old=(24 * 179))
self.old_mbox = make_mbox(messages=3, hours_old=(24 * 181)) self.old_mbox = make_mbox(messages=3, hours_old=(24 * 181))
self.mbox_name = tempfile.mktemp() self.mbox_name = tempfile.mkstemp()[1]
shutil.copyfile(self.new_mbox, self.mbox_name) shutil.copyfile(self.new_mbox, self.mbox_name)
append_file(self.old_mbox, self.mbox_name) append_file(self.old_mbox, self.mbox_name)
if execute == "package": if execute == "package":
@ -941,7 +941,7 @@ class TestArchiveDelete(TestCaseInTempdir):
for execute in ("package", "system"): for execute in ("package", "system"):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181))
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -974,7 +974,7 @@ class TestArchiveMboxFlagged(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181), \ self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181), \
headers={"X-Status":"F"}) headers={"X-Status":"F"})
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.options.include_flagged = 0 archivemail.options.include_flagged = 0
@ -996,7 +996,7 @@ class TestArchiveMboxFlagged(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 179), \ self.mbox_name = make_mbox(messages=3, hours_old=(24 * 179), \
headers={"X-Status":"F"}) headers={"X-Status":"F"})
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.options.include_flagged = 1 archivemail.options.include_flagged = 1
@ -1019,7 +1019,7 @@ class TestArchiveMboxFlagged(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181), \ self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181), \
headers={"X-Status":"F"}) headers={"X-Status":"F"})
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.options.include_flagged = 1 archivemail.options.include_flagged = 1
@ -1057,10 +1057,9 @@ class TestArchiveMboxOutputDir(TestCaseInTempdir):
for execute in ("package", "system_long", "system_short"): for execute in ("package", "system_long", "system_short"):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181))
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
self.dir_name = tempfile.mktemp() self.dir_name = tempfile.mkdtemp()
os.mkdir(self.dir_name)
if execute == "package": if execute == "package":
archivemail.options.output_dir = self.dir_name archivemail.options.output_dir = self.dir_name
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -1109,7 +1108,7 @@ class TestArchiveMboxUncompressed(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181))
self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE] self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE]
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -1135,7 +1134,7 @@ class TestArchiveMboxUncompressed(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 179)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 179))
self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE] self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE]
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.archive(self.mbox_name) archivemail.archive(self.mbox_name)
@ -1160,7 +1159,7 @@ class TestArchiveMboxUncompressed(TestCaseInTempdir):
self.setUp() self.setUp()
self.new_mbox = make_mbox(messages=3, hours_old=(24 * 179)) self.new_mbox = make_mbox(messages=3, hours_old=(24 * 179))
self.old_mbox = make_mbox(messages=3, hours_old=(24 * 181)) self.old_mbox = make_mbox(messages=3, hours_old=(24 * 181))
self.mbox_name = tempfile.mktemp() self.mbox_name = tempfile.mkstemp()[1]
shutil.copyfile(self.new_mbox, self.mbox_name) shutil.copyfile(self.new_mbox, self.mbox_name)
append_file(self.old_mbox, self.mbox_name) append_file(self.old_mbox, self.mbox_name)
if execute == "package": if execute == "package":
@ -1185,7 +1184,7 @@ class TestArchiveMboxUncompressed(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=3, hours_old=(24 * 181))
self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE] self.mbox_mode = os.stat(self.mbox_name)[stat.ST_MODE]
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
archive_name = self.mbox_name + "_archive" archive_name = self.mbox_name + "_archive"
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
shutil.copyfile(self.mbox_name, archive_name) # archive has 3 msgs shutil.copyfile(self.mbox_name, archive_name) # archive has 3 msgs
@ -1226,7 +1225,7 @@ class TestArchiveSize(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=1, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=1, hours_old=(24 * 181))
size_arg = os.path.getsize(self.mbox_name) - 1 size_arg = os.path.getsize(self.mbox_name) - 1
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.options.min_size = size_arg archivemail.options.min_size = size_arg
@ -1257,7 +1256,7 @@ class TestArchiveSize(TestCaseInTempdir):
self.setUp() self.setUp()
self.mbox_name = make_mbox(messages=1, hours_old=(24 * 181)) self.mbox_name = make_mbox(messages=1, hours_old=(24 * 181))
size_arg = os.path.getsize(self.mbox_name) + 1 size_arg = os.path.getsize(self.mbox_name) + 1
self.copy_name = tempfile.mktemp() self.copy_name = tempfile.mkstemp()[1]
shutil.copyfile(self.mbox_name, self.copy_name) shutil.copyfile(self.mbox_name, self.copy_name)
if execute == "package": if execute == "package":
archivemail.options.min_size = size_arg archivemail.options.min_size = size_arg