):
fname = msg.get_param(param, header=header)
if fname:
+ try:
+ for forbidden in chr(0), '/', '\\':
+ if forbidden in fname:
+ raise ValueError
+ except ValueError:
+ continue
fname = '-' + fname
break
else:
global output
save_output = output
- outfile = open(os.path.join(g.destination_dir, fname), 'w')
+ outfile = open_output_file(fname)
output = outfile.write
if save_headers:
output_headers(msg)
output(msg.as_string())
+def open_output_file(filename):
+ fullpath = os.path.abspath(os.path.join(g.destination_dir, filename))
+ full_dir = os.path.dirname(fullpath)
+ create = not os.path.isdir(full_dir)
+ if create:
+ os.makedirs(full_dir)
+ try:
+ return open(fullpath, 'w')
+ except:
+ if create:
+ os.removedirs(full_dir)
+
+
class GlobalOptions:
from m_lib.defenc import default_encoding
recode_charset = 1 # recode charset of message body
g.input_filename = '-'
infile = sys.stdin
if g.output_filename:
- outfile = open(os.path.join(g.destination_dir, g.output_filename), 'w')
+ outfile = open_output_file(g.output_filename)
else:
g.output_filename = '-'
outfile = sys.stdout
infile = open(arguments[0], 'r')
if la == 1:
if g.output_filename:
- outfile = open(os.path.join(g.destination_dir, g.output_filename), 'w')
+ outfile = open_output_file(g.output_filename)
else:
g.output_filename = '-'
outfile = sys.stdout
outfile = sys.stdout
else:
g.output_filename = arguments[1]
- outfile = open(os.path.join(g.destination_dir, g.output_filename), 'w')
+ outfile = open_output_file(g.output_filename)
else:
usage(1, 'Too many arguments')