diff --git a/modules/core/lib/Auth/Process/AttributeMap.php b/modules/core/lib/Auth/Process/AttributeMap.php index cedde6877a536992a6b8e6c312f88f1b487efa85..7992f8b69d45163974ebc21096e7bdacec83087b 100644 --- a/modules/core/lib/Auth/Process/AttributeMap.php +++ b/modules/core/lib/Auth/Process/AttributeMap.php @@ -135,6 +135,9 @@ class AttributeMap extends \SimpleSAML\Auth\ProcessingFilter } } } else { + if (array_key_exists($name, $mapped_attributes)) { + continue; + } $mapped_attributes[$name] = $values; } } diff --git a/tests/modules/core/lib/Auth/Process/AttributeMapTest.php b/tests/modules/core/lib/Auth/Process/AttributeMapTest.php index 7a14dc76c4a944c7dac0db8033431a998c9d87e4..64ca49232aa3bfae4f1a9f5a1fc06062bbe94f2d 100644 --- a/tests/modules/core/lib/Auth/Process/AttributeMapTest.php +++ b/tests/modules/core/lib/Auth/Process/AttributeMapTest.php @@ -199,4 +199,46 @@ class AttributeMapTest extends TestCase $this->setExpectedException('\Exception'); self::processFilter($config, $request); } + + public function testOverwrite() + { + $config = [ + 'attribute1' => 'attribute2', + ]; + $request = [ + 'Attributes' => [ + 'attribute1' => ['value1'], + 'attribute2' => ['value2'], + ], + ]; + + $processed = self::processFilter($config, $request); + $result = $processed['Attributes']; + $expected = [ + 'attribute2' => ['value1'], + ]; + + $this->assertEquals($expected, $result); + } + + public function testOverwriteReversed() + { + $config = [ + 'attribute1' => 'attribute2', + ]; + $request = [ + 'Attributes' => [ + 'attribute2' => ['value2'], + 'attribute1' => ['value1'], + ], + ]; + + $processed = self::processFilter($config, $request); + $result = $processed['Attributes']; + $expected = [ + 'attribute2' => ['value1'], + ]; + + $this->assertEquals($expected, $result); + } }