Uploaded image for project: 'Grouper'
  1. Grouper
  2. GRP-2473

PSPNG cannot parse Regex containing {}, while contained in ${}

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Minor
    • None
    • None
    • provisioning
    • None
    • Docker

    Description

      Encountered in grouper-loader.properties.  If a ${group.attribute} is called with additional commands that use regex, an issue occurs if the regex contains {,}.  

      stackoverflow post details the issue as well in general.

       

      Steps to reproduce:

      In your provisioner configuration of choice, replace groupCreationLdifTemplate with the following:

       

      changeLog.consumer.pspng_campusOrgLdap.groupCreationLdifTemplate = dn:${utils.bushyDn(group.name.replaceFirst("^path:to:(GOOD|BETTER|BEST|BESTER)","ref:$1").replaceFirst("^path:to:GOOD-[a-zA-Z]{0,16}-[0-9]{1,6}:ref","ref").replaceFirst("^path:to:GOOD-[a-zA-Z]{0,16}-[0-9]{1,6}:org:.*:([0-9A-Za-z].*)$","dept:$1"),"CN","OU")}||objectclass:group||description:${group.description}||displayName:${group.displayName.replace(group.parentStemName.toString()+":","")}||gidNumber:${group.idIndex}

       Which will result in something like:

      2019-11-22 15:28:28,295: [FullSyncer(pspng_GOODusOrgLdap)-Thread] ERROR Provisioner.evaluateJexlExpression(803) -  - Jexl Expression GroupTemplate 'dn:${utils.bushyDn(group.name.replaceFirst("^path:to:(GOOD|BETTER|BEST|BESTER)","ref:$1").replaceFirst("^path:to:ALRIGHT-[a-zA-Z]{0,16}-[0-9]{1,6}:ref","ref").replaceFirst("^path:to:ALRIGHT-[a-zA-Z]{0,16}-[0-9]{1,6}:org:.*:([0-9A-Za-z].*)$","dept:$1"),"CN","OU")}
      objectclass:group
      description:${group.description}
      displayName:${group.displayName.replace(group.parentStemName.toString()+":","")}
      gidNumber:${group.idIndex}' could not be evaluated for subject 'null/null' and group 'path:to:ALRIGHT-COMPSCI-12228:ref:ALRIGHT-COMPSCI-12228_StuWorker-systemOfRecord/#158224(Existing)/null' which used variableMap '{extension=ALRIGHT-COMPSCI-12228_StuWorker-systemOfRecord, displayName=path:to:ALRIGHT-COMPSCI-12228:ref:ALRIGHT-COMPSCI-12228_StuWorker-systemOfRecord, groupId=02befc33248d4915b47ca66ffb39e8c8, provisionerName=pspng_GOODusOrgLdap, description=ALRIGHT-COMPSCI-12228_StuWorker-systemOfRecord auto-created by grouperLoader, groupSearchBaseDn=ou=org,ou=Groups,dc=valGOODus,dc=uncg,dc=edu, groupAttributes={}, displayExtension=ALRIGHT-COMPSCI-12228_StuWorker-systemOfRecord, userSearchBaseDn=dc=valGOODus,dc=uncg,dc=edu, provisionerType=LdapGroupProvisioner, groupCreationBaseDn=ou=org,ou=Groups,dc=valGOODus,dc=uncg,dc=edu, utils=edu.internet2.middleware.grouper.pspng.PspJexlUtils@3c8108c3, stemAttributes={etc:pspng:provision_to=[pspng_GOODusOrgLdap]}, name=path:to:ALRIGHT-COMPSCI-12228:ref:ALRIGHT-COMPSCI-12228_StuWorker-systemOfRecord, idIndex=158224, group=Group[name=path:to:ALRIGHT-COMPSCI-12228:ref:ALRIGHT-COMPSCI-12228_StuWorker-systemOfRecord,uuid=02befc33248d4915b47ca66ffb39e8c8]}'
      java.lang.RuntimeException: Error substituting string: '${utils.bushyDn(group.name.replaceFirst("^path:to:(GOOD|BETTER|BEST|BESTER)","ref:$1").replaceFirst("^path:to:ALRIGHT-[a-zA-Z]{0,16}'
              at edu.internet2.middleware.grouper.util.GrouperUtil.substituteExpressionLanguage(GrouperUtil.java:9483)
              at edu.internet2.middleware.grouper.pspng.Provisioner.evaluateJexlExpression(Provisioner.java:759)
              at edu.internet2.middleware.grouper.pspng.LdapGroupProvisioner.getGroupLdifFromTemplate(LdapGroupProvisioner.java:431)
              at edu.internet2.middleware.grouper.pspng.LdapGroupProvisioner.createGroup(LdapGroupProvisioner.java:340)
              at edu.internet2.middleware.grouper.pspng.LdapGroupProvisioner.createGroup(LdapGroupProvisioner.java:42)
              at edu.internet2.middleware.grouper.pspng.Provisioner.prepareGroupCache(Provisioner.java:1037)
              at edu.internet2.middleware.grouper.pspng.Provisioner.startProvisioningBatch(Provisioner.java:648)
              at edu.internet2.middleware.grouper.pspng.FullSyncProvisioner.fullSyncGroup(FullSyncProvisioner.java:755)
              at edu.internet2.middleware.grouper.pspng.FullSyncProvisioner.processQueueItem(FullSyncProvisioner.java:456)
              at edu.internet2.middleware.grouper.pspng.FullSyncProvisioner.thread_manageFullSyncProcessing(FullSyncProvisioner.java:252)
              at edu.internet2.middleware.grouper.pspng.FullSyncProvisioner$1.run(FullSyncProvisioner.java:147)
              at java.lang.Thread.run(Thread.java:748)
      Caused by: org.apache.commons.jexl2.JexlException$Tokenization: edu.internet2.middleware.grouper.util.GrouperUtil.substituteExpressionLanguage@1:124 tokenization error near '... 0,16 ...'
              at org.apache.commons.jexl2.JexlEngine.parse(JexlEngine.java:1258)
              at org.apache.commons.jexl2.JexlEngine.createExpression(JexlEngine.java:435)
              at org.apache.commons.jexl2.JexlEngine.createExpression(JexlEngine.java:419)
              at edu.internet2.middleware.grouper.util.GrouperUtil.substituteExpressionLanguage(GrouperUtil.java:9428)
              ... 11 more
      Caused by: org.apache.commons.jexl2.parser.TokenMgrError: Lexical error at line 1, column 124.  Encountered: <EOF> after : "\"^path:to:ALRIGHT-[a-zA-Z]{0,16"
              at org.apache.commons.jexl2.parser.ParserTokenManager.getNextToken(ParserTokenManager.java:3300)
              at org.apache.commons.jexl2.parser.Parser.jj_ntk(Parser.java:3865)
              at org.apache.commons.jexl2.parser.Parser.Method(Parser.java:2021)
              at org.apache.commons.jexl2.parser.Parser.AnyMethod(Parser.java:2085)
              at org.apache.commons.jexl2.parser.Parser.DotReference(Parser.java:2279)
              at org.apache.commons.jexl2.parser.Parser.Reference(Parser.java:2344)
              at org.apache.commons.jexl2.parser.Parser.PrimaryExpression(Parser.java:2184)
              at org.apache.commons.jexl2.parser.Parser.UnaryExpression(Parser.java:1481)
              at org.apache.commons.jexl2.parser.Parser.MultiplicativeExpression(Parser.java:1269)
              at org.apache.commons.jexl2.parser.Parser.AdditiveExpression(Parser.java:1196)
              at org.apache.commons.jexl2.parser.Parser.RelationalExpression(Parser.java:991)
              at org.apache.commons.jexl2.parser.Parser.EqualityExpression(Parser.java:915)
              at org.apache.commons.jexl2.parser.Parser.AndExpression(Parser.java:873)
              at org.apache.commons.jexl2.parser.Parser.ExclusiveOrExpression(Parser.java:831)
              at org.apache.commons.jexl2.parser.Parser.InclusiveOrExpression(Parser.java:789)
              at org.apache.commons.jexl2.parser.Parser.ConditionalAndExpression(Parser.java:747)
              at org.apache.commons.jexl2.parser.Parser.ConditionalOrExpression(Parser.java:705)
              at org.apache.commons.jexl2.parser.Parser.ConditionalExpression(Parser.java:627)
              at org.apache.commons.jexl2.parser.Parser.Expression(Parser.java:450)
              at org.apache.commons.jexl2.parser.Parser.Method(Parser.java:2039)
              at org.apache.commons.jexl2.parser.Parser.AnyMethod(Parser.java:2085)
              at org.apache.commons.jexl2.parser.Parser.DotReference(Parser.java:2279)
              at org.apache.commons.jexl2.parser.Parser.Reference(Parser.java:2344)
              at org.apache.commons.jexl2.parser.Parser.PrimaryExpression(Parser.java:2184)
              at org.apache.commons.jexl2.parser.Parser.UnaryExpression(Parser.java:1481)
              at org.apache.commons.jexl2.parser.Parser.MultiplicativeExpression(Parser.java:1269)
              at org.apache.commons.jexl2.parser.Parser.AdditiveExpression(Parser.java:1196)
              at org.apache.commons.jexl2.parser.Parser.RelationalExpression(Parser.java:991)
              at org.apache.commons.jexl2.parser.Parser.EqualityExpression(Parser.java:915)
              at org.apache.commons.jexl2.parser.Parser.AndExpression(Parser.java:873)
              at org.apache.commons.jexl2.parser.Parser.ExclusiveOrExpression(Parser.java:831)
              at org.apache.commons.jexl2.parser.Parser.InclusiveOrExpression(Parser.java:789)
              at org.apache.commons.jexl2.parser.Parser.ConditionalAndExpression(Parser.java:747)
              at org.apache.commons.jexl2.parser.Parser.ConditionalOrExpression(Parser.java:705)
              at org.apache.commons.jexl2.parser.Parser.ConditionalExpression(Parser.java:627)
              at org.apache.commons.jexl2.parser.Parser.Expression(Parser.java:450)
              at org.apache.commons.jexl2.parser.Parser.ExpressionStatement(Parser.java:224)
              at org.apache.commons.jexl2.parser.Parser.Statement(Parser.java:140)
              at org.apache.commons.jexl2.parser.Parser.JexlScript(Parser.java:72)
              at org.apache.commons.jexl2.parser.Parser.parse(Parser.java:24)
              at org.apache.commons.jexl2.JexlEngine.parse(JexlEngine.java:1248)
              ... 14 more
      2019-11-22 15:28:28,296: [FullSyncer(pspng_GOODusOrgLdap)-Thread] ERROR FullSyncProvisioner.fullSyncGroup(775) -  - FullSyncer(pspng_GOODusOrgLdap): Problem doing full sync. Requeuing group path:to:ALRIGHT-COMPSCI-12228:ref:ALRIGHT-COMPSCI-12228_StuWorker-systemOfRecord/#158224(Existing)
      edu.internet2.middleware.grouper.pspng.PspException: Jexl evaluation failed: Error substituting string: '${utils.bushyDn(group.name.replaceFirst("^path:to:(GOOD|BETTER|BEST|BESTER)","ref:$1").replaceFirst("^path:to:ALRIGHT-[a-zA-Z]{0,16}'
              at edu.internet2.middleware.grouper.pspng.Provisioner.evaluateJexlExpression(Provisioner.java:808)
              at edu.internet2.middleware.grouper.pspng.LdapGroupProvisioner.getGroupLdifFromTemplate(LdapGroupProvisioner.java:431)
              at edu.internet2.middleware.grouper.pspng.LdapGroupProvisioner.createGroup(LdapGroupProvisioner.java:340)
              at edu.internet2.middleware.grouper.pspng.LdapGroupProvisioner.createGroup(LdapGroupProvisioner.java:42)
              at edu.internet2.middleware.grouper.pspng.Provisioner.prepareGroupCache(Provisioner.java:1037)
              at edu.internet2.middleware.grouper.pspng.Provisioner.startProvisioningBatch(Provisioner.java:648)
              at edu.internet2.middleware.grouper.pspng.FullSyncProvisioner.fullSyncGroup(FullSyncProvisioner.java:755)
              at edu.internet2.middleware.grouper.pspng.FullSyncProvisioner.processQueueItem(FullSyncProvisioner.java:456)
              at edu.internet2.middleware.grouper.pspng.FullSyncProvisioner.thread_manageFullSyncProcessing(FullSyncProvisioner.java:252)
              at edu.internet2.middleware.grouper.pspng.FullSyncProvisioner$1.run(FullSyncProvisioner.java:147)
              at java.lang.Thread.run(Thread.java:748)
      
      

      Attachments

        Activity

          People

            chris.hyzer@at.internet2.edu Chris Hyzer (upenn.edu)
            jeffrey.williams@at.internet2.edu Jeffrey Williams (uncg.edu)
            Chris Hyzer (upenn.edu)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: