From: Moritz Bunkus Date: Thu, 15 Feb 2007 14:41:35 +0000 (+0000) Subject: Benutze das Perl-Modul "YAML", um $form in einen String umzuwandeln und später daraus... X-Git-Tag: release-2.4.2~98 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=f6e5b55ae22f3fda6863e8a14e07bc8ca6664564;p=kivitendo-erp.git Benutze das Perl-Modul "YAML", um $form in einen String umzuwandeln und später daraus wieder herzustellen, da YAML im Gegensatz zu "Data::Dumper" ohne Perls "eval()" auskommt, sondern einen sicheren Parser zur Verfügung stellt. Damit kann die serialisierte $form auch über ein Formular vom Benutzer stammen, ohne ein Sicherheitsproblem darzustellen. --- diff --git a/SL/InstallationCheck.pm b/SL/InstallationCheck.pm index 84ee43d67..5f44cd2d4 100644 --- a/SL/InstallationCheck.pm +++ b/SL/InstallationCheck.pm @@ -12,6 +12,7 @@ use vars qw(@required_modules); { "name" => "Archive::Zip", "url" => "http://search.cpan.org/~adamk/" }, { "name" => "Text::Iconv", "url" => "http://search.cpan.org/~mpiotr/" }, { "name" => "Time::HiRes", "url" => "http://search.cpan.org/~jhi/" }, + { "name" => "YAML", "url" => "http://search.cpan.org/~ingy/" }, ); sub module_available { diff --git a/bin/mozilla/common.pl b/bin/mozilla/common.pl index ea34189db..6793a1ddc 100644 --- a/bin/mozilla/common.pl +++ b/bin/mozilla/common.pl @@ -9,21 +9,20 @@ # ###################################################################### -use Data::Dumper; +use YAML; use SL::Common; sub save_form { $lxdebug->enter_sub(); - my (@names, @values); - foreach my $key (keys(%{$form})) { - push(@names, "\$form->{\"$key\"}"); - push(@values, $form->{$key}); - } - my $dumper = Data::Dumper->new(\@values, \@names); - $dumper->Indent(0); - my $old_form = $dumper->Dump(); + my $yaml = new YAML; + $yaml->Indent(1); + my $old_form = $yaml->dump($form); + $old_form =~ s|!|!!|g; + $old_form =~ s|\n|!n|g; + $old_form =~ s|\r|!r|g; + $lxdebug->message(0, "yeah!???\n\n$old_form\n\n\n"); $lxdebug->leave_sub(); @@ -36,7 +35,10 @@ sub restore_form { my ($old_form, $no_delete) = @_; map({ delete($form->{$_}); } keys(%{$form})) unless ($no_delete); - eval($old_form); + $old_form =~ s|!r|\r|g; + $old_form =~ s|!n|\n|g; + $old_form =~ s|!!|!|g; + $form = YAML::Load($old_form); $lxdebug->leave_sub(); } diff --git a/doc/INSTALL b/doc/INSTALL index 258220411..1a0da658a 100644 --- a/doc/INSTALL +++ b/doc/INSTALL @@ -31,9 +31,10 @@ sind: * Class::Accessor * Archive::Zip * Text::Iconv +* YAML Diese Pakete können bei den unterschiedlichen Distributionen anders heißen. -(Debian: apache, postgresql, libdbi-perl, libdbd-pg-perl, libpgperl, libhtml-template-perl, libclass-accessor-perl, libarchive-zip-perl, libtext-iconv-perl) +(Debian: apache, postgresql, libdbi-perl, libdbd-pg-perl, libpgperl, libhtml-template-perl, libclass-accessor-perl, libarchive-zip-perl, libtext-iconv-perl, libyaml-perl) (Fedora: httpd, postgresql-server, perl-DBI, perl-DBD-Pg) (SuSE: apache2, postgresql-server, perl-DBI, perl-DBD-Pg) diff --git a/doc/UPGRADE b/doc/UPGRADE index 095c21386..3358ee767 100644 --- a/doc/UPGRADE +++ b/doc/UPGRADE @@ -13,7 +13,8 @@ aus zwei Teilen: den Dateien (einfaches Entpacken und Kopieren in das Installationsverzeichnis genügen) sowie dem Datenbankupgrade. Bitte beachten Sie auch die Liste der benötigten Perl-Module am Anfang -der Datei "doc/INSTALL". +der Datei "doc/INSTALL". Besonders nach einem Upgrade auf 2.4.2 muss +sichergestellt werden, dass das Modul "YAML" installiert ist. Das Datenbankupgrade wird automatisch gestartet, wenn sich der erste Benutzer nach dem Upgrade der Dateien an Lx-Office anmeldet.