Skip to content

Upgrades to versions >= 16.1.1 do not apply the ScriptingService configuration introduced in 16.1.1 (#1034) #1103

Description

@FedericoBrignola

Describe the bug
Commit #1034 introduced a new script type that is not added to the configuration data store during the upgrade process.
As a result, instances upgraded to OpenAM 16.1.1 and above are left in an inconsistent state.

To Reproduce
Steps to reproduce the behavior:

  1. Start a new OpenDJ instance:
podman run --rm -ti -p 1389:1389 -e 'ADD_BASE_ENTRY=--addBaseEntry' -e 'BASE_DN=dc=openam,dc=openidentityplatform,dc=org' opendj:latest
  1. Install OpenAM 16.0.6 using the new OpenDJ instance:
    • Host: host.containers.internal
    • Port: 1389
    • Password: password
  2. Upgrade the installation to OpenAM 16.1.1
    • The upgrade process completes successfully and reports no errors.
  3. Navigate to Configure → Global Services.
    The page is empty and the following API call returns a 500 Internal Server Error:
    http://localhost:8080/openam/json/global-config/services?_action=nextdescendents
    See the stack trace below.

Expected behavior
The upgrade process should add the new script configuration under ou=ScriptingService, resulting in the same configuration structure as a fresh OpenAM 16.1.1 installation.

Screenshots
ScriptingService configuration of a new OpenAM 16.0.6 installation (remains unchanged after upgrading to 16.1.1):
Image

ScriptingService configuration of a new OpenAM 16.1.1 installation. (Note the additional script configuration):
Image

Additional context
Stack trace from debug/CoreSystem

ERROR: A runtime exception occurred during the CREST request handling
java.lang.IllegalStateException: Exception from invocation expected to be handled by promise
	at org.forgerock.json.resource.AnnotatedMethod.invoke(AnnotatedMethod.java:100)
	at org.forgerock.json.resource.AnnotatedMethod.invoke(AnnotatedMethod.java:64)
	at org.forgerock.json.resource.AnnotatedSingletonHandler.handleRead(AnnotatedSingletonHandler.java:63)
	at org.forgerock.json.resource.Router.handleRead(Router.java:328)
	at org.forgerock.json.resource.FilterChain$Cursor.handleRead(FilterChain.java:113)
	at org.forgerock.authz.filter.crest.AuthorizationFilters$AuthorizationFilter$6.apply(AuthorizationFilters.java:378)
	at org.forgerock.authz.filter.crest.AuthorizationFilters$AuthorizationFilter$6.apply(AuthorizationFilters.java:374)
	at org.forgerock.util.promise.Promises$CompletedPromise.thenAsync(Promises.java:255)
	at org.forgerock.util.promise.Promises$CompletedPromise.thenAsync(Promises.java:244)
	at org.forgerock.util.promise.Promises$CompletedPromise.thenAsync(Promises.java:223)
	at org.forgerock.authz.filter.crest.AuthorizationFilters$AuthorizationFilter.filterRead(AuthorizationFilters.java:374)
	at org.forgerock.json.resource.FilterChain$Cursor.handleRead(FilterChain.java:111)
	at org.forgerock.json.resource.FilterChain.handleRead(FilterChain.java:260)
	at org.forgerock.json.resource.Router.handleRead(Router.java:328)
	at org.forgerock.openam.core.rest.sms.tree.SmsRouteTree.handleRead(SmsRouteTree.java:400)
	at org.forgerock.openam.core.rest.sms.tree.SmsRouteTree.getSingletonInstance(SmsRouteTree.java:350)
	at org.forgerock.openam.core.rest.sms.tree.SmsRouteTree.readInstances(SmsRouteTree.java:340)
	at org.forgerock.openam.core.rest.sms.tree.SmsRouteTree.handleAction(SmsRouteTree.java:269)
	at org.forgerock.json.resource.Router.handleAction(Router.java:245)
	at org.forgerock.openam.core.rest.sms.tree.SmsRouteTree.handleAction(SmsRouteTree.java:300)
	at org.forgerock.openam.core.rest.sms.SmsRequestHandler.handleAction(SmsRequestHandler.java:648)
	at org.forgerock.json.resource.Router.handleAction(Router.java:245)
	at org.forgerock.json.resource.FilterChain$Cursor.handleAction(FilterChain.java:63)
	at org.forgerock.openam.rest.fluent.AuditFilter.filterAction(AuditFilter.java:88)
	at org.forgerock.openam.rest.fluent.AuditFilterWrapper.filterAction(AuditFilterWrapper.java:60)
	at org.forgerock.json.resource.FilterChain$Cursor.handleAction(FilterChain.java:61)
	at org.forgerock.openam.rest.fluent.CrestLoggingFilter.filterAction(CrestLoggingFilter.java:75)
	at org.forgerock.json.resource.FilterChain$Cursor.handleAction(FilterChain.java:61)
	at org.forgerock.openam.rest.ContextFilter.filterAction(ContextFilter.java:58)
	at org.forgerock.json.resource.FilterChain$Cursor.handleAction(FilterChain.java:61)
	at org.forgerock.openam.rest.AuthenticationEnforcer.filterAction(AuthenticationEnforcer.java:137)
	at org.forgerock.json.resource.FilterChain$Cursor.handleAction(FilterChain.java:61)
	at org.forgerock.json.resource.FilterChain.handleAction(FilterChain.java:230)
	at org.forgerock.json.resource.InternalConnection.actionAsync(InternalConnection.java:37)
	at org.forgerock.json.resource.http.RequestRunner.visitActionRequest(RequestRunner.java:149)
	at org.forgerock.json.resource.http.RequestRunner.visitActionRequest(RequestRunner.java:95)
	at org.forgerock.json.resource.Requests$ActionRequestImpl.accept(Requests.java:185)
	at org.forgerock.json.resource.http.RequestRunner.handleResult(RequestRunner.java:141)
	at org.forgerock.json.resource.http.HttpAdapter$1.apply(HttpAdapter.java:711)
	at org.forgerock.json.resource.http.HttpAdapter$1.apply(HttpAdapter.java:708)
	at org.forgerock.util.promise.Promises$CompletedPromise.thenAsync(Promises.java:255)
	at org.forgerock.util.promise.Promises$CompletedPromise.thenAsync(Promises.java:244)
	at org.forgerock.json.resource.http.HttpAdapter.doRequest(HttpAdapter.java:708)
	at org.forgerock.json.resource.http.HttpAdapter.doAction(HttpAdapter.java:612)
	at org.forgerock.json.resource.http.HttpAdapter.handle(HttpAdapter.java:276)
	at org.forgerock.http.handler.Handlers$HandlerDescribableAsDescribableHandler.handle(Handlers.java:154)
	at org.forgerock.http.filter.OptionsFilter.filter(OptionsFilter.java:77)
	at org.forgerock.http.handler.Handlers$1.handle(Handlers.java:61)
	at org.forgerock.http.routing.Router.handle(Router.java:100)
	at org.forgerock.http.routing.Router.handle(Router.java:100)
	at org.forgerock.http.routing.ResourceApiVersionRoutingFilter.filter(ResourceApiVersionRoutingFilter.java:64)
	at org.forgerock.http.handler.Handlers$1.handle(Handlers.java:61)
	at org.forgerock.caf.authentication.framework.AuthenticationFramework.grantAccess(AuthenticationFramework.java:220)
	at org.forgerock.caf.authentication.framework.AuthenticationFramework$3.apply(AuthenticationFramework.java:212)
	at org.forgerock.caf.authentication.framework.AuthenticationFramework$3.apply(AuthenticationFramework.java:205)
	at org.forgerock.util.promise.Promises$CompletedPromise.thenAsync(Promises.java:255)
	at org.forgerock.util.promise.Promises$CompletedPromise.thenAsync(Promises.java:244)
	at org.forgerock.caf.authentication.framework.AuthenticationFramework.validateRequest(AuthenticationFramework.java:170)
	at org.forgerock.caf.authentication.framework.AuthenticationFramework$1.apply(AuthenticationFramework.java:155)
	at org.forgerock.caf.authentication.framework.AuthenticationFramework$1.apply(AuthenticationFramework.java:152)
	at org.forgerock.util.promise.PromiseImpl$7.handleStateChange(PromiseImpl.java:485)
	at org.forgerock.util.promise.PromiseImpl.handleCompletion(PromiseImpl.java:567)
	at org.forgerock.util.promise.PromiseImpl.addOrFireListener(PromiseImpl.java:555)
	at org.forgerock.util.promise.PromiseImpl.thenAsync(PromiseImpl.java:477)
	at org.forgerock.util.promise.PromiseImpl.thenAsync(PromiseImpl.java:468)
	at org.forgerock.caf.authentication.framework.AuthenticationFramework.processMessage(AuthenticationFramework.java:147)
	at org.forgerock.caf.authentication.framework.AuthenticationFilter.filter(AuthenticationFilter.java:97)
	at org.forgerock.http.handler.Handlers$1.handle(Handlers.java:61)
	at org.forgerock.openam.http.GuiceHandler.handle(GuiceHandler.java:59)
	at org.forgerock.openam.http.HttpRoute$6.handle(HttpRoute.java:215)
	at org.forgerock.http.routing.Router.handle(Router.java:100)
	at org.forgerock.http.swagger.OpenApiRequestFilter.filter(OpenApiRequestFilter.java:69)
	at org.forgerock.http.handler.Handlers$1.handle(Handlers.java:61)
	at org.forgerock.openam.http.ApiDescriptorFilter.filter(ApiDescriptorFilter.java:122)
	at org.forgerock.http.handler.Handlers$1.handle(Handlers.java:61)
	at org.forgerock.openam.http.OpenAMHttpApplication$1.filter(OpenAMHttpApplication.java:71)
	at org.forgerock.http.handler.Handlers$1.handle(Handlers.java:61)
	at org.forgerock.http.filter.TransactionIdInboundFilter.filter(TransactionIdInboundFilter.java:60)
	at org.forgerock.http.handler.Handlers$1.handle(Handlers.java:61)
	at org.forgerock.http.servlet.HttpFrameworkServlet.service(HttpFrameworkServlet.java:255)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:197)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:57)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)
	at org.forgerock.openam.cors.CORSFilter.doFilter(CORSFilter.java:65)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)
	at org.forgerock.openam.validation.ResponseValidationFilter.doFilter(ResponseValidationFilter.java:45)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)
	at org.forgerock.openam.headers.SetHeadersFilter.doFilter(SetHeadersFilter.java:87)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)
	at com.sun.identity.setup.AMSetupFilter.doFilter(AMSetupFilter.java:112)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)
	at org.forgerock.openam.audit.context.AuditContextFilter.doFilter(AuditContextFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:88)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:535)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:86)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:782)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:71)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:348)
	at org.apache.coyote.http2.StreamProcessor.service(StreamProcessor.java:476)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:71)
	at org.apache.coyote.http2.StreamProcessor.process(StreamProcessor.java:102)
	at org.apache.coyote.http2.StreamRunnable.run(StreamRunnable.java:35)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:976)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:494)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:80)
	at java.base/java.lang.Thread.run(Thread.java:1474)
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119)
	at java.base/java.lang.reflect.Method.invoke(Method.java:565)
	at org.forgerock.json.resource.AnnotatedMethod.invoke(AnnotatedMethod.java:96)
	... 116 more
Caused by: org.forgerock.json.JsonException: Unable to validate attributes
	at org.forgerock.openam.core.rest.sms.SmsJsonConverter.toJson(SmsJsonConverter.java:199)
	at org.forgerock.openam.core.rest.sms.SmsJsonConverter.toJson(SmsJsonConverter.java:168)
	at org.forgerock.openam.core.rest.sms.SmsJsonConverter.toJson(SmsJsonConverter.java:142)
	at org.forgerock.openam.core.rest.sms.SmsGlobalSingletonProvider.addOrganisationAttributes(SmsGlobalSingletonProvider.java:146)
	at org.forgerock.openam.core.rest.sms.SmsResourceProvider.getJsonValue(SmsResourceProvider.java:452)
	at org.forgerock.openam.core.rest.sms.SmsResourceProvider.getJsonValue(SmsResourceProvider.java:440)
	at org.forgerock.openam.core.rest.sms.SmsSingletonProvider.handleRead(SmsSingletonProvider.java:153)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	... 118 more
Caused by: Message:Data validation failed for the attribute, forgerock-oauth2-provider-access-token-modification-script

	at com.sun.identity.sm.AttributeValidator.validate(AttributeValidator.java:410)
	at com.sun.identity.sm.AttributeValidator.validate(AttributeValidator.java:372)
	at com.sun.identity.sm.ServiceSchemaImpl.validateAttrValues(ServiceSchemaImpl.java:594)
	at com.sun.identity.sm.ServiceSchemaImpl.validateAttributes(ServiceSchemaImpl.java:345)
	at com.sun.identity.sm.ServiceSchemaImpl.validateAttributes(ServiceSchemaImpl.java:314)
	at com.sun.identity.sm.ServiceSchema.validateAttributes(ServiceSchema.java:749)
	at org.forgerock.openam.core.rest.sms.SmsJsonConverter.toJson(SmsJsonConverter.java:192)
	... 125 more

Vote to raise the priority 🖐️

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions