@@ -329,10 +329,12 sub is_member { | |||||
329 |
|
329 | |||
330 | my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass); |
|
330 | my $pass_digest = Digest::SHA1::sha1_hex($redmine_pass); | |
331 |
|
331 | |||
|
332 | my $access_mode = defined $read_only_methods{$r->method} ? "R" : "W"; | |||
|
333 | ||||
332 | my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config); |
|
334 | my $cfg = Apache2::Module::get_config(__PACKAGE__, $r->server, $r->per_dir_config); | |
333 | my $usrprojpass; |
|
335 | my $usrprojpass; | |
334 | if ($cfg->{RedmineCacheCredsMax}) { |
|
336 | if ($cfg->{RedmineCacheCredsMax}) { | |
335 | $usrprojpass = $cfg->{RedmineCacheCreds}->get($redmine_user.":".$project_id); |
|
337 | $usrprojpass = $cfg->{RedmineCacheCreds}->get($redmine_user.":".$project_id.":".$access_mode); | |
336 | return 1 if (defined $usrprojpass and ($usrprojpass eq $pass_digest)); |
|
338 | return 1 if (defined $usrprojpass and ($usrprojpass eq $pass_digest)); | |
337 | } |
|
339 | } | |
338 | my $query = $cfg->{RedmineQuery}; |
|
340 | my $query = $cfg->{RedmineQuery}; | |
@@ -345,7 +347,7 sub is_member { | |||||
345 | unless ($auth_source_id) { |
|
347 | unless ($auth_source_id) { | |
346 | my $method = $r->method; |
|
348 | my $method = $r->method; | |
347 | my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest); |
|
349 | my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest); | |
348 |
if ($hashed_password eq $salted_password && ((de |
|
350 | if ($hashed_password eq $salted_password && (($access_mode eq "R" && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) { | |
349 | $ret = 1; |
|
351 | $ret = 1; | |
350 | last; |
|
352 | last; | |
351 | } |
|
353 | } | |
@@ -364,7 +366,7 sub is_member { | |||||
364 | filter => "(".$rowldap[6]."=%s)" |
|
366 | filter => "(".$rowldap[6]."=%s)" | |
365 | ); |
|
367 | ); | |
366 | my $method = $r->method; |
|
368 | my $method = $r->method; | |
367 |
$ret = 1 if ($ldap->authenticate($redmine_user, $redmine_pass) && ((de |
|
369 | $ret = 1 if ($ldap->authenticate($redmine_user, $redmine_pass) && (($access_mode eq "R" && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/)); | |
368 |
|
370 | |||
369 | } |
|
371 | } | |
370 | $sthldap->finish(); |
|
372 | $sthldap->finish(); | |
@@ -378,10 +380,10 sub is_member { | |||||
378 |
|
380 | |||
379 | if ($cfg->{RedmineCacheCredsMax} and $ret) { |
|
381 | if ($cfg->{RedmineCacheCredsMax} and $ret) { | |
380 | if (defined $usrprojpass) { |
|
382 | if (defined $usrprojpass) { | |
381 | $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id, $pass_digest); |
|
383 | $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id.":".$access_mode, $pass_digest); | |
382 | } else { |
|
384 | } else { | |
383 | if ($cfg->{RedmineCacheCredsCount} < $cfg->{RedmineCacheCredsMax}) { |
|
385 | if ($cfg->{RedmineCacheCredsCount} < $cfg->{RedmineCacheCredsMax}) { | |
384 | $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id, $pass_digest); |
|
386 | $cfg->{RedmineCacheCreds}->set($redmine_user.":".$project_id.":".$access_mode, $pass_digest); | |
385 | $cfg->{RedmineCacheCredsCount}++; |
|
387 | $cfg->{RedmineCacheCredsCount}++; | |
386 | } else { |
|
388 | } else { | |
387 | $cfg->{RedmineCacheCreds}->clear(); |
|
389 | $cfg->{RedmineCacheCreds}->clear(); |
General Comments 0
You need to be logged in to leave comments.
Login now