PGP über Perl-Script aufrufen
Robert Allerstorfer
- perl
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.
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
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.
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
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.