Details
-
Type:
Bug
-
Status:
Resolved
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: JRuby-OSSL 0.7.4
-
Fix Version/s: JRuby-OSSL 0.7.6
-
Component/s: OpenSSL
-
Environment:mac osx 10.6, jruby HEAD, jruby-ossl 0.7.4, Puppet 2.7.9
-
Testcase included:yes
-
Patch Submitted:Yes
-
Number of attachments :
Description
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:
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'
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.