File: C:/Ruby27-x64/share/doc/ruby/html/OpenSSL/Config.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>class OpenSSL::Config - RDoc Documentation</title>
<script type="text/javascript">
var rdoc_rel_prefix = "../";
var index_rel_prefix = "../";
</script>
<script src="../js/navigation.js" defer></script>
<script src="../js/search.js" defer></script>
<script src="../js/search_index.js" defer></script>
<script src="../js/searcher.js" defer></script>
<script src="../js/darkfish.js" defer></script>
<link href="../css/fonts.css" rel="stylesheet">
<link href="../css/rdoc.css" rel="stylesheet">
<body id="top" role="document" class="class">
<nav role="navigation">
<div id="project-navigation">
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
<h2>
<a href="../index.html" rel="home">Home</a>
</h2>
<div id="table-of-contents-navigation">
<a href="../table_of_contents.html#pages">Pages</a>
<a href="../table_of_contents.html#classes">Classes</a>
<a href="../table_of_contents.html#methods">Methods</a>
</div>
</div>
<div id="search-section" role="search" class="project-section initially-hidden">
<form action="#" method="get" accept-charset="utf-8">
<div id="search-field-wrapper">
<input id="search-field" role="combobox" aria-label="Search"
aria-autocomplete="list" aria-controls="search-results"
type="text" name="search" placeholder="Search" spellcheck="false"
title="Type to search, Up and Down to navigate, Enter to load">
</div>
<ul id="search-results" aria-label="Search Results"
aria-busy="false" aria-expanded="false"
aria-atomic="false" class="initially-hidden"></ul>
</form>
</div>
</div>
<div id="class-metadata">
<div id="parent-class-section" class="nav-section">
<h3>Parent</h3>
<p class="link"><a href="../Object.html">Object</a>
</div>
<div id="includes-section" class="nav-section">
<h3>Included Modules</h3>
<ul class="link-list">
<li><a class="include" href="../Enumerable.html">Enumerable</a>
</ul>
</div>
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
<h3>Methods</h3>
<ul class="link-list" role="directory">
<li ><a href="#method-c-clear_comments">::clear_comments</a>
<li ><a href="#method-c-extract_reference">::extract_reference</a>
<li ><a href="#method-c-get_definition">::get_definition</a>
<li ><a href="#method-c-get_line">::get_line</a>
<li ><a href="#method-c-new">::new</a>
<li ><a href="#method-c-parse">::parse</a>
<li ><a href="#method-c-parse_config">::parse_config</a>
<li ><a href="#method-c-parse_config_lines">::parse_config_lines</a>
<li ><a href="#method-c-unescape_value">::unescape_value</a>
<li ><a href="#method-i-5B-5D">#[]</a>
<li ><a href="#method-i-5B-5D-3D">#[]=</a>
<li ><a href="#method-i-add_value">#add_value</a>
<li ><a href="#method-i-check_modify">#check_modify</a>
<li ><a href="#method-i-each">#each</a>
<li ><a href="#method-i-get_key_string">#get_key_string</a>
<li ><a href="#method-i-get_value">#get_value</a>
<li ><a href="#method-i-initialize_copy">#initialize_copy</a>
<li ><a href="#method-i-inspect">#inspect</a>
<li ><a href="#method-i-sections">#sections</a>
<li ><a href="#method-i-to_s">#to_s</a>
</ul>
</div>
</div>
</nav>
<main role="main" aria-labelledby="class-OpenSSL::Config">
<h1 id="class-OpenSSL::Config" class="class">
class OpenSSL::Config
</h1>
<section class="description">
<h1 id="class-OpenSSL::Config-label-OpenSSL-3A-3AConfig"><a href="Config.html"><code>OpenSSL::Config</code></a><span><a href="#class-OpenSSL::Config-label-OpenSSL-3A-3AConfig">¶</a> <a href="#top">↑</a></span></h1>
<p>Configuration for the openssl library.</p>
<p>Many system's installation of openssl library will depend on your system configuration. See the value of <a href="Config.html#DEFAULT_CONFIG_FILE"><code>OpenSSL::Config::DEFAULT_CONFIG_FILE</code></a> for the location of the file for your host.</p>
<p>See also <a href="http://www.openssl.org/docs/apps/config.html">www.openssl.org/docs/apps/config.html</a></p>
</section>
<section id="5Buntitled-5D" class="documentation-section">
<section class="constants-list">
<header>
<h3>Constants</h3>
</header>
<dl>
<dt id="DEFAULT_CONFIG_FILE">DEFAULT_CONFIG_FILE
<dd><p>The default system configuration file for openssl</p>
<dt id="ESCAPE_MAP">ESCAPE_MAP
<dd><p>escaped char map</p>
<dt id="QUOTE_REGEXP_DQ">QUOTE_REGEXP_DQ
<dd><p>escape with backslash and doubled dq</p>
<dt id="QUOTE_REGEXP_SQ">QUOTE_REGEXP_SQ
<dd><p>escape with backslash</p>
</dl>
</section>
<section id="public-class-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Class Methods</h3>
</header>
<div id="method-c-new" class="method-detail ">
<div class="method-heading">
<span class="method-name">new</span><span
class="method-args">(filename = nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Creates an instance of OpenSSL's configuration class.</p>
<p>This can be used in contexts like <a href="X509/ExtensionFactory.html#attribute-i-config"><code>OpenSSL::X509::ExtensionFactory.config=</code></a></p>
<p>If the optional <em>filename</em> parameter is provided, then it is read in and parsed via parse_config.</p>
<p>This can raise <a href="../IO.html"><code>IO</code></a> exceptions based on the access, or availability of the file. A <a href="ConfigError.html"><code>ConfigError</code></a> exception may be raised depending on the validity of the data being configured.</p>
<div class="method-source-code" id="new-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 265</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">filename</span> = <span class="ruby-keyword">nil</span>)
<span class="ruby-ivar">@data</span> = {}
<span class="ruby-keyword">if</span> <span class="ruby-identifier">filename</span>
<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">filename</span>.<span class="ruby-identifier">to_s</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
<span class="ruby-constant">Config</span>.<span class="ruby-identifier">parse_config</span>(<span class="ruby-identifier">file</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">section</span>, <span class="ruby-identifier">hash</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">self</span>[<span class="ruby-identifier">section</span>] = <span class="ruby-identifier">hash</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-parse" class="method-detail ">
<div class="method-heading">
<span class="method-name">parse</span><span
class="method-args">(string)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Parses a given <em>string</em> as a blob that contains configuration for <a href="../OpenSSL.html"><code>OpenSSL</code></a>.</p>
<p>If the source of the <a href="../IO.html"><code>IO</code></a> is a file, then consider using parse_config.</p>
<div class="method-source-code" id="parse-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 37</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">parse</span>(<span class="ruby-identifier">string</span>)
<span class="ruby-identifier">c</span> = <span class="ruby-identifier">new</span>()
<span class="ruby-identifier">parse_config</span>(<span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">string</span>)).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">section</span>, <span class="ruby-identifier">hash</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">c</span>[<span class="ruby-identifier">section</span>] = <span class="ruby-identifier">hash</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">c</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-parse_config" class="method-detail ">
<div class="method-heading">
<span class="method-name">parse_config</span><span
class="method-args">(io)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Parses the configuration data read from <em>io</em>, see also parse.</p>
<p>Raises a <a href="ConfigError.html"><code>ConfigError</code></a> on invalid configuration data.</p>
<div class="method-source-code" id="parse_config-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 53</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">parse_config</span>(<span class="ruby-identifier">io</span>)
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">parse_config_lines</span>(<span class="ruby-identifier">io</span>)
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">ConfigError</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">e</span>
<span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-node">"error in line #{io.lineno}: "</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>)
<span class="ruby-identifier">raise</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
<section id="private-class-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Private Class Methods</h3>
</header>
<div id="method-c-clear_comments" class="method-detail ">
<div class="method-heading">
<span class="method-name">clear_comments</span><span
class="method-args">(line)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="clear_comments-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 193</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clear_comments</span>(<span class="ruby-identifier">line</span>)
<span class="ruby-comment"># FCOMMENT</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp">/\A([\t\n\f ]*);.*\z/</span>)
<span class="ruby-keyword">return</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># COMMENT</span>
<span class="ruby-identifier">scanned</span> = []
<span class="ruby-keyword">while</span> <span class="ruby-identifier">m</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp">/[#'"\\]/</span>)
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">pre_match</span>
<span class="ruby-identifier">c</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>]
<span class="ruby-identifier">line</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">post_match</span>
<span class="ruby-keyword">case</span> <span class="ruby-identifier">c</span>
<span class="ruby-keyword">when</span> <span class="ruby-string">'#'</span>
<span class="ruby-identifier">line</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">when</span> <span class="ruby-string">"'"</span>, <span class="ruby-string">'"'</span>
<span class="ruby-identifier">regexp</span> = (<span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-string">"'"</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">QUOTE_REGEXP_SQ</span> <span class="ruby-operator">:</span> <span class="ruby-constant">QUOTE_REGEXP_DQ</span>
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">regexp</span>)
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>]
<span class="ruby-identifier">line</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">post_match</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">line</span>
<span class="ruby-identifier">line</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-string">"\\"</span>
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">c</span>
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">0</span>, <span class="ruby-value">1</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-string">'must not reaced'</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">line</span>
<span class="ruby-identifier">scanned</span>.<span class="ruby-identifier">join</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-extract_reference" class="method-detail ">
<div class="method-heading">
<span class="method-name">extract_reference</span><span
class="method-args">(value)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="extract_reference-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 178</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">extract_reference</span>(<span class="ruby-identifier">value</span>)
<span class="ruby-identifier">rest</span> = <span class="ruby-string">''</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp">/\(([^)]*)\)|\{([^}]*)\}/</span>)
<span class="ruby-identifier">value</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">2</span>]
<span class="ruby-identifier">rest</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">post_match</span>
<span class="ruby-keyword">elsif</span> [<span class="ruby-value">?(</span>, <span class="ruby-value">?{</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">value</span>[<span class="ruby-value">0</span>])
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ConfigError</span>, <span class="ruby-string">"no close brace"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp">/[a-zA-Z0-9_]*(?:::[a-zA-Z0-9_]*)?/</span>)
<span class="ruby-keyword">return</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">m</span>.<span class="ruby-identifier">post_match</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-get_definition" class="method-detail ">
<div class="method-heading">
<span class="method-name">get_definition</span><span
class="method-args">(io_stack)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="get_definition-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 230</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_definition</span>(<span class="ruby-identifier">io_stack</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">line</span> = <span class="ruby-identifier">get_line</span>(<span class="ruby-identifier">io_stack</span>)
<span class="ruby-keyword">while</span> <span class="ruby-regexp">/[^\\]\\\z/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">line</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">extra</span> = <span class="ruby-identifier">get_line</span>(<span class="ruby-identifier">io_stack</span>)
<span class="ruby-identifier">line</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">extra</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-get_line" class="method-detail ">
<div class="method-heading">
<span class="method-name">get_line</span><span
class="method-args">(io_stack)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="get_line-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 243</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_line</span>(<span class="ruby-identifier">io_stack</span>)
<span class="ruby-keyword">while</span> <span class="ruby-identifier">io</span> = <span class="ruby-identifier">io_stack</span>.<span class="ruby-identifier">last</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">line</span> = <span class="ruby-identifier">io</span>.<span class="ruby-identifier">gets</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/[\r\n]*/</span>, <span class="ruby-string">''</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">io_stack</span>.<span class="ruby-identifier">pop</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-parse_config_lines" class="method-detail ">
<div class="method-heading">
<span class="method-name">parse_config_lines</span><span
class="method-args">(io)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="parse_config_lines-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 77</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">parse_config_lines</span>(<span class="ruby-identifier">io</span>)
<span class="ruby-identifier">section</span> = <span class="ruby-string">'default'</span>
<span class="ruby-identifier">data</span> = {<span class="ruby-identifier">section</span> <span class="ruby-operator">=></span> {}}
<span class="ruby-identifier">io_stack</span> = [<span class="ruby-identifier">io</span>]
<span class="ruby-keyword">while</span> <span class="ruby-identifier">definition</span> = <span class="ruby-identifier">get_definition</span>(<span class="ruby-identifier">io_stack</span>)
<span class="ruby-identifier">definition</span> = <span class="ruby-identifier">clear_comments</span>(<span class="ruby-identifier">definition</span>)
<span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">definition</span>.<span class="ruby-identifier">empty?</span>
<span class="ruby-keyword">case</span> <span class="ruby-identifier">definition</span>
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\A\[/</span>
<span class="ruby-keyword">if</span> <span class="ruby-regexp">/\[([^\]]*)\]/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">definition</span>
<span class="ruby-identifier">section</span> = <span class="ruby-node">$1</span>.<span class="ruby-identifier">strip</span>
<span class="ruby-identifier">data</span>[<span class="ruby-identifier">section</span>] <span class="ruby-operator">||=</span> {}
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ConfigError</span>, <span class="ruby-string">"missing close square bracket"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\A\.include (\s*=\s*)?(.+)\z/</span>
<span class="ruby-identifier">path</span> = <span class="ruby-node">$2</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">path</span>)
<span class="ruby-identifier">files</span> = <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">path</span>, <span class="ruby-string">"*.{cnf,conf}"</span>), <span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">FNM_EXTGLOB</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">files</span> = [<span class="ruby-identifier">path</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">files</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">filename</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">io_stack</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">StringIO</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">filename</span>))
<span class="ruby-keyword">rescue</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ConfigError</span>, <span class="ruby-string">"could not include file '%s'"</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">filename</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-regexp">/\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/</span>
<span class="ruby-keyword">if</span> <span class="ruby-node">$2</span>
<span class="ruby-identifier">section</span> = <span class="ruby-node">$1</span>
<span class="ruby-identifier">key</span> = <span class="ruby-node">$2</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">key</span> = <span class="ruby-node">$1</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">value</span> = <span class="ruby-identifier">unescape_value</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">section</span>, <span class="ruby-node">$3</span>)
(<span class="ruby-identifier">data</span>[<span class="ruby-identifier">section</span>] <span class="ruby-operator">||=</span> {})[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">strip</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ConfigError</span>, <span class="ruby-string">"missing equal sign"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">data</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-c-unescape_value" class="method-detail ">
<div class="method-heading">
<span class="method-name">unescape_value</span><span
class="method-args">(data, section, value)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="unescape_value-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 135</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">unescape_value</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">section</span>, <span class="ruby-identifier">value</span>)
<span class="ruby-identifier">scanned</span> = []
<span class="ruby-keyword">while</span> <span class="ruby-identifier">m</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp">/['"\\$]/</span>)
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">pre_match</span>
<span class="ruby-identifier">c</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>]
<span class="ruby-identifier">value</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">post_match</span>
<span class="ruby-keyword">case</span> <span class="ruby-identifier">c</span>
<span class="ruby-keyword">when</span> <span class="ruby-string">"'"</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">match</span>(<span class="ruby-constant">QUOTE_REGEXP_SQ</span>)
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\\(.)/</span>, <span class="ruby-string">'\\1'</span>)
<span class="ruby-identifier">value</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">post_match</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-string">'"'</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">m</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">match</span>(<span class="ruby-constant">QUOTE_REGEXP_DQ</span>)
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/""/</span>, <span class="ruby-string">''</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\\(.)/</span>, <span class="ruby-string">'\\1'</span>)
<span class="ruby-identifier">value</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">post_match</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-string">"\\"</span>
<span class="ruby-identifier">c</span> = <span class="ruby-identifier">value</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">0</span>, <span class="ruby-value">1</span>)
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> (<span class="ruby-constant">ESCAPE_MAP</span>[<span class="ruby-identifier">c</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span>)
<span class="ruby-keyword">when</span> <span class="ruby-string">"$"</span>
<span class="ruby-identifier">ref</span>, <span class="ruby-identifier">value</span> = <span class="ruby-identifier">extract_reference</span>(<span class="ruby-identifier">value</span>)
<span class="ruby-identifier">refsec</span> = <span class="ruby-identifier">section</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">index</span>(<span class="ruby-string">'::'</span>)
<span class="ruby-identifier">refsec</span>, <span class="ruby-identifier">ref</span> = <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">'::'</span>, <span class="ruby-value">2</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">v</span> = <span class="ruby-identifier">get_key_string</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">refsec</span>, <span class="ruby-identifier">ref</span>)
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">v</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ConfigError</span>, <span class="ruby-string">"variable has no value"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-string">'must not reaced'</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">scanned</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">value</span>
<span class="ruby-identifier">scanned</span>.<span class="ruby-identifier">join</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Instance Methods</h3>
</header>
<div id="method-i-5B-5D" class="method-detail ">
<div class="method-heading">
<span class="method-name">[]</span><span
class="method-args">(section)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Get a specific <em>section</em> from the current configuration</p>
<p>Given the following configurating file being loaded:</p>
<pre class="ruby"><span class="ruby-identifier">config</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">load</span>(<span class="ruby-string">'foo.cnf'</span>)
<span class="ruby-comment">#=> #<OpenSSL::Config sections=["default"]></span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-comment">#=> [ default ]</span>
<span class="ruby-comment"># foo=bar</span>
</pre>
<p>You can get a hash of the specific section like so:</p>
<pre class="ruby"><span class="ruby-identifier">config</span>[<span class="ruby-string">'default'</span>]
<span class="ruby-comment">#=> {"foo"=>"bar"}</span>
</pre>
<div class="method-source-code" id="5B-5D-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 359</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">[]</span>(<span class="ruby-identifier">section</span>)
<span class="ruby-ivar">@data</span>[<span class="ruby-identifier">section</span>] <span class="ruby-operator">||</span> {}
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-5B-5D-3D" class="method-detail ">
<div class="method-heading">
<span class="method-name">[]=</span><span
class="method-args">(section, pairs)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Sets a specific <em>section</em> name with a <a href="../Hash.html"><code>Hash</code></a> <em>pairs</em>.</p>
<p>Given the following configuration being created:</p>
<pre class="ruby"><span class="ruby-identifier">config</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">new</span>
<span class="ruby-comment">#=> #<OpenSSL::Config sections=[]></span>
<span class="ruby-identifier">config</span>[<span class="ruby-string">'default'</span>] = {<span class="ruby-string">"foo"</span><span class="ruby-operator">=></span><span class="ruby-string">"bar"</span>,<span class="ruby-string">"baz"</span><span class="ruby-operator">=></span><span class="ruby-string">"buz"</span>}
<span class="ruby-comment">#=> {"foo"=>"bar", "baz"=>"buz"}</span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-comment">#=> [ default ]</span>
<span class="ruby-comment"># foo=bar</span>
<span class="ruby-comment"># baz=buz</span>
</pre>
<p>It's important to note that this will essentially merge any of the keys in <em>pairs</em> with the existing <em>section</em>. For example:</p>
<pre class="ruby"><span class="ruby-identifier">config</span>[<span class="ruby-string">'default'</span>]
<span class="ruby-comment">#=> {"foo"=>"bar", "baz"=>"buz"}</span>
<span class="ruby-identifier">config</span>[<span class="ruby-string">'default'</span>] = {<span class="ruby-string">"foo"</span> <span class="ruby-operator">=></span> <span class="ruby-string">"changed"</span>}
<span class="ruby-comment">#=> {"foo"=>"changed"}</span>
<span class="ruby-identifier">config</span>[<span class="ruby-string">'default'</span>]
<span class="ruby-comment">#=> {"foo"=>"changed", "baz"=>"buz"}</span>
</pre>
<div class="method-source-code" id="5B-5D-3D-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 396</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">[]=</span>(<span class="ruby-identifier">section</span>, <span class="ruby-identifier">pairs</span>)
<span class="ruby-identifier">check_modify</span>
<span class="ruby-ivar">@data</span>[<span class="ruby-identifier">section</span>] <span class="ruby-operator">||=</span> {}
<span class="ruby-identifier">pairs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">add_value</span>(<span class="ruby-identifier">section</span>, <span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-add_value" class="method-detail ">
<div class="method-heading">
<span class="method-name">add_value</span><span
class="method-args">(section, key, value)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p><a href="../Set.html"><code>Set</code></a> the target <em>key</em> with a given <em>value</em> under a specific <em>section</em>.</p>
<p>Given the following configurating file being loaded:</p>
<pre class="ruby"><span class="ruby-identifier">config</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">load</span>(<span class="ruby-string">'foo.cnf'</span>)
<span class="ruby-comment">#=> #<OpenSSL::Config sections=["default"]></span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-comment">#=> [ default ]</span>
<span class="ruby-comment"># foo=bar</span>
</pre>
<p>You can set the value of <em>foo</em> under the <em>default</em> section to a new value:</p>
<pre class="ruby"><span class="ruby-identifier">config</span>.<span class="ruby-identifier">add_value</span>(<span class="ruby-string">'default'</span>, <span class="ruby-string">'foo'</span>, <span class="ruby-string">'buzz'</span>)
<span class="ruby-comment">#=> "buzz"</span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-comment">#=> [ default ]</span>
<span class="ruby-comment"># foo=buzz</span>
</pre>
<div class="method-source-code" id="add_value-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 338</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">add_value</span>(<span class="ruby-identifier">section</span>, <span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>)
<span class="ruby-identifier">check_modify</span>
(<span class="ruby-ivar">@data</span>[<span class="ruby-identifier">section</span>] <span class="ruby-operator">||=</span> {})[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">value</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-each" class="method-detail ">
<div class="method-heading">
<span class="method-name">each</span><span
class="method-args">() { |section, key, value| ... }</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>For a block.</p>
<p>Receive the section and its pairs for the current configuration.</p>
<pre class="ruby"><span class="ruby-identifier">config</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">section</span>, <span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
<span class="ruby-comment"># ...</span>
<span class="ruby-keyword">end</span>
</pre>
<div class="method-source-code" id="each-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 457</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">each</span>
<span class="ruby-ivar">@data</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">section</span>, <span class="ruby-identifier">hash</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">hash</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">yield</span> [<span class="ruby-identifier">section</span>, <span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-get_value" class="method-detail ">
<div class="method-heading">
<span class="method-name">get_value</span><span
class="method-args">(section, key)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Gets the value of <em>key</em> from the given <em>section</em></p>
<p>Given the following configurating file being loaded:</p>
<pre class="ruby"><span class="ruby-identifier">config</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">load</span>(<span class="ruby-string">'foo.cnf'</span>)
<span class="ruby-comment">#=> #<OpenSSL::Config sections=["default"]></span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-comment">#=> [ default ]</span>
<span class="ruby-comment"># foo=bar</span>
</pre>
<p>You can get a specific value from the config if you know the <em>section</em> and <em>key</em> like so:</p>
<pre class="ruby"><span class="ruby-identifier">config</span>.<span class="ruby-identifier">get_value</span>(<span class="ruby-string">'default'</span>,<span class="ruby-string">'foo'</span>)
<span class="ruby-comment">#=> "bar"</span>
</pre>
<div class="method-source-code" id="get_value-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 293</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_value</span>(<span class="ruby-identifier">section</span>, <span class="ruby-identifier">key</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">section</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">'nil not allowed'</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">section</span> = <span class="ruby-string">'default'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">section</span>.<span class="ruby-identifier">empty?</span>
<span class="ruby-identifier">get_key_string</span>(<span class="ruby-identifier">section</span>, <span class="ruby-identifier">key</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-inspect" class="method-detail ">
<div class="method-heading">
<span class="method-name">inspect</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p><a href="../String.html"><code>String</code></a> representation of this configuration object, including the class name and its sections.</p>
<div class="method-source-code" id="inspect-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 468</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">inspect</span>
<span class="ruby-node">"#<#{self.class.name} sections=#{sections.inspect}>"</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-sections" class="method-detail ">
<div class="method-heading">
<span class="method-name">sections</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Get the names of all sections in the current configuration</p>
<div class="method-source-code" id="sections-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 406</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">sections</span>
<span class="ruby-ivar">@data</span>.<span class="ruby-identifier">keys</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-to_s" class="method-detail ">
<div class="method-heading">
<span class="method-name">to_s</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Get the parsable form of the current configuration</p>
<p>Given the following configuration being created:</p>
<pre class="ruby"><span class="ruby-identifier">config</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">new</span>
<span class="ruby-comment">#=> #<OpenSSL::Config sections=[]></span>
<span class="ruby-identifier">config</span>[<span class="ruby-string">'default'</span>] = {<span class="ruby-string">"foo"</span><span class="ruby-operator">=></span><span class="ruby-string">"bar"</span>,<span class="ruby-string">"baz"</span><span class="ruby-operator">=></span><span class="ruby-string">"buz"</span>}
<span class="ruby-comment">#=> {"foo"=>"bar", "baz"=>"buz"}</span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-comment">#=> [ default ]</span>
<span class="ruby-comment"># foo=bar</span>
<span class="ruby-comment"># baz=buz</span>
</pre>
<p>You can parse get the serialized configuration using <a href="Config.html#method-i-to_s"><code>to_s</code></a> and then parse it later:</p>
<pre class="ruby"><span class="ruby-identifier">serialized_config</span> = <span class="ruby-identifier">config</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-comment"># much later...</span>
<span class="ruby-identifier">new_config</span> = <span class="ruby-constant">OpenSSL</span><span class="ruby-operator">::</span><span class="ruby-constant">Config</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">serialized_config</span>)
<span class="ruby-comment">#=> #<OpenSSL::Config sections=["default"]></span>
<span class="ruby-identifier">puts</span> <span class="ruby-identifier">new_config</span>
<span class="ruby-comment">#=> [ default ]</span>
<span class="ruby-identifier">foo</span>=<span class="ruby-identifier">bar</span>
<span class="ruby-identifier">baz</span>=<span class="ruby-identifier">buz</span>
</pre>
<div class="method-source-code" id="to_s-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 436</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">to_s</span>
<span class="ruby-identifier">ary</span> = []
<span class="ruby-ivar">@data</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">section</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">ary</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"[ #{section} ]\n"</span>
<span class="ruby-ivar">@data</span>[<span class="ruby-identifier">section</span>].<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">ary</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{key}=#{@data[section][key]}\n"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">ary</span> <span class="ruby-operator"><<</span> <span class="ruby-string">"\n"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">ary</span>.<span class="ruby-identifier">join</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
<section id="private-instance-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Private Instance Methods</h3>
</header>
<div id="method-i-check_modify" class="method-detail ">
<div class="method-heading">
<span class="method-name">check_modify</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="check_modify-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 484</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">check_modify</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"Insecure: can't modify OpenSSL config"</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">frozen?</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-get_key_string" class="method-detail ">
<div class="method-heading">
<span class="method-name">get_key_string</span><span
class="method-args">(section, key)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="get_key_string-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 488</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_key_string</span>(<span class="ruby-identifier">section</span>, <span class="ruby-identifier">key</span>)
<span class="ruby-constant">Config</span>.<span class="ruby-identifier">get_key_string</span>(<span class="ruby-ivar">@data</span>, <span class="ruby-identifier">section</span>, <span class="ruby-identifier">key</span>)
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-initialize_copy" class="method-detail ">
<div class="method-heading">
<span class="method-name">initialize_copy</span><span
class="method-args">(other)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="initialize_copy-source">
<pre><span class="ruby-comment"># File ext/openssl/lib/openssl/config.rb, line 480</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize_copy</span>(<span class="ruby-identifier">other</span>)
<span class="ruby-ivar">@data</span> = <span class="ruby-identifier">other</span>.<span class="ruby-identifier">data</span>.<span class="ruby-identifier">dup</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
</section>
</main>
<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.1.
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>