But if you wanted to send an e-mail with "; touch /root/evilfile" as a subject, you will end up creating a file instead. Also, arguments containing spaces simply break, because, given @ARGV=("login@host", "-s", "some topic") you run /bin/mail login@host -s some topic - without quotes or (preferrably) stating array of command line arguments (multi-argument form of open/system/exec).

Examples of bad behaviour which can be solved using open(my $ch, "|-", "/bin/mail", @ARGV):

$ cat if-mail.pl #!/usr/bin/perl exit 0 unless (my @lines = <STDIN>); open(my $mail, "|-", join " ", "/usr/bin/mail", @ARGV) or die $!; print $mail @lines; $ LC_ALL=C ./if-mail.pl root@localhost -s "do not run echo; touch ~/zz +z && ls ~/zzz - it does not make sense" TEST ^D ls: cannot access -: No such file or directory ls: cannot access it: No such file or directory ls: cannot access does: No such file or directory ls: cannot access not: No such file or directory ls: cannot access make: No such file or directory ls: cannot access sense: No such file or directory /home/aitap/zzz $ ./if-mail.pl root@localhost -s "try running echo *" TEST ^D
Trying to read the mail, I get:

Also, I think in your proposal the data on STDIN would be lost, but I have not tested it either.
I was thinking about the simpliest way of passing the STDIN by just jeaving it to the process being executed, but yes, using eof on STDIN before the exec does indeed lose the first line of input (even on pipes). I have not figured a way around this, neither $|++ nor setbuf helped.


In reply to Re^3: Sanity check: Tiny wrapper script for /bin/mail by aitap
in thread Sanity check: Tiny wrapper script for /bin/mail by FloydATC

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.