[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[upki-fed:00341] Template AttributeDefinitionのバグ?



西村です。

Shibboleth IdP 2.1.5を使っているのですが、xsi:type="Template"のAttributeDefinition
のバグっぽい挙動が見つかりましたので報告します。「2.2.1では違う」とか、他にもおかしな
挙動があるということがありましたら教えてください。

https://wiki.shibboleth.net/confluence/display/SHIB2/ResolverTemplateAttributeDefinition
にもあるように、基本的な挙動としてはLDAPから取得した属性を組み合わせて新しい属性値を作り出す
ものですが、LDAP(LDAP DataConnector)から直接得るのではなく、他の加工したAttributeDefinition
から属性を得ようとするとうまくいかないというものです。

具体的なコードは最後に添付しますが、LDAPからmailを取得し、Simple AttributeDefinition
で定義されたo2から値を取得し"result ${mail} ${o2}"のように結合して新たな属性o3を定義する
ものです。o2は"Test Organization"というoの値をそのまま渡すことを意図しています。
このまま実行すると
2011-05-13 20:00:40.871 - ERROR [edu.internet2.middleware.shibboleth.common.attribute.resolver.provider.attributeDefinition.TemplateAttributeDefinition:92] - [TP-Processor2] - All attributes used in TemplateAttributeDefinition o3 must have the same number of values.
とエラーになります。

さらに、SourceAttributeの2つの行のうちmailのほうだけを残すと、
	result xxxxxxxxxxxxx@xxxxxxxxx ${o2};result Test Organization ${o2}
という属性値が送られます。"${o2}"がそのまま送られるのはそのようにしたので期待通りですが、
- 1つ目は${mail}に"xxxxxxxxxxxx@xxxxxxxxx"を代入したもの(これも期待通り)
- 2つ目は${mail}に"Test Organization"を代入したもの(なにこれ?)
の2つの属性値が渡っているようです。
SourceAttributeの2つの行のうちo2のほうだけを残した場合は期待通りの動作をします。
ちなみに、mailのみ残した場合で、Dependencyの2つの行を入れ替えると、上記結果の;の前後が入
れ替わります。

LDAP DataConnectorを使っていると、ユーザによって属性が存在する場合としない場合があると思います。
存在するものと存在しないものの組み合わせでTemplate AttributeDefinitionを使おうとすると
上記と同じエラーになる(これは仕様通り)のですが、これを回避しようとして存在しないほうに
Mapped AttributeDefinition等を噛まそうとすると、このバグ?にひっかかることになります。
私の思いつく回避方法は、若干複雑になりますがTemplateではなくScript AttributeDefinition
で定義する方法です。

最後に、Dependency ref="myLDAP"の行をコメントアウトしてo2のみDependencyに
入れると、定義されていないはずの${mail}にも"Test Organization"が代入されることが
確認できます。Dependency ref="o2"によって、全ての変数に"Test Organization"が追加
されている感じです。

attribute-resolver.xml抜粋:
--------
<resolver:AttributeDefinition xsi:type="Template" xmlns="urn:mace:shibboleth:2.0:resolver:ad" id="o3">
    <resolver:Dependency ref="myLDAP" />
    <resolver:Dependency ref="o2" />
    <Template>
        <![CDATA[
            result ${mail} ${o2}
        ]]>
    </Template>
    <SourceAttribute>mail</SourceAttribute>
    <SourceAttribute>o2</SourceAttribute>
</resolver:AttributeDefinition>
<resolver:AttributeDefinition id="o2" xsi:type="Simple" xmlns="urn:mace:shibboleth:2.0:resolver:ad"
    sourceAttributeID="o">
    <resolver:Dependency ref="staticOrganization" />
</resolver:AttributeDefinition>
--------

-- 
西村健
国立情報学研究所 TEL:03-4212-2720