Skip to content
Snippets Groups Projects
Commit a0efe6ae authored by Patrick Dowler's avatar Patrick Dowler
Browse files

check that subject did not change since creating SSLSocketFactory in GMS...

check that subject did not change since creating SSLSocketFactory in GMS clients, change VOSpaceAuthorizer to call both CADC and CANFAR GMS services
parent 14662ab5
No related branches found
No related tags found
No related merge requests found
...@@ -115,7 +115,8 @@ public class GMSClient ...@@ -115,7 +115,8 @@ public class GMSClient
private static final Logger log = Logger.getLogger(GMSClient.class); private static final Logger log = Logger.getLogger(GMSClient.class);
// socket factory to use when connecting // socket factory to use when connecting
public SSLSocketFactory sslSocketFactory; private SSLSocketFactory sslSocketFactory;
private SSLSocketFactory mySocketFactory;
private String baseURL; private String baseURL;
...@@ -947,23 +948,40 @@ public class GMSClient ...@@ -947,23 +948,40 @@ public class GMSClient
*/ */
public void setSSLSocketFactory(SSLSocketFactory sslSocketFactory) public void setSSLSocketFactory(SSLSocketFactory sslSocketFactory)
{ {
if (mySocketFactory != null)
throw new IllegalStateException("Illegal use of GMSClient: "
+ "cannot set SSLSocketFactory after using one created from Subject");
this.sslSocketFactory = sslSocketFactory; this.sslSocketFactory = sslSocketFactory;
} }
/** private int subjectHashCode = 0;
* @return the sslSocketFactory
*/
private SSLSocketFactory getSSLSocketFactory() private SSLSocketFactory getSSLSocketFactory()
{ {
if (this.sslSocketFactory == null) AccessControlContext ac = AccessController.getContext();
Subject s = Subject.getSubject(ac);
// no real Subject: can only use the one from setSSLSocketFactory
if (s == null || s.getPrincipals().isEmpty())
{
return sslSocketFactory;
}
// lazy init
if (this.mySocketFactory == null)
{
log.debug("getSSLSocketFactory: " + s);
this.mySocketFactory = SSLUtil.getSocketFactory(s);
this.subjectHashCode = s.hashCode();
}
else
{ {
log.debug("initHTTPS: lazy init"); int c = s.hashCode();
AccessControlContext ac = AccessController.getContext(); if (c != subjectHashCode)
Subject s = Subject.getSubject(ac); throw new IllegalStateException("Illegal use of "
this.sslSocketFactory = SSLUtil.getSocketFactory(s); + this.getClass().getSimpleName()
log.debug("Socket Factory: " + this.sslSocketFactory); + ": subject change not supported for internal SSLSocketFactory");
} }
return this.sslSocketFactory; return this.mySocketFactory;
} }
protected void clearCache() protected void clearCache()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment