Details
-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
2.4.0
-
None
-
Running on Docker: tier/grouper:2.4.0-a64-u38-w6-p6-20190625-rc1
Description
We found an issue with the PSPNG when trying to use a subject attribute to build the userSearchFilter. It appears that a GrouperSession isn't running/available when the JEXL expression is evaluated causing the subject.getAttributeValue method to fail.
Config:
changeLog.consumer.pspng_activedirectory.userSearchFilter = sAMAccountName=${subject.getAttributeValue("umbcprimaryaccountuid", false)}
Exception:
grouper-ui;grouper_error.log;;;2019-06-26 16:26:39,687: [TSUserFetcher-pspng_activedirectory-full-1] TRACE Provisioner.evaluateJexlExpression(664) - - Evaluating UserSearchFilter Jexl expression: sAMAccountName=${subject.getAttributeValue("umbcprimaryaccountuid", false)}
grouper-ui;grouper_error.log;;;2019-06-26 16:26:39,698: [TSUserFetcher-pspng_activedirectory-full-1] ERROR Provisioner.evaluateJexlExpression(746) - - Jexl Expression UserSearchFilter 'sAMAccountName=${subject.getAttributeValue("umbcprimaryaccountuid", false)}' could not be evaluated for subject ''LG77083'/'person'/'ldap'/null' and group 'null/null' which used variableMap '{userSearchBaseDn=ou=umbcUsers,DC=ad,DC=umbc,DC=edu, provisionerType=LdapGroupProvisioner, groupCreationBaseDn=CN=Grouper,DC=ad,DC=umbc,DC=edu, utils=edu.internet2.middleware.grouper.pspng.PspJexlUtils@42dbb42e, subject='LG77083'/'person'/'ldap', provisionerName=pspng_activedirectory, groupSearchBaseDn=CN=Grouper,DC=ad,DC=umbc,DC=edu}'
java.lang.RuntimeException: Error substituting string: '${subject.getAttributeValue("umbcprimaryaccountuid", false)}'
at edu.internet2.middleware.grouper.util.GrouperUtil.substituteExpressionLanguage(GrouperUtil.java:9483)
at edu.internet2.middleware.grouper.pspng.Provisioner.evaluateJexlExpression(Provisioner.java:702)
at edu.internet2.middleware.grouper.pspng.LdapProvisioner.getUserLdapFilter(LdapProvisioner.java:283)
at edu.internet2.middleware.grouper.pspng.LdapProvisioner.fetchTargetSystemUsers(LdapProvisioner.java:211)
at edu.internet2.middleware.grouper.pspng.Provisioner$2.call(Provisioner.java:847)
at edu.internet2.middleware.grouper.pspng.Provisioner$2.call(Provisioner.java:841)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.commons.jexl2.JexlException: edu.internet2.middleware.grouper.util.GrouperUtil.substituteExpressionLanguage@9428![8,57]: 'subject.getAttributeValue('umbcprimaryaccountuid', false);' method invocation error
at org.apache.commons.jexl2.Interpreter.call(Interpreter.java:1076)
at org.apache.commons.jexl2.Interpreter.visit(Interpreter.java:1100)
at org.apache.commons.jexl2.parser.ASTMethodNode.jjtAccept(ASTMethodNode.java:18)
at org.apache.commons.jexl2.Interpreter.visit(Interpreter.java:1317)
at org.apache.commons.jexl2.parser.ASTReference.jjtAccept(ASTReference.java:18)
at org.apache.commons.jexl2.Interpreter.interpret(Interpreter.java:232)
at org.apache.commons.jexl2.ExpressionImpl.evaluate(ExpressionImpl.java:65)
at edu.internet2.middleware.grouper.util.GrouperUtil.substituteExpressionLanguage(GrouperUtil.java:9434)
... 9 more
Caused by: java.lang.IllegalStateException: There is no open GrouperSession detected. Make sure to start a grouper session (e.g. GrouperSession.startRootSession() if you want to use a root session ) before calling this method
at edu.internet2.middleware.grouper.GrouperSession.staticGrouperSession(GrouperSession.java:1150)
at edu.internet2.middleware.grouper.GrouperSession.staticGrouperSession(GrouperSession.java:1098)
at edu.internet2.middleware.grouper.subj.SourcesXmlResolver.find(SourcesXmlResolver.java:316)
at edu.internet2.middleware.grouper.subj.CachingResolver.find(CachingResolver.java:143)
at edu.internet2.middleware.grouper.subj.ValidatingResolver.find(ValidatingResolver.java:105)
at edu.internet2.middleware.grouper.SubjectFinder.findByIdAndSource(SubjectFinder.java:504)
at edu.internet2.middleware.grouper.subj.LazySubject.getSubject(LazySubject.java:215)
at edu.internet2.middleware.grouper.subj.LazySubject.getAttributeValue(LazySubject.java:314)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.commons.jexl2.internal.MethodExecutor.execute(MethodExecutor.java:64)
at org.apache.commons.jexl2.internal.AbstractExecutor$Method.invoke(AbstractExecutor.java:327)
at org.apache.commons.jexl2.Interpreter.call(Interpreter.java:1068)
... 16 more