RFR: 8043306 - Provide a replacement for the API that allowed to listen for LogManager configuration changes
Daniel Fuchs
daniel.fuchs at oracle.com
Fri Sep 12 08:50:17 UTC 2014
Hi Peter,
On 9/12/14 9:14 AM, Peter Levart wrote:
> Wouldn't it be cleaner to evaluate SM presence in the lambda wrapper
> which would always be constructed, like that:
>
Well - then we would always be storing the ACC, so
maybe we could just always call
AccessController.doPrivileged, whether there's
a security manager or not.
Do you think it would be cleaner?
best regards,
-- daniel
On 9/12/14 9:14 AM, Peter Levart wrote:
> On 09/11/2014 06:17 PM, Daniel Fuchs wrote:
>> On 9/10/14 1:25 PM, Alan Bateman wrote:
>>> On 10/09/2014 10:49, Daniel Fuchs wrote:
>>>> Hi,
>>>>
>>>> Please find below a proposed patch for
>>>>
>>>> 8043306 - Provide a replacement for the API that allowed to listen
>>>> for LogManager configuration changes
>>>> https://bugs.openjdk.java.net/browse/JDK-8043306
>>>>
>>>> Proposed Patch:
>>>> http://cr.openjdk.java.net/~dfuchs/webrev_8043306/webrev.00/
>>>>
>>> It would be nice if ConfigurationListener could be an interface. I
>>> realize this might mean looking again at the security concerns in this
>>> area again to see if we could get away without requiring a construction
>>> time permission check. Clearly if it could be an interface then it begs
>>> the question as to why it's just not a Runnable but that probably means
>>> yet more effort to figure out the right security and whether the access
>>> control context should be recorded when registering.
>>
>> Given that both Paul & Alan have indicated that they would prefer
>> to use interfaces for listeners, I have been working on a
>> version that uses 'Runnable'.
>>
>> Thanks to Paul & Alan for all the suggestions that went into
>> this new patch (especially for refining the spec and suggesting
>> a nice way to rewrite addConfigurationListener() using lambdas)!
>>
>> http://cr.openjdk.java.net/~dfuchs/webrev_8043306/webrev.03/
>>
>> best regards,
>>
>> -- daniel
>
> Hi Daniel,
>
> Just a question about security and delayed execution...
>
> If at the time the configuration listener is added to the LogManager,
> SecurityManager is not set, the listener will be invoked directly even
> if at time the listener is invoked, SM has been set. For example:
>
>
> LogManager.getLogManager().addConfigurationListener(...);
> ...
> System.setSecurityManager(...);
> ...
> // then somewhere in privileged context...
> LogManager.getLogManager().readConfiguration(...);
>
>
> Wouldn't it be cleaner to evaluate SM presence in the lambda wrapper
> which would always be constructed, like that:
>
>
> public LogManager addConfigurationListener(Runnable listener) {
> final Runnable r = Objects.requireNonNull(listener);
> checkPermission();
> final AccessControlContext acc = AccessController.getContext();
> final Runnable pr = () -> {
> if (System.getSecurityManager() == null) {
> r.run();
> } else {
> AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
> r.run();
> return null;
> }, acc);
> }
> };
> // Will do nothing if already registered.
> listeners.putIfAbsent(r, pr);
> return this;
> }
>
>
> Regards, Peter
>
More information about the core-libs-dev
mailing list