/*\r
- * Copyright 2001-2007 Internet2\r
+ * Copyright 2001-2009 Internet2\r
*\r
* Licensed under the Apache License, Version 2.0 (the "License");\r
* you may not use this file except in compliance with the License.\r
using namespace std;\r
\r
namespace shibsp {\r
- static XMLCh formatter[] = UNICODE_LITERAL_9(f,o,r,m,a,t,t,e,r);\r
+ static const XMLCh formatter[] = UNICODE_LITERAL_9(f,o,r,m,a,t,t,e,r);\r
+ static const XMLCh defaultQualifiers[] = UNICODE_LITERAL_17(d,e,f,a,u,l,t,Q,u,a,l,i,f,i,e,r,s);\r
\r
class SHIBSP_DLLLOCAL NameIDAttributeDecoder : virtual public AttributeDecoder\r
{\r
public:\r
- NameIDAttributeDecoder(const DOMElement* e) : AttributeDecoder(e), m_formatter(e ? e->getAttributeNS(NULL,formatter) : NULL) {}\r
+ NameIDAttributeDecoder(const DOMElement* e)\r
+ : AttributeDecoder(e), m_formatter(e ? e->getAttributeNS(NULL, formatter) : NULL), m_defaultQualifiers(false) {\r
+ const XMLCh* flag = e ? e->getAttributeNS(NULL, defaultQualifiers) : NULL;\r
+ if (flag && (*flag == chLatin_t || *flag == chDigit_1))\r
+ m_defaultQualifiers = true;\r
+ }\r
~NameIDAttributeDecoder() {}\r
\r
shibsp::Attribute* decode(\r
const NameIdentifier* n, vector<NameIDAttribute::Value>& dest, const char* assertingParty, const char* relyingParty\r
) const;\r
auto_ptr_char m_formatter;\r
+ bool m_defaultQualifiers;\r
};\r
\r
AttributeDecoder* SHIBSP_DLLLOCAL NameIDAttributeDecoderFactory(const DOMElement* const & e)\r
auto_ptr<NameIDAttribute> nameid(\r
new NameIDAttribute(ids, (m_formatter.get() && *m_formatter.get()) ? m_formatter.get() : DEFAULT_NAMEID_FORMATTER)\r
);\r
- nameid->setCaseSensitive(m_caseSensitive);\r
vector<NameIDAttribute::Value>& dest = nameid->getValues();\r
vector<XMLObject*>::const_iterator v,stop;\r
\r
}\r
}\r
\r
- return dest.empty() ? NULL : nameid.release();\r
+ return dest.empty() ? NULL : _decode(nameid.release());\r
}\r
\r
const NameIDType* saml2name = dynamic_cast<const NameIDType*>(xmlObject);\r
}\r
}\r
\r
- return dest.empty() ? NULL : nameid.release();\r
+ return dest.empty() ? NULL : _decode(nameid.release());\r
}\r
\r
void NameIDAttributeDecoder::extract(\r
str = toUTF8(n->getNameQualifier());\r
if (str && *str)\r
val.m_NameQualifier = str;\r
- else if (assertingParty)\r
+ else if (m_defaultQualifiers && assertingParty)\r
val.m_NameQualifier = assertingParty;\r
delete[] str;\r
\r
str = toUTF8(n->getSPNameQualifier());\r
if (str && *str)\r
val.m_SPNameQualifier = str;\r
- else if (relyingParty)\r
+ else if (m_defaultQualifiers && relyingParty)\r
val.m_SPNameQualifier = relyingParty;\r
delete[] str;\r
\r
str = toUTF8(n->getNameQualifier());\r
if (str && *str)\r
val.m_NameQualifier = str;\r
- else if (assertingParty)\r
+ else if (m_defaultQualifiers && assertingParty)\r
val.m_NameQualifier = assertingParty;\r
delete[] str;\r
\r
- if (relyingParty)\r
+ if (m_defaultQualifiers && relyingParty)\r
val.m_SPNameQualifier = relyingParty;\r
}\r
}\r