Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: using a pipe

by wazzuteke (Hermit)
on Dec 29, 2005 at 21:14 UTC ( [id://519881]=note: print w/replies, xml ) Need Help??


in reply to using a pipe

Sounds like what you are trying to do is take the file contents, returned from the cat bash command, pipe it to gpg to create an un-encrypted password in a new file. At least, that's what the *nix syntax looks like.

If this is the case, I believe you can do this pretty simply by reading in the file using a standard open() and pipe it to gpg similarly to how you are doing it through your command line.

So...
#!/usr/bin/perl use strict; use warnings; # First, open the file and read the contents... assuming one line open my $file, 'encrypted_file_name' or die "ERROR:\t$!\n"; my $enc_pass = shift( @{ [ <$file> ] } ); close $file; # Next, pipe the contents to gpg open my $gpg_command, "/usr/bin/gpg --option newfile oldfile | " my $gpg_out; while ( <$gpg_command> ) { $gpg_out .= $_; } close $gpg_command; print "$gpg_out\n"; exit;
Given the syntax of your command line interface to gpg, this should do the exact same thing, though via perl.

NOTE: I didn't test this being that I don't know what you are really trying to do here. This is really more of an idea seed that will start pointing you in the right direction!

Good luck!!

---hA||ta----
print map{$_.' '}grep{/\w+/}@{[reverse(qw{Perl Code})]} or die while ( 'trying' );

Replies are listed 'Best First'.
Re^2: using a pipe
by drock (Beadle) on Dec 30, 2005 at 03:25 UTC
    not exactly... what I am doing is cating a file that has the clear text passphrase in it then piping this output as inout to the gpg binary for decryption like so:
    cat file |gpg --passphrase-fd 0 --decrypt --output oldfile newfile
    I do not understand what
    my $enc_pass = shift( @{ [ <$file> ] } );
    is doing? Is this the same as:
    for (;<FH>;) { print $_; }
    what does $gpg_out have in it?
      Sorry for the confusion:

      my $enc_pass = shift ( @{ [ <$file> ] } );
      Will simply take the first line within the file, whose handle is stored in the $file variable, treat the handle like a listed de-referenced array-ref and shift that first line into the $enc_pass variable.

      For example, if your file contains:
      ENCRYPTED_PASSWORD
      when you:
      print $enc_pass;
      you will get the output:
      ENCRYPTED_PASSWORD
      For $gpg_out, that is the handle to the command line gpg call. Another method of this would be to use backticks such as:
      my $gpg_output = `gpg --passphrase-fd 0 --decrypt --output oldfile new +file`;
      Simply enough, the backticks will automagically run the command specified, giving the output back to the $gpg_output variable.

      Hope this all clarifies!

      ---hA||ta----
      print map{$_.' '}grep{/\w+/}@{[reverse(qw{Perl Code})]} or die while ( 'trying' );

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://519881]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (3)
As of 2024-04-19 22:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found