From 444e0930040d0e20d973d9ce8a123b8d86a29be4 Mon Sep 17 00:00:00 2001 From: Xavier Guimard Date: Thu, 20 Aug 2009 14:19:40 +0000 Subject: [PATCH] Bugs : * Crypto was usable only with 16xn characters * Menu was not able to filter embedded Google page speed : * optimize images * set size --- build/lemonldap-ng/changelog | 7 +++ build/lemonldap-ng/debian/changelog | 4 +- .../lib/Lemonldap/NG/Common/Crypto.pm | 12 ++++- modules/lemonldap-ng-portal/META.yml | 2 +- .../example/apps/tools.png | Bin 8447 -> 7093 bytes .../example/apps/wheels.png | Bin 18253 -> 17899 bytes .../example/skins/common/vcss-blue.gif | Bin 1759 -> 1360 bytes .../example/skins/pastel/footer.tpl | 4 +- .../example/skins/pastel/menu.tpl | 6 +-- .../lib/Lemonldap/NG/Portal/Menu.pm | 45 +++++++++++++----- .../lib/Lemonldap/NG/Portal/Simple.pm | 33 +++++++------ 11 files changed, 77 insertions(+), 36 deletions(-) diff --git a/build/lemonldap-ng/changelog b/build/lemonldap-ng/changelog index f8edc7d48..c90341b92 100644 --- a/build/lemonldap-ng/changelog +++ b/build/lemonldap-ng/changelog @@ -1,3 +1,10 @@ +lemonldap-ng (0.9.5) unstable; urgency=low + + * Bugs : + - bad XML filter when embedding in tags + + -- Xavier Guimard Wed, 12 Aug 2009 11:07:18 +0200 + lemonldap-ng (0.9.4) unstable; urgency=low * Bugs : diff --git a/build/lemonldap-ng/debian/changelog b/build/lemonldap-ng/debian/changelog index c698b7906..1e3b541d8 100644 --- a/build/lemonldap-ng/debian/changelog +++ b/build/lemonldap-ng/debian/changelog @@ -1,5 +1,5 @@ -lemonldap-ng (0.9.4-0) unstable; urgency=low +lemonldap-ng (0.9.5-0) unstable; urgency=low * Local build - -- Xavier Guimard Sat, 17 Jan 2009 13:39:50 +0100 + -- Xavier Guimard Wed, 12 Aug 2009 11:08:42 +0200 diff --git a/modules/lemonldap-ng-common/lib/Lemonldap/NG/Common/Crypto.pm b/modules/lemonldap-ng-common/lib/Lemonldap/NG/Common/Crypto.pm index 4dfe82d1c..3a0c23c68 100644 --- a/modules/lemonldap-ng-common/lib/Lemonldap/NG/Common/Crypto.pm +++ b/modules/lemonldap-ng-common/lib/Lemonldap/NG/Common/Crypto.pm @@ -30,9 +30,13 @@ sub new { # @param data datas to encrypt # @return encrypted datas in Base64 format sub encrypt { - my $self = shift; + my ( $self, $str ) = @_; my $tmp; - eval { $tmp = encode_base64( $self->SUPER::encrypt(@_), '' ); }; + eval { + $tmp = encode_base64( + $self->SUPER::encrypt( $str . "\0" x ( 16 - length($str) % 16 ) ), + '' ); + }; if ($@) { $msg = "Crypt::Rijndael error : $@"; return undef; @@ -60,6 +64,10 @@ sub decrypt { } else { $msg = ''; + + # Obscure Perl re bug... + $tmp .="\0"; + $tmp =~ s/\0*$//; return $tmp; } } diff --git a/modules/lemonldap-ng-portal/META.yml b/modules/lemonldap-ng-portal/META.yml index 3208180c3..3c157f91a 100644 --- a/modules/lemonldap-ng-portal/META.yml +++ b/modules/lemonldap-ng-portal/META.yml @@ -1,6 +1,6 @@ --- #YAML:1.0 name: Lemonldap-NG-Portal -version: 0.88 +version: 0.89 abstract: The authentication portal part of Lemonldap::NG Web-SSO license: ~ author: diff --git a/modules/lemonldap-ng-portal/example/apps/tools.png b/modules/lemonldap-ng-portal/example/apps/tools.png index 49e44b67957c902c904f188e2e2619438cf77dfa..7203dab922b9c7a107989ce0e3776cab5aa25b8d 100644 GIT binary patch delta 7045 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 delta 8410 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 aUH=bIY(h}Ab3exb0000a>h000004b3#c}2nYxW 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

m9ymC7Z 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 RNx&S*;OXk;vd$@?2>{_~7wG^1 delta 1383 zcmcb>b)T2l-P6s&GBJWdp5Z$K!$!>>#(IW<1tZjc#h)yU3=GW-I$-~U;)8+XAH!1) z8IKJM4mNWLYsH+HkTA_rK=G8I%f>}VyCsa%o_t=m_;|m9bC-zHc@NtuZb&t7X|cs zE%my(D%deA#bhPNGB%0&?z*rw6An(x73iv;H)F;QRe_^xW2RR1b{O|_Nr=8)aUn6V zx9f06sKvq#MurB45~T|}SBv=FTjlgKY|Fw&en-W%euelfQu2_uOZ&$pG=-I+SwxtF ztZyp5WBVs; zf~=^S#=oY(g>#h{7d8HK_@D8lnN=|H-WtV82M=`^=il+U8SwD%)Z6N^%OYL%TGTwU zwDvem6xQmw%AQenVCn%co74{yEbKKO*f0%A8AqokXT1U_SDn8P3>ZEf*Dg5NGkfPq2G=V=>%c~Iw61*;VwZc8^6{Hl*G z5Yv75+)q}Nv4QDd?jA;Vsr(DS+(a2-J{*(GJFxK>1GC1~%;nl#kB%nl-7vkEXc=`S zop(){N+zRx0K*|^rU>m!!Tgv92iU|JHXQWGec|BdG3TCTf@`@98;fh*$_vbH(We}4 zyVkEz=kU*+<8Y8sqIKUFt+0ttlI4a-~n4 z=;FHS-+`lhMQ0vx%~d$)c-KQ~vdc%V*b*1RB)OQ@iM=%;TcqVo&2F?yEm$e&!Co~* z=75aG?Pn8L1)F_5JVl%5;+0*ZdkdRgOD{MGDjZ&05K&nqae$GXlffbFl9#$<*7AHE|`C__mf^yym7@GGBo#Aw1XJ>O+(CS*bg!j^hob?QBd4=gqr#@8NTCx05 zzQMnhk1sm?o7mgA_5*7`L4053%vtqEzRa87Y*)H*@#MH&?tUw#?s{dmeO_?MtZGB+ zw_>;7{d(weNJQH+k41jc)25t-e?FZtfB)z6x$MNFU&0&$9QTR_#pJt+TnpA`6}cIF z|L>Rk@#ky5xz5<|%U7bHfssw>2><>+AF~bi|9$tE|Nr0L`{y70&9KFRftBOH|G($! VIgT(ea?fyJIHu2J#>v584FJ~zrNICI diff --git a/modules/lemonldap-ng-portal/example/skins/pastel/footer.tpl b/modules/lemonldap-ng-portal/example/skins/pastel/footer.tpl index 2b793314c..bca5d1bc9 100644 --- a/modules/lemonldap-ng-portal/example/skins/pastel/footer.tpl +++ b/modules/lemonldap-ng-portal/example/skins/pastel/footer.tpl @@ -1,6 +1,6 @@

diff --git a/modules/lemonldap-ng-portal/example/skins/pastel/menu.tpl b/modules/lemonldap-ng-portal/example/skins/pastel/menu.tpl index 6c0e42dea..fa72e5011 100644 --- a/modules/lemonldap-ng-portal/example/skins/pastel/menu.tpl +++ b/modules/lemonldap-ng-portal/example/skins/pastel/menu.tpl @@ -8,13 +8,13 @@ diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm index 10de8d6ed..5d5d0f820 100755 --- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm +++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm @@ -357,9 +357,23 @@ sub _displayDescription { sub _filterXML { my $self = shift; my ($root) = @_; + my @cat = $root->getElementsByTagName('category'); + foreach my $cat (@cat) { + $self->_filterApp($cat); + } - my @apps = $root->getElementsByTagName('application'); - foreach (@apps) { + # Hide empty categories + $self->_hideEmptyCategory($root); + + return; +} + +sub _filterApp { + my($self,$node)=@_; + my @apps = $node->getChildrenByTagName('application'); + my $tag = 0; + foreach(@apps) { + my $stag = $self->_filterApp($_); my $appdisplay = $_->getChildrenByTagName('display')->string_value(); my $appuri = $self->_userParam( $_->getChildrenByTagName('uri')->string_value() ); @@ -368,17 +382,26 @@ sub _filterXML { $_->unbindNode if ( $appdisplay eq "no" ); # Keep node if display is "yes" - next if ( $appdisplay eq "yes" ); + if ( $appdisplay eq "yes" ) { + $tag++; + next; + } # Check grant function if display is "auto" (this is the default) - $_->unbindNode unless ( $self->_grant($appuri) ); - + unless ( $self->_grant($appuri) ) { + if($stag) { + eval {$_->getChildrenByTagName('uri')->unbindNode() }; + $tag++; + } + else { + $_->unbindNode; + } + } + else { + $tag++; + } } - - # Hide empty categories - $self->_hideEmptyCategory($root); - - return; + return $tag; } ## @method private void _hideEmptyCategory(XML::LibXML::Element cat) @@ -443,7 +466,7 @@ sub _ppolicyWarning { sub _grant { my $self = shift; my ($uri) = @_; - $uri =~ m{(\w+)://([^/:]+)(:\d+)?(/.*)?$}; + $uri =~ m{(\w+)://([^/:]+)(:\d+)?(/.*)?$} or return 0; my ( $protocol, $vhost, $port ); ( $protocol, $vhost, $port, $path ) = ( $1, $2, $3, $4 ); $path ||= '/'; diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm index 87a3c4440..65fe3efd3 100644 --- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm +++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm @@ -140,12 +140,12 @@ sub new { # Authentication and userDB module are required and have to be in @ISA foreach (qw(authentication userDB passwordDB)) { - my $tmp = - 'Lemonldap::NG::Portal::' - . ( $_ eq 'userDB' + my $tmp = 'Lemonldap::NG::Portal::' + . ( + $_ eq 'userDB' ? 'UserDB' - : ( $_ eq 'passwordDB' ? 'PasswordDB' : 'Auth' ) ) - . $self->{$_}; + : ( $_ eq 'passwordDB' ? 'PasswordDB' : 'Auth' ) + ) . $self->{$_}; $tmp =~ s/\s.*$//; eval "require $tmp"; $self->abort( "Configuration error", $@ ) if ($@); @@ -231,6 +231,7 @@ sub setDefaultValues { my $self = shift; $self->{whatToTrace} ||= 'uid'; $self->{whatToTrace} =~ s/^\$//; + $self->{httpOnly} = 1 unless ( defined( $self->{httpOnly} ) ); } =begin WSDL @@ -825,21 +826,23 @@ sub buildCookie { my $self = shift; push @{ $self->{cookie} }, $self->cookie( - -name => $self->{cookieName}, - -value => $self->{id}, - -domain => $self->{domain}, - -path => "/", - -secure => $self->{securedCookie}, + -name => $self->{cookieName}, + -value => $self->{id}, + -domain => $self->{domain}, + -path => "/", + -secure => $self->{securedCookie}, + -httponly => $self->{httpOnly}, @_, ); if ( $self->{securedCookie} == 2 ) { push @{ $self->{cookie} }, $self->cookie( - -name => $self->{cookieName} . "http", - -value => $self->{sessionInfo}->{_httpSession}, - -domain => $self->{domain}, - -path => "/", - -secure => 0, + -name => $self->{cookieName} . "http", + -value => $self->{sessionInfo}->{_httpSession}, + -domain => $self->{domain}, + -path => "/", + -secure => 0, + -httponly => $self->{httpOnly}, @_, ); }