[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[upki-fed:00341] Template AttributeDefinitionのバグ?
- Subject: [upki-fed:00341] Template AttributeDefinitionのバグ?
- Date: Sun, 15 May 2011 00:56:45 +0900
- From: Takeshi NISHIMURA <xxxxxxx@xxxxxxxxx>
西村です。
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