From 9d7938bcda4d0db47974b069c96a5d85d9d79953 Mon Sep 17 00:00:00 2001 From: Craig Perkins Date: Wed, 21 Aug 2024 16:11:56 -0400 Subject: [PATCH 1/2] Remove stashContext within AbstractApiAction Signed-off-by: Craig Perkins --- .../dlic/rest/api/AbstractApiAction.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/AbstractApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/AbstractApiAction.java index eb82bed908..42dfd1e1ab 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/AbstractApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/AbstractApiAction.java @@ -36,7 +36,6 @@ import org.opensearch.cluster.service.ClusterService; import org.opensearch.common.CheckedSupplier; import org.opensearch.common.action.ActionFuture; -import org.opensearch.common.util.concurrent.ThreadContext.StoredContext; import org.opensearch.common.xcontent.XContentType; import org.opensearch.core.action.ActionListener; import org.opensearch.core.common.Strings; @@ -47,7 +46,6 @@ import org.opensearch.core.xcontent.XContentHelper; import org.opensearch.index.engine.VersionConflictEngineException; import org.opensearch.rest.BaseRestHandler; -import org.opensearch.rest.BytesRestResponse; import org.opensearch.rest.RestChannel; import org.opensearch.rest.RestRequest; import org.opensearch.rest.RestRequest.Method; @@ -602,28 +600,15 @@ protected final RestChannelConsumer prepareRequest(RestRequest request, NodeClie securityApiDependencies.auditLog().logGrantedPrivileges(userName, SecurityRequestFactory.from(request)); } - final var originalUserAndRemoteAddress = Utils.userAndRemoteAddressFrom(threadPool.getThreadContext()); - final Object originalOrigin = threadPool.getThreadContext().getTransient(ConfigConstants.OPENDISTRO_SECURITY_ORIGIN); - return channel -> threadPool.generic().submit(() -> { - try (StoredContext ignore = threadPool.getThreadContext().stashContext()) { + try { threadPool.getThreadContext().putHeader(ConfigConstants.OPENDISTRO_SECURITY_CONF_REQUEST_HEADER, "true"); - threadPool.getThreadContext() - .putTransient(ConfigConstants.OPENDISTRO_SECURITY_USER, originalUserAndRemoteAddress.getLeft()); - threadPool.getThreadContext() - .putTransient(ConfigConstants.OPENDISTRO_SECURITY_REMOTE_ADDRESS, originalUserAndRemoteAddress.getRight()); - threadPool.getThreadContext().putTransient(ConfigConstants.OPENDISTRO_SECURITY_ORIGIN, originalOrigin); - requestHandlers = Optional.ofNullable(requestHandlers).orElseGet(requestHandlersBuilder::build); final var requestHandler = requestHandlers.getOrDefault(request.method(), methodNotImplementedHandler); requestHandler.handle(channel, request, client); - } catch (Exception e) { + } catch (IOException e) { LOGGER.error("Error processing request {}", request, e); - try { - channel.sendResponse(new BytesRestResponse(channel, e)); - } catch (IOException ioe) { - throw ExceptionsHelper.convertToOpenSearchException(e); - } + throw ExceptionsHelper.convertToOpenSearchException(e); } }); } From dbc0dd98c3fcaf3cc8dbc620b8c0d94690a6d14b Mon Sep 17 00:00:00 2001 From: Craig Perkins Date: Wed, 21 Aug 2024 16:51:16 -0400 Subject: [PATCH 2/2] Keep exception block Signed-off-by: Craig Perkins --- .../security/dlic/rest/api/AbstractApiAction.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/AbstractApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/AbstractApiAction.java index 42dfd1e1ab..bfa0f24313 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/AbstractApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/AbstractApiAction.java @@ -46,6 +46,7 @@ import org.opensearch.core.xcontent.XContentHelper; import org.opensearch.index.engine.VersionConflictEngineException; import org.opensearch.rest.BaseRestHandler; +import org.opensearch.rest.BytesRestResponse; import org.opensearch.rest.RestChannel; import org.opensearch.rest.RestRequest; import org.opensearch.rest.RestRequest.Method; @@ -603,12 +604,17 @@ protected final RestChannelConsumer prepareRequest(RestRequest request, NodeClie return channel -> threadPool.generic().submit(() -> { try { threadPool.getThreadContext().putHeader(ConfigConstants.OPENDISTRO_SECURITY_CONF_REQUEST_HEADER, "true"); + requestHandlers = Optional.ofNullable(requestHandlers).orElseGet(requestHandlersBuilder::build); final var requestHandler = requestHandlers.getOrDefault(request.method(), methodNotImplementedHandler); requestHandler.handle(channel, request, client); - } catch (IOException e) { + } catch (Exception e) { LOGGER.error("Error processing request {}", request, e); - throw ExceptionsHelper.convertToOpenSearchException(e); + try { + channel.sendResponse(new BytesRestResponse(channel, e)); + } catch (IOException ioe) { + throw ExceptionsHelper.convertToOpenSearchException(e); + } } }); }