Brice Figureau created JRUBY-6347: ------------------------------------- Summary: Error when creating X509 Request from PEM generated by MRI 1.8.7 and Puppet Key: JRUBY-6347 URL: https://jira.codehaus.org/browse/JRUBY-6347 Project: JRuby Issue Type: Bug Components: OpenSSL Affects Versions: JRuby-OSSL 0.7.4 Environment: mac osx 10.6, jruby HEAD, jruby-ossl 0.7.4, Puppet 2.7.9 Reporter: Brice Figureau Priority: Minor Attachments: 0001-Fix-PEM-format-parsing-of-CSR.patch, attr.rb
While trying to run Puppet under JRuby on a blank installation (so that Puppet will create CSR with attributes), I found that it fails when trying to reload an X509 Request from a PEM file created earlier (through JRuby or MRI). Here is the error: {code} Request.java:143:in `_initialize': java.lang.ClassCastException: org.bouncycastle.asn1.DERSequence cannot be cast to org.bouncycastle.asn1.DERSet from Request$INVOKER$i$0$0$_initialize.gen:65535:in `call' from DynamicMethod.java:216:in `call' from CachingCallSite.java:176:in `callBlock' from CachingCallSite.java:182:in `call' from RubyClass.java:817:in `newInstance' from RubyClass$INVOKER$i$newInstance.gen:65535:in `call' from JavaMethod.java:273:in `call' from CachingCallSite.java:312:in `cacheAndCall' from CachingCallSite.java:169:in `call' from CallOneArgNode.java:57:in `interpret' from InstAsgnNode.java:95:in `interpret' from NewlineNode.java:104:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:190:in `call' from DefaultMethod.java:199:in `call' from CachingCallSite.java:312:in `cacheAndCall' from CachingCallSite.java:169:in `call' from CallOneArgNode.java:57:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:190:in `call' from DefaultMethod.java:199:in `call' from CachingCallSite.java:312:in `cacheAndCall' from CachingCallSite.java:169:in `call' from CallOneArgNode.java:57:in `interpret' from LocalAsgnNode.java:123:in `interpret' from AndNode.java:95:in `interpret' from IfNode.java:111:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from RescueNode.java:216:in `executeBody' from RescueNode.java:120:in `interpretWithJavaExceptions' from RescueNode.java:110:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:190:in `call' from DefaultMethod.java:199:in `call' from CachingCallSite.java:312:in `cacheAndCall' from CachingCallSite.java:169:in `call' from FCallOneArgNode.java:36:in `interpret' from LocalAsgnNode.java:123:in `interpret' from IfNode.java:111:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:190:in `call' from DefaultMethod.java:199:in `call' from CachingCallSite.java:312:in `cacheAndCall' from CachingCallSite.java:169:in `call' from CallOneArgNode.java:57:in `interpret' from LocalAsgnNode.java:123:in `interpret' from IfNode.java:111:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from IfNode.java:119:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:233:in `call' from DefaultMethod.java:215:in `call' from CachingCallSite.java:332:in `cacheAndCall' from CachingCallSite.java:203:in `call' from CallTwoArgNode.java:59:in `interpret' from NewlineNode.java:104:in `interpret' from IfNode.java:117:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:147:in `call' from DefaultMethod.java:183:in `call' from CachingCallSite.java:292:in `cacheAndCall' from CachingCallSite.java:135:in `call' from CallNoArgNode.java:63:in `interpret' from IfNode.java:119:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:147:in `call' from DefaultMethod.java:183:in `call' from CachingCallSite.java:292:in `cacheAndCall' from CachingCallSite.java:135:in `call' from CallNoArgNode.java:63:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:147:in `call' from DefaultMethod.java:183:in `call' from CachingCallSite.java:292:in `cacheAndCall' from CachingCallSite.java:135:in `call' from VCallNode.java:86:in `interpret' from NewlineNode.java:104:in `interpret' from IfNode.java:119:in `interpret' from NewlineNode.java:104:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:147:in `call' from DefaultMethod.java:183:in `call' from CachingCallSite.java:292:in `cacheAndCall' from CachingCallSite.java:135:in `call' from VCallNode.java:86:in `interpret' from NewlineNode.java:104:in `interpret' from ASTInterpreter.java:112:in `INTERPRET_BLOCK' from InterpretedBlock.java:374:in `evalBlockBody' from InterpretedBlock.java:295:in `yield' from InterpretedBlock.java:229:in `yieldSpecific' from Block.java:99:in `yieldSpecific' from ZYieldNode.java:25:in `interpret' from LocalAsgnNode.java:123:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:212:in `call' from DefaultMethod.java:207:in `call' from CachingCallSite.java:322:in `cacheAndCall' from CachingCallSite.java:178:in `callBlock' from CachingCallSite.java:187:in `callIter' from FCallOneArgBlockNode.java:34:in `interpret' from NewlineNode.java:104:in `interpret' from ASTInterpreter.java:112:in `INTERPRET_BLOCK' from InterpretedBlock.java:374:in `evalBlockBody' from InterpretedBlock.java:295:in `yield' from InterpretedBlock.java:229:in `yieldSpecific' from Block.java:99:in `yieldSpecific' from ZYieldNode.java:25:in `interpret' from NewlineNode.java:104:in `interpret' from RescueNode.java:216:in `executeBody' from RescueNode.java:120:in `interpretWithJavaExceptions' from RescueNode.java:110:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:212:in `call' from DefaultMethod.java:207:in `call' from CachingCallSite.java:322:in `cacheAndCall' from CachingCallSite.java:178:in `callBlock' from CachingCallSite.java:187:in `callIter' from FCallOneArgBlockNode.java:34:in `interpret' from NewlineNode.java:104:in `interpret' from BlockNode.java:71:in `interpret' from ASTInterpreter.java:75:in `INTERPRET_METHOD' from InterpretedMethod.java:147:in `call' from DefaultMethod.java:183:in `call' from CachingCallSite.java:292:in `cacheAndCall' from CachingCallSite.java:135:in `call' from sbin/puppetmasterd:4:in `__file__' from sbin/puppetmasterd:-1:in `load' from Ruby.java:732:in `runScript' from Ruby.java:725:in `runScript' from Ruby.java:632:in `runNormally' from Ruby.java:481:in `runFromMain' from Main.java:343:in `doRunFromMain' from Main.java:255:in `internalRun' from Main.java:221:in `run' from Main.java:205:in `run' from Main.java:185:in `main' {code} This can be triggered by the attached unit test. The tests fails under jruby-ossl 0.7.4 but works fine under MRI 1.8.7. This happens when parsing the X509 Attributes which are not formatted as the JRuby OSSL Request needs. Apparently Jruby-ossl needs attributes formatted as: SET SET SEQUENCE But MRI generated attributes are of the format: SET SEQUENCE SEQUENCE I've included a trivial patch that fixes the problem. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email