diff options
| author | Paul Rodger <paul@paulrodger.com> | 2002-04-04 11:14:00 +0000 | 
|---|---|---|
| committer | Paul Rodger <paul@paulrodger.com> | 2002-04-04 11:14:00 +0000 | 
| commit | 4ac9643118efe77fc96151b762c9c4594e95ed4f (patch) | |
| tree | 86f84547727b0b8db152ef23678b3601a7db4406 | |
| parent | 81c82ddaf5391e318a1bade96f20e24b9725da8b (diff) | |
| download | archivemail-4ac9643118efe77fc96151b762c9c4594e95ed4f.tar.gz archivemail-4ac9643118efe77fc96151b762c9c4594e95ed4f.tar.bz2 archivemail-4ac9643118efe77fc96151b762c9c4594e95ed4f.zip | |
Fixed a bug where if you ran: 'archivemail.py foo/mbox' it would create
the archive file in the current directory instead of the directory 'foo'.
| -rwxr-xr-x | archivemail.py | 59 | 
1 files changed, 42 insertions, 17 deletions
| diff --git a/archivemail.py b/archivemail.py index ee9fa7e..34649b3 100755 --- a/archivemail.py +++ b/archivemail.py @@ -146,7 +146,7 @@ class Options:      lockfile_attempts    = 5        lockfile_extension   = ".lock"      lockfile_sleep       = 1  -    output_dir           = os.curdir +    output_dir           = None      quiet                = 0      script_name          = os.path.basename(sys.argv[0])      verbose              = 0 @@ -218,15 +218,16 @@ class Options:      def sanity_check(self):          """Complain bitterly about our options now rather than later""" -        if not os.path.isdir(self.output_dir): -            user_error("output directory does not exist: '%s'" % \ -                self.output_dir) -        if not os.access(self.output_dir, os.W_OK): -            user_error("no write permission on output directory: '%s'" % \ -                self.output_dir) -        if is_world_writable(self.output_dir): -            unexpected_error(("output directory is world-writable: '%s' " + \ -                "-- I feel nervous!") % self.output_dir) +        if self.output_dir: +            if not os.path.isdir(self.output_dir): +                user_error("output directory does not exist: '%s'" % \ +                    self.output_dir) +            if not os.access(self.output_dir, os.W_OK): +                user_error("no write permission on output directory: '%s'" % \ +                    self.output_dir) +            if is_world_writable(self.output_dir): +                unexpected_error(("output directory is world-writable: " + \ +                    "%s -- I feel nervous!") % self.output_dir)          if (self.days_old_max < 1):              user_error("argument to -d must be greater than zero")          if (self.days_old_max >= 10000): @@ -519,8 +520,6 @@ Website: http://archivemail.sourceforge.net/ """ %   \      _options.sanity_check()      os.umask(077) # saves setting permissions on mailboxes/tempfiles -    tempfile.tempdir = _options.output_dir -    assert(tempfile.tempdir)      # Make sure we clean up nicely - we don't want to leave stale procmail      # lockfiles about if something bad happens to us. This is quite  @@ -669,15 +668,18 @@ def archive(mailbox_name):                            already exists      """ -    assert(mailbox_name) - -    vprint("set tempfile directory to '%s'" % tempfile.tempdir) +    assert(mailbox_name)       final_archive_name = mailbox_name + _options.archive_suffix -    final_archive_name = os.path.join(_options.output_dir,  -            os.path.basename(final_archive_name)) +    if _options.output_dir: +        final_archive_name = os.path.join(_options.output_dir,  +                os.path.basename(final_archive_name))      vprint("archiving '%s' to '%s' ..." % (mailbox_name, final_archive_name)) +    tempfile.tempdir = choose_temp_dir(mailbox_name) +    assert(tempfile.tempdir) +    vprint("set tempfile directory to '%s'" % tempfile.tempdir) +      # check to see if we are running as root -- if so, change our effective      # userid and groupid to that of the original mailbox      if (os.getuid() == 0) and os.path.exists(mailbox_name): @@ -843,6 +845,29 @@ def _archive_dir(mailbox_name, final_archive_name, type):  ###############  misc  functions  ############### + +def choose_temp_dir(mailbox_name): +    """Return a suitable temporary directory to use for a given mailbox name""" +    assert(mailbox_name) +    mailbox_dirname = os.path.dirname(mailbox_name) +    temp_dir = None + +    if _options.output_dir: +        temp_dir = _options.output_dir +    elif mailbox_dirname: +        temp_dir = mailbox_dirname +    else: +        temp_dir = os.curdir +    assert(temp_dir) +    if is_world_writable(temp_dir): +        unexpected_error(("temporary directory is world-writable: " + \ +            "%s -- I feel nervous!") % temp_dir) +    if not os.access(temp_dir, os.W_OK): +        user_error("no write permission on temporary directory: '%s'" % \ +            temp_dir) +    return temp_dir + +  def clean_up():      """Delete stale files -- to be registered with atexit.register()"""      vprint("cleaning up ...") | 
