Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8830[/thread]

Perl, System und GnuPG



<< >> 8 Einträge, 1 Seite
Gast Gast
 2007-03-12 16:17
#74941 #74941
Hallo allerseits,

besteht eine Möglichkeit den Inhalt einer Variable in Perl mit GnuPG zu signieren, ohne Module zu verwenden ?

Besser gesagt: Ich habe ein Array, der aus einer Textdatei besteht:

Code: (dl )
1
2
3
4
# Message-Body
open (TEXT, "text") or die "Kann Datenquelle nicht finden/oeffnen: $!\n";
@arraybody = <TEXT>;
close (TEXT);


Dem füge ich dann noch eine personalisierte Anrede hinzu:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
if( $sex eq "m" ) {
$message_body = " Sehr geehrter Herr $name,\\n@arraybody";
}
elsif( $sex eq "w" )
{
$message_body = " Sehr geehrte Frau $name,\\n@arraybody";
}
else
{
$message_body = " Sehr geeherte(r) Kollegin/Kollege,\\n@arraybody";
}


Nun würde ich das ganze dann signieren:

Code: (dl )
$mailsigned=system  ("cat pass | gpg.orig -u F123456 --clearsign --passphrase-fd 0 < $message_body");


allerdings sind in der Textdatei Zeilenumbrüch, was dazu führt, das statt irgendwelchem Text nur "512" in der Mail steht ;)

Der Fehler, der hierzu in der Shell ausgegeben wird, ist:

sh: Sehr: Datei oder Verzeichnis nicht gefunden
sh: line 1: die: command not found
sh: line 2: denen: command not found
sh: line 3: diesjährige: command not found
sh: line 4: zugewandt.: command not found

Vielen Dank und viele Grüße
Sascha
renee
 2007-03-12 16:26
#74942 #74942
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Statt system musst Du den qx-Operator nehmen, sonst bekommst Du nicht den Output...

als
Code: (dl )
1
2
my $output = qx{Befehl};
print $output;


Wie der Befehl für GnuPG aussehen muss weiß ich jetzt nicht...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
betterworld
 2007-03-12 22:49
#74943 #74943
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich wuerde hier open2 verwenden... (Es ist in einem Standardmodul.  Nebenfrage: Warum willst Du keine Module verwenden?).  Einerseits hat open2 (wie auch open) den Vorteil gegenueber qx, dass man Escaping-Probleme vermeiden kann, und andererseits kann man bei open2 den Text reinpipen.

Code (perl): (dl )
1
2
3
4
5
6
7
use IPC::Open2;

my $pid = open2(my $chld_out, my $chld_in, 'gpg', -'u', @weitere_argumente) or die $!;
print $chld_in $message_body or die;
close $chld_in or die;
my $output = {local $/; <$chld_out>};
waitpid ($pid, 0) or die $!;
sascha
 2007-03-13 09:06
#74944 #74944
User since
2004-12-10
7 Artikel
BenutzerIn
[default_avatar]
[quote=renee,12.03.2007, 15:26]Statt system musst Du den qx-Operator nehmen, sonst bekommst Du nicht den Output...

als
Code: (dl )
1
2
my $output = qx{Befehl};
print $output;


Wie der Befehl für GnuPG aussehen muss weiß ich jetzt nicht...[/quote]
Hallo Renee,

vielen Dank für den Tipp.
Das funktioniert bei mit leider nicht - da er anscheinen den Wert der Variable als Dateinamen interpretiert ?
Auf jeden Fall erhalte ich auf der Kommandozeile immer den output "Der Dateiname ist zu lang"
sascha
 2007-03-13 09:11
#74945 #74945
User since
2004-12-10
7 Artikel
BenutzerIn
[default_avatar]
[quote=betterworld,12.03.2007, 21:49]Ich wuerde hier open2 verwenden... (Es ist in einem Standardmodul. Nebenfrage: Warum willst Du keine Module verwenden?). Einerseits hat open2 (wie auch open) den Vorteil gegenueber qx, dass man Escaping-Probleme vermeiden kann, und andererseits kann man bei open2 den Text reinpipen.

Code (perl): (dl )
1
2
3
4
5
6
7
use IPC::Open2;

my $pid = open2(my $chld_out, my $chld_in, 'gpg', -'u', @weitere_argumente) or die $!;
print $chld_in $message_body or die;
close $chld_in or die;
my $output = {local $/; <$chld_out>};
waitpid ($pid, 0) or die $!;
[/quote]
Hallo betterworld,

vielleicht habe ich mich ein wenig flapsig ausgedrückt - Ich habe nichts gegen Module, aber bisher kam ich mit den GPG-Modulen nicht so ganz klar.

Ich habe jetzt deinen Tip mal ausprobiert, aber scheinbar scheitere ich an den Optionen, die mit "--" geprefixt werden:

Code: (dl )
1
2
3
4
5
my $pid = open2(my $chld_out, my $chld_in, 'cat pass|', 'gpg.orig', -'u', 'F81AE61F', --'clearsign', --'yes', --'passphrase-fd 0' ) or die $!;
print $chld_in $message_body or die;
close $chld_in or die;
my $output = {local $/; <$chld_out>};
waitpid ($pid, 0) or die $!;


bringt mir:

Can't modify constant item in predecrement (--) at serienjunkie.pl line 82, near "'clearsign',"
syntax error at serienjunkie.pl line 85, near "; <$chld_out>"
syntax error at serienjunkie.pl line 121, near "}"
Execution of serienjunkie.pl aborted due to compilation errors.

Viele Grüße - und danke !
Sascha
ptk
 2007-03-13 09:39
#74946 #74946
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Mach daraus "--clearsign" etc.
sascha
 2007-03-13 09:55
#74947 #74947
User since
2004-12-10
7 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,13.03.2007, 08:39]Mach daraus "--clearsign" etc.[/quote]
Das passt, danke !
Allerdings ist $output jetzt nur noch die Signatur:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFF9lij1Lls9vga5h8RAveBAJ9TcFoEGefL86Y79r3+XtAuqjK42wCfUS8x
Pc3ZsKdyWaAaJPEsyUff++o=
=fR+Q
-----END PGP SIGNATURE-----

Sollte nicht $output $message_body + die Signatur enhalten ?
sascha
 2007-03-13 09:58
#74948 #74948
User since
2004-12-10
7 Artikel
BenutzerIn
[default_avatar]
Noch ein Nachtrag:

Code: (dl )
my $output = {local $/; <$chld_out>};


hat bei mir nicht funktioniert, daher habe ich es in
Code: (dl )
my $output =  do {local $/; <$chld_out>};


geändert.
<< >> 8 Einträge, 1 Seite



View all threads created 2007-03-12 16:17.