Robert Allerstorfer: PGP über Perl-Script aufrufen

Hi,

gibt es für sowas evt. fertige Perl-module oder approbierten Perl code? Mein versuch, mit PGP 6.5.2 unter WinNT eine datei test.txt zu verschlüsseln, funktioniert zwar direkt am prompt, aber über CGI liefert das folgende perl script

#!D:/Programme/Perl/bin/perl
my $pgp_dir =  "D:\WINNT\Profiles\Administrator\Application Data\PGP";
my $pgp_app =  "pgp.exe";
my $pgp_file = "test.txt";
my $pgp_id = "ANET";
$ENV{PGPPATH} = $pgp_dir;
print "Content-type: text/html\n\n";
print "<html><head><title>Test</title></head><body><tt>\n";
chdir($pgp_dir);
my $pgp_return = $pgp\_app -eat $pgp\_file $pgp\_id;
print "$pgp_return<br>";
print "</tt></body></html>";

die meldung

Recipients' public key(s) will be used to encrypt. Cannot find the public key matching userid 'ANET'

Hm, über CGI möchte PGP also den Public Keyring auf einmal nicht mehr finden - sehr eigenartig.
Also: Funktioniert bei irgendwem PGP über Perl-CGI?

rob.

  1. Hallo Robert,

    versuche doch einmal, statt $ENV{PGPPATH} = $pgp_dir; folgende Version zu benutzen: $ENV{'PGPPATH'} = $pgp_dir;

    Kann sein, dass die Umgebungsvariable sonst nicht richtig gesetzt wird.

    Grüße,
    Florian Auer

    1. Hallo Florian,

      versuche doch einmal, statt $ENV{PGPPATH} = $pgp_dir; folgende Version zu benutzen: $ENV{'PGPPATH'} = $pgp_dir;

      danke für deine anteilnahme. $ENV{PGPPATH} nimmt Perl aber schon. Ich habe im Perl-code alle umgebungsvariablen vor der PGP abfrage mit  set überprüft und PGPPATH war korrekt gesetzt.
      Ich dachte auch zuerst, dass PGP nur dann die Publik Keyring datei nicht finden kann, wenn PGPPATH nicht korekkt gesetzt ist - *ist* es aber, wie gesagt...

      ciao,

      rob.

  2. Moin,

    $ENV{PGPPATH} = $pgp_dir;
    print "Content-type: text/html\n\n";
    print "<html><head><title>Test</title></head><body><tt>\n";
    chdir($pgp_dir);
    my $pgp_return = $pgp\_app -eat $pgp\_file $pgp\_id;
    print "$pgp_return

    zum einen, wie schon Florian sagte, $ENV{"PGPPATH"} = ... probieren.
    Dann ist mir nicht ganz klar, warum Du PGP zum einen ueber das
    Environment mitteilen willst, in welchem Pfad die Daten liegen
    und zum anderen mit chdir($pgp_dir) in eben dieses Verzeichnis
    wechseln willst. Eine von beiden Methoden müßte doch ausreichen.
    Ich rate jetzt einfach mal, daß sich das ganze so abspielt:

    - Der Befehl $ENV{PGPPATH} = ... schlägt fehl
      - chdir($pgp_dir) veranlaßt zwar den Perl-Interpreter,
        zukünftig Dateien unterhalb
        $pgp_path zu finden, aber ...
      - ... dies muß nicht auch für eine neue Shellumgebung gelten,
        welche durch die "schrägen" Anführungszeichen (...)
        im nächsten Aufruf geöffnet wird.

    Versuch mal, eine Batch-Datei nach folgendem Muster einzusetzen:

    @echo off
    cd %1
    pgp -eat %2 %3

    Und dann im Perl-Skript:

    my $pgp_app = "...\invoke_pgp.bat";
    ...
    ...
    my $pgp_return = $pgp\_app $pgp\_dir $pgp\_file $pgp\_id;

    Auf diese Weise ist sichergestellt, daß der change-dir Befehl
    und der PGP-Aufruf in der selben Shell-Umgebung ausgeführt werden.

    Bis dannundwann

    Andreas

    1. Hallo,

      zum einen, wie schon Florian sagte, $ENV{"PGPPATH"} = ... probieren.

      das macht, wie gesagt, keinen unterschied.

      Dann ist mir nicht ganz klar, warum Du PGP zum einen ueber das
      Environment mitteilen willst, in welchem Pfad die Daten liegen

      PGP braucht diese umgebungsvariable - sonst kann es die konfigurationsdatei nicht lese, in der wiederum drinn steht, wo die keyring dateien sind.

      und zum anderen mit chdir($pgp_dir) in eben dieses Verzeichnis
      wechseln willst.

      Weil ich sinnvollerweise auch die exe dort abgelagert habe, die anschließend nur durch ihren namen aufgerufen wird.

      Versuch mal, eine Batch-Datei nach folgendem Muster einzusetzen:
      ...
      Auf diese Weise ist sichergestellt, daß der change-dir Befehl
      und der PGP-Aufruf in der selben Shell-Umgebung ausgeführt werden.

      Nein, bitte die sache nicht verkomplizieren. Der change dir befehl funktioniert in beiden scriptsprachen genauso gut. Wozu ein DOS-batch-script, wenn es doch perl gibt?

      Der hund lag anderswo begraben: Unter WinNT *muss* man zusätzlich zur $ENV{PGPPATH} = Zeile in Perl auch die Umgebungsvariable im system mit diesem wert versehen - dann funkt es. Unter Win9x ist dies nicht erforderlich.

      grüsse,

      rob.