100% agree; documentation would help, as would warning suppression.

jamesG

-----Original Message-----
From: "Patricia Shanahan" <p...@acm.org>
Sent: Thursday, December 30, 2010 9:55am
To: river-dev@incubator.apache.org
Subject: Re: light refactoring

If it is not already planned, I suggest adding a comment summarizing 
this information. Also, in anything Java 5 or later, the method can be 
annotated to suppress any warning about the unused private method, so we 
can still aim for warning-free code.

Patricia


On 12/30/2010 5:56 AM, Brian Murphy wrote:
> On Wed, Dec 29, 2010 at 1:37 AM,<jgr...@simulexinc.com>  wrote:
>
> 3) Several of the "Constrainable" classes have the private method
>> "getProxyTrustIterator" which is never used.   Is this safe to remove?
>
>
> No, this will break outrigger with respect to remote security.
>
> The getProxyTrustIterator method is called reflectively by the
> infrastructure, and is necessary for verifying trust in the proxies
> (both dynamic and non-dynamic) that a client might receive.
> Therefore, that method is somewhat fundamental to the
> extensions that were made to the Java security model to
> support network security in the face of remote method
> invocations and downloaded code. From the specification of
> the net.jini.security.proxytrust.ProxyTrustVerifier.isTrusted
> method:
>
> [snip]
>       * A verifier is obtained from a candidate object as follows.
>       *<ul>
>       *<li>
>       * If either the candidate object's class has a non-<code>static</code>
>       * member method with signature:
>       *<pre>ProxyTrustIterator getProxyTrustIterator();</pre>
>       * or the candidate object is an instance of a dynamically generated
>       * {...@link Proxy} class and the contained invocation handler's class 
> has
>       * such a member method, then the<code>getProxyTrustIterator</code>
>       * method is called (on the candidate object or its invocation handler).
>       * For each object produced by the {...@link ProxyTrustIterator#next 
> next}
>       * method of the returned iterator, the following substeps are used,
> until
>       * either a verifier is obtained or the iteration terminates. If no
>       * verifier can be obtained from any object produced by the iterator,
>       * then there is no verifier for the candidate object. For any given
>       * object produced by the iterator, if a verifier cannot be obtained
> from
>       * the object but an intermediate operation involved in attempting to
>       * obtain a verifier throws a<code>RemoteException</code>, that
>       * exception is passed to the {...@link ProxyTrustIterator#setException
>       * setException} method of the iterator, and the iteration continues.
>       *<p>
>       * The<code>getProxyTrustIterator</code>  method and the
>       *<code>ProxyTrustIterator</code>  methods are all invoked in a
>       * restricted security context. If the specified trust verifier
>       * context contains an {...@link UntrustedObjectSecurityContext} 
> instance,
>       * then the security context returned by its
>       * {...@link UntrustedObjectSecurityContext#getContext getContext} method
>       * is used. Otherwise, the security context used is equivalent to
>       * the current security context (as returned by
>       * {...@link net.jini.security.Security#getContext Security.getContext})
> with
>       * an additional protection domain combined into the access control
>       * context that contains an empty {...@link java.security.CodeSource}
>       * (<code>null</code>  location and certificates),
>       *<code>null</code>  permissions,<code>null</code>  class loader, and
>       *<code>null</code>  principals.
> [snip]
>
> I hope this helps,
> Brian
>



Reply via email to