Skip to content

Commit efa4cb9

Browse files
author
Robin Chalas
committed
[SecurityBundle] Fix valid provider considered undefined
1 parent a5130b2 commit efa4cb9

File tree

8 files changed

+123
-5
lines changed

8 files changed

+123
-5
lines changed

src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -331,10 +331,10 @@ private function createFirewall(ContainerBuilder $container, $id, $firewall, &$a
331331

332332
// Provider id (take the first registered provider if none defined)
333333
if (isset($firewall['provider'])) {
334-
$defaultProvider = $this->getUserProviderId($firewall['provider']);
335-
if (!in_array($defaultProvider, $providerIds, true)) {
334+
if (!isset($providerIds[$normalizedName = str_replace('-', '_', $firewall['provider'])])) {
336335
throw new InvalidConfigurationException(sprintf('Invalid firewall "%s": user provider "%s" not found.', $id, $firewall['provider']));
337336
}
337+
$defaultProvider = $providerIds[$normalizedName];
338338
} else {
339339
$defaultProvider = reset($providerIds);
340340
}
@@ -491,10 +491,10 @@ private function createAuthenticationListeners($container, $id, $firewall, &$aut
491491

492492
if (isset($firewall[$key])) {
493493
if (isset($firewall[$key]['provider'])) {
494-
if (!in_array($firewall[$key]['provider'], $providerIds, true)) {
494+
if (!isset($providerIds[$normalizedName = str_replace('-', '_', $firewall[$key]['provider'])])) {
495495
throw new InvalidConfigurationException(sprintf('Invalid firewall "%s": user provider "%s" not found.', $id, $firewall[$key]['provider']));
496496
}
497-
$userProvider = $this->getUserProviderId($firewall[$key]['provider']);
497+
$userProvider = $providerIds[$normalizedName];
498498
} else {
499499
$userProvider = $defaultProvider;
500500
}
@@ -596,7 +596,7 @@ private function createUserProviders($config, ContainerBuilder $container)
596596
$providerIds = array();
597597
foreach ($config['providers'] as $name => $provider) {
598598
$id = $this->createUserDaoProvider($name, $provider, $container);
599-
$providerIds[] = $id;
599+
$providerIds[str_replace('-', '_', $name)] = $id;
600600
}
601601

602602
return $providerIds;

src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/CompleteConfigurationTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,18 @@ public function testFirewallListenerUndefinedProvider()
405405
$this->getContainer('listener_undefined_provider');
406406
}
407407

408+
public function testFirewallWithUserProvider()
409+
{
410+
$this->getContainer('firewall_provider');
411+
$this->addToAssertionCount(1);
412+
}
413+
414+
public function testFirewallListenerWithProvider()
415+
{
416+
$this->getContainer('listener_provider');
417+
$this->addToAssertionCount(1);
418+
}
419+
408420
protected function getContainer($file)
409421
{
410422
$file = $file.'.'.$this->getFileExtension();
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
$container->loadFromExtension('security', array(
4+
'providers' => array(
5+
'default' => array(
6+
'memory' => $memory = array(
7+
'users' => array('foo' => array('password' => 'foo', 'roles' => 'ROLE_USER')),
8+
),
9+
),
10+
'with-dash' => array(
11+
'memory' => $memory,
12+
),
13+
),
14+
'firewalls' => array(
15+
'main' => array(
16+
'provider' => 'default',
17+
'form_login' => true,
18+
),
19+
'other' => array(
20+
'provider' => 'with-dash',
21+
'form_login' => true,
22+
),
23+
),
24+
));
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
$container->loadFromExtension('security', array(
4+
'providers' => array(
5+
'default' => array(
6+
'memory' => array(
7+
'users' => array('foo' => array('password' => 'foo', 'roles' => 'ROLE_USER')),
8+
),
9+
),
10+
),
11+
'firewalls' => array(
12+
'main' => array(
13+
'form_login' => array('provider' => 'default'),
14+
),
15+
),
16+
));
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns:sec="http://symfony.com/schema/dic/security"
6+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
7+
8+
<sec:config>
9+
<sec:providers>
10+
<sec:provider name="with-dash" id="foo" />
11+
</sec:providers>
12+
13+
<sec:firewalls>
14+
<sec:firewall name="main" provider="with-dash">
15+
<sec:form_login />
16+
</sec:firewall>
17+
</sec:firewalls>
18+
</sec:config>
19+
20+
</container>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns:sec="http://symfony.com/schema/dic/security"
6+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
7+
8+
<sec:config>
9+
<sec:providers>
10+
<sec:provider name="default" id="foo" />
11+
</sec:providers>
12+
13+
<sec:firewalls>
14+
<sec:firewall name="main">
15+
<sec:form_login provider="default" />
16+
</sec:firewall>
17+
</sec:firewalls>
18+
</sec:config>
19+
20+
</container>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
security:
2+
providers:
3+
default:
4+
memory:
5+
users: { foo: { password: foo, roles: ROLE_USER } }
6+
with-dash:
7+
memory:
8+
users: { foo: { password: foo, roles: ROLE_USER } }
9+
10+
firewalls:
11+
main:
12+
provider: default
13+
form_login: true
14+
other:
15+
provider: with-dash
16+
form_login: true
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
security:
2+
providers:
3+
default:
4+
memory:
5+
users: { foo: { password: foo, roles: ROLE_USER } }
6+
7+
firewalls:
8+
main:
9+
form_login:
10+
provider: default

0 commit comments

Comments
 (0)