gpg:cannot open /dev/tty: No such device or address
Asier Urrutia
asier at alphyra.ie
Wed Oct 29 22:00:15 CET 2003
Hi all,
I've built a perl script in order to parse a mailbox, save
attachments from emails and decrypt them. If I run the perl script from a
shell...
bash$ cat mailbox | mbox-parser.pl
Reading passphrase from file descriptor 11
You need a passphrase to unlock the secret key for
user: "GPG user (GPG user's key) <gpg-user at domain.com>"
1024-bit ELG-E key, ID D49D1DBC, created 2003-10-28 (main key ID 7724AA8E)
bash$
...it works fine. However, I am unable to get rid of the gpg
passphrase output. I tried to redirect STDOUT to a log file, but doesn't
make any difference.
The main problem is when I pipe mail to this perl script from
procmail:
bash$ cat .procmailrc
LOGFILE=/home/user/maillog
:0 HB : user.procmail.lock
* ^To:.*user at localhost.localdomain
| /home/user/bin/mbox-parser.pl
bash$
then, the script doesn't work due to the following error msg:
gpg: Warning: using insecure memory!
gpg: cannot open /dev/tty: No such device or address
which looks to me that the gpg passphrase output is being sent to
a terminal, but can't be found any and it fails. I'll enclose here the
subroutine I'm using on the decryption, just in case somebody wants to
know what I'm doing...
begin-------------------------------------------
sub decrypting
{
my $attachment = $_[0];
my $gnupg = GnuPG::Interface->new();
$gnupg->options->hash_init( armor => 1,
recipients => [ 'tj-cl-testing at alphyra.ie' ]
);
my ( $input, $output, $error, $passphrase_fh, $status_fh )
= ( IO::Handle->new(),
IO::Handle->new(),
IO::Handle->new(),
IO::Handle->new(),
IO::Handle->new(),
);
my $handles = GnuPG::Handles->new( stdin => $input,
stdout => $output,
stderr => $error,
passphrase => $passphrase_fh,
status => $status_fh,
);
my $cipher_file = IO::File->new( "$attachment" );
my $pid = $gnupg->decrypt( handles => $handles );
print $passphrase_fh $passphrase;
close $passphrase_fh;
print $input $_ while <$cipher_file>;
close $input;
close $cipher_file;
my @plaintext = <$output>; # reading the output
my @error_output = <$error>; # reading the error
my @status_info = <$status_fh>; # read the status info
open(LOGFILE,">>$DECRLOG");
my $date = `date`;
chomp($date);
print LOGFILE "\n$date -- $attachment decryption
logging...\n=============================\n";
print LOGFILE @error_output;
print LOGFILE @status_info;
close(LOGFILE);
open (SAVE,">$ATTACHLOC/$ATTACHMENT.decrypted");
print SAVE @plaintext;
close(SAVE);
# clean up...
close $output;
close $error;
close $status_fh;
waitpid $pid, 0; # clean up the finished GnuPG process
}
end------------------------------------------------------
Anybody came across something like this?
Thanks a million,
Asier
More information about the Gnupg-users
mailing list