<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi guys,</div><div class=""><br class=""></div><div class="">A message from Phil Smart (who some of you know). He’s having issues joining the dev list, so until he manages to do so (bloody PhDs, can’t even join a mailing list), I said I’d forward on his question below:</div><div class=""><br class=""></div><div class="">I guess the question is - is this a bug? If y’all think so, I can tell him to just pop it onto Jira.</div><div class=""><br class=""></div><div class="">Rhys.</div><div class=""><br class=""></div><div class="">
</div>
<div><br class=""><blockquote type="cite" class=""><div class="">Begin forwarded message:</div><br class="Apple-interchange-newline"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">From: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">Phil Smart <<a href="mailto:SmartP@cardiff.ac.uk" class="">SmartP@cardiff.ac.uk</a>><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Subject: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class=""><b class="">SEND THIS</b><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Date: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">2 March 2017 at 14:36:35 GMT<br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">To: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">Rhys Smith <<a href="mailto:Rhys.Smith@jisc.ac.uk" class="">Rhys.Smith@jisc.ac.uk</a>><br class=""></span></div><br class=""><div class="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">

<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<table cellspacing="0" cellpadding="0" style="background-color: #ffffff" class="">
<tbody class="">
<tr class="">
<td valign="top" style="width: 724.8px; padding: 1px 5px;" class="">
<div style="margin: 0px; font-size: 12px; line-height: normal; min-height: 14px;" class="">
<br class="">
</div>
</td>
<td valign="top" style="width: 724.8px; padding: 1px 5px;" class="">
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">Hello,</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">I am trying to use a SubjectDerivedAttribute attribute definition in my attribute-resolver (Shib Idp v3.3.0) to return IdPAttributes contained within IdPAttributePrincipals. These are placed into the Subject’s principals
 when authenticating the principal inside a custom JAAS login module.</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">However, if the principalAttributeName can not be found (so there is no IdPAttribute with the same attributeId) I get a null pointer exception from the ContextDerivedAttributeDefinition e.g:</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">2017-03-01 14:17:09,972 - INFO [net.shibboleth.idp.attribute.resolver.ad.impl.ContextDerivedAttributeDefinition:107] - SubjectDerivedAttributeDefinitionsomeattribute generated no values, attrribute no resolved.</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">2017-03-01 14:17:09,975 - ERROR [net.shibboleth.idp.profile:-2] - Uncaught runtime exception</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">java.lang.NullPointerException: null</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">        at net.shibboleth.idp.attribute.resolver.ad.impl.ContextDerivedAttributeDefinition.doAttributeDefinitionResolve(ContextDerivedAttributeDefinition.java:98)</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">2017-03-01 14:17:09,996 - WARN [org.opensaml.profile.action.impl.LogEvent:105] - A non-proceed event occurred while processing the request: RuntimeException</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">This (as the msg says) prevents further events from occurring. </span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">It is a valid state in our Identity System that some principals do not contain every SubjectDerivedAttribute defined in the resolver. Hence, this prevents some of them from authenticating. </span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">It looks to me from the stack trace (but I maybe wrong), that this is due to a debug statement in the ContextDerivedAttributeDefinition.doAttributeDefinitionResolve, which calls the size() method of the results object
 without first checking the results object is not null. It also appears that the net/shibboleth/idp/attribute/resolver/ad/impl/SubjectDerivedAttributeValuesFunction.class legally allows null values to return from the apply method - so perhaps should be dealt
 with. </span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">I include the relevant code fragments even though I am sure you can easily look this up:</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">———————net/shibboleth/idp/attribute/resolver/ad/impl/ContextDerivedAttributeDefinition.class</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">@Override @Nullable protected IdPAttribute doAttributeDefinitionResolve(</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">92<span class="Apple-tab-span" style="white-space:pre">
</span>            @Nonnull final AttributeResolutionContext resolutionContext,</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">93<span class="Apple-tab-span" style="white-space:pre">
</span>            @Nonnull final AttributeResolverWorkContext workContext) throws ResolutionException {</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">94<span class="Apple-tab-span" style="white-space:pre">
</span></span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">95<span class="Apple-tab-span" style="white-space:pre">
</span>        final ProfileRequestContext prc = prcLookupStrategy.apply(resolutionContext);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">96<span class="Apple-tab-span" style="white-space:pre">
</span>        final List<IdPAttributeValue<?>> results = attributeValuesFunction.apply(prc);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">97<span class="Apple-tab-span" style="white-space:pre">
</span>         </span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">//IS THIS THE ISSUE?</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">98<span class="Apple-tab-span" style="white-space:pre">
</span>        log.debug("{} Generated {} values.", getLogPrefix(), results.size());   </span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">99<span class="Apple-tab-span" style="white-space:pre">
</span>        log.trace("{} Values:", getLogPrefix(), results);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">100<span class="Apple-tab-span" style="white-space:pre">
</span>        final IdPAttribute attribute = new IdPAttribute(getId());</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">101<span class="Apple-tab-span" style="white-space:pre">
</span>        attribute.setValues(results);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">102<span class="Apple-tab-span" style="white-space:pre">
</span>        return attribute;</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">103<span class="Apple-tab-span" style="white-space:pre">
</span>    } </span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">————net/shibboleth/idp/attribute/resolver/ad/impl/SubjectDerivedAttributeValuesFunction.class</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">@Nullable</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">  public List<IdPAttributeValue<?>> apply(@Nullable ProfileRequestContext prc)</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">  {</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    SubjectContext cs = (SubjectContext)this.scLookupStrategy.apply(prc);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    List<IdPAttributeValue<?>> results = new ArrayList(1);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    for (Subject subject : cs.getSubjects()) {</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">      for (Principal principal : subject.getPrincipals())</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">      {</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">        List<IdPAttributeValue<?>> values = (List)this.attributesValueFunction.apply(principal);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">        if ((null != values) && (!values.isEmpty())) {</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">          results.addAll(values);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">        }</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">      }</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    }</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    if (results.isEmpty())</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    {</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">      <a href="http://this.log.info/" class="">
this.log.info</a>("{} generated no values, attrribute no resolved.", getLogPrefix());</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">      return null;</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    }</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    this.log.debug("{} Generated {} values.", getLogPrefix(), Integer.valueOf(results.size()));</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    this.log.trace("{} Values:", getLogPrefix(), results);</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">    return results;</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">  }</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">Thanks</span></div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial; min-height: 14px;" class="">
<span style="font-kerning: none" class=""></span><br class="">
</div>
<div style="margin: 0px; font-size: 12px; line-height: normal; font-family: Courier; -webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: initial;" class="">
<span style="font-kerning: none" class="">Phil</span></div>
</td>
</tr>
</tbody>
</table>
<br class="">
</div>

</div></blockquote></div><br class=""><div class=""><div class=""><span style="font-family: Calibri, sans-serif; font-size: 14px;" class="">--</span></div><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">Dr Rhys Smith</div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">Chief Technical Architect, Trust & Identity</div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">Jisc</div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class=""><br class=""></div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">T: +44 (0) 1235 822145</div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">M: +44 (0) 7968 087821</div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">Skype: rhys-smith</div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">GPG: 0x4638C985</div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">Lumen House, Library Avenue, Harwell Oxford, Didcot, OX11 0SG</div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class=""><br class=""></div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class=""><a href="http://jisc.ac.uk" class="">jisc.ac.uk</a></div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class=""><br class=""></div><div style="font-family: Calibri, sans-serif; font-size: 14px;" class="">Jisc is a registered charity (number 1149740) and a company limited by guarantee which is registered in England under Company No. 5747339, VAT No. GB 197 0632 86. Jisc’s registered office is: One Castlepark, Tower Hill, Bristol, BS2 0JA. T 0203 697 5800.</div></div></div></div></div></div></div></body></html>