X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=cgi-auth-flexible.pm;h=a661618067278c8b3099bc846603e34a617f0b19;hb=7d434e663778b6032c86c63a381637e8327292df;hp=d5a3876b644662b963dbb51ee5a030f6189f89d4;hpb=2342dbc87d04a5be0f80e096928696e04eac26bd;p=cgi-auth-flexible.git diff --git a/cgi-auth-flexible.pm b/cgi-auth-flexible.pm index d5a3876..a661618 100644 --- a/cgi-auth-flexible.pm +++ b/cgi-auth-flexible.pm @@ -387,7 +387,8 @@ sub srcdump_dirscan_prepare ($$) { close $reportfh or die $!; srcdump_install($c,$v, $dumpdir, 'licence', 'text/plain'); $!=0; - my @cmd = (qw(tar -zvvcf), "$dumpdir/source.tmp", + my @cmd = (qw(sh -ec), 'exec >&2 "$@"', qw(x), + qw(tar -zvvcf), "$dumpdir/source.tmp", "-C", $dumpdir, qw( --), @srcfiles); my $r = system(@cmd); if ($r) { @@ -1035,16 +1036,17 @@ sub check_divert ($) { $r->{Divert} = $r->_db_transaction(sub { $r->_check_divert_core(); }); $dbh->commit(); - my $cookraw = $r->{_CookieRaw}; - $r->{CookieSecret} = $r->_blind($cookraw); + my $divert = $r->{Divert}; + my $cookraw = $divert->{_CookieRaw}; + $divert->{CookieSecret} = $r->_blind($cookraw); if ($cookraw) { - $r->{Params}{$r->{S}{assoc_param_name}} = [ + $divert->{Params}{$r->{S}{assoc_param_name}} = [ $r->_blind($r->hash($cookraw)) ]; } - $r->_debug(Data::Dumper->Dump([$r->{Divert}],[qw(divert)])); - return $r->{Divert}; + $r->_debug(Data::Dumper->Dump([$divert],[qw(divert)])); + return $divert; } sub get_divert ($) { @@ -1178,17 +1180,18 @@ sub _blind_combine ($$$) { sub _blind ($$) { my ($r, $in) = @_; - return undef unless defined $in; + return $in unless $in; my $l = $r->_blind_len($in); my $mask = $r->_random(($l+1)>>1); $mask = substr $mask, 0, $l; my $blound = $r->_blind_combine($in, $mask); - return "$blound/$mask"; + return "$blound.$mask"; } sub _unblind ($$) { my ($r, $in) = @_; - my ($blound,$mask) = ($in =~ m#^(.*)/([0-9a-f]+)$#) or die "$in ?"; + return $in unless $in; + my ($blound,$mask) = ($in =~ m#^(.*)\.([0-9a-f]+)$#) or die "$in ?"; my $l = $r->_blind_len($blound); $l == length($mask) or die "$in ?"; return $r->_blind_combine($blound, $mask);