graff has asked for the wisdom of the Perl Monks concerning the following question:

I'm using MIME::Parser to extract data attachments from email being sent to me at regular intervals. It's great, and I need only one improvement (for a linux or solaris environment):

The extracted file attachments are being written to disk with owner-only access permissions (rwx------ (700) on directories, and rw------- (600) on data files), and I would prefer at least group-read/execute (750 for directories, 640 for data files) -- global read/execute access would actually be better.

I went over the MIME::Parser and MIME::Parser::Filer man pages, but did not see any relevant information.

What makes it troublesome is that, in the simplest case, you don't really know what paths/files are being created until MIME::Parser is done. You need to figure out afterwards which directories were created, "chmod go+x" on those, then "chmod -R go+r"... (I don't want to make the data files executable.) It would just be a lot easier if the mode flags could be set the way I want in the first place. But how?

The man page for MIME::Parser::Filer says "you can easily define your own subclass of MIME::Parser::Filer and override" the default behavior, but an example (not provided there) would be really helpful... THANKS!

Replies are listed 'Best First'.
Re: MIME:Parser vs. file permissions
by davis (Vicar) on Sep 23, 2002 at 08:32 UTC
    You may wish to try changing your umask. Try perldoc -f umask or man umask. The umask influences the permissions of created files, usually by 'masking' off permission bits which you don't want. Try something along the lines of:
    near the top of your code.
    Is this going out live?
    No, Homer, very few cartoons are broadcast live - it's a terrible strain on the animator's wrist
MIME::Parser and specifying directories for saving attachments
by jlongino (Parson) on Sep 23, 2002 at 14:14 UTC
    Although it's true you may not know what the file names are until MIME::Parser is done, you do have the option of specifying where to store the attachments beforehand:
    use strict; use warnings; use MIME::Parser; my $dir = "./mimemail"; my $parser = new MIME::Parser; $parser->output_dir($dir); my $entity = $parser->read(\*STDIN) || die "couldn't parse MIME stre +am";
    You should have enough information at this point to change permissions on the directory or the files within it. Then again, maybe I misunderstand your question. The suggestion by davis should work in any case.