OpenSSL::Config
Configuration for the openssl library.
Many system's installation of openssl library will depend on your system configuration. See the value of OpenSSL::Config::DEFAULT_CONFIG_FILE for the location of the file for your host.
| QUOTE_REGEXP_SQ | = | /\A([^'\\]*(?:\\.[^'\\]*)*)'/ |
escape with backslash |
||
| QUOTE_REGEXP_DQ | = | /\A([^"\\]*(?:""[^"\\]*|\\.[^"\\]*)*)"/ |
escape with backslash and doubled dq |
||
| ESCAPE_MAP | = | { "r" => "\r", "n" => "\n", "b" => "\b", "t" => "\t", } |
escaped char map |
||
| DEFAULT_CONFIG_FILE | = | rb_str_new2(default_config_file) |
The default system configuration file for openssl |
||
Creates an instance of OpenSSL's configuration class.
This can be used in contexts like OpenSSL::X509::ExtensionFactory#config=
If the optional filename parameter is provided, then it is
read in and parsed via parse_config.
This can raise IO exceptions based on the access, or availability of the file. A ConfigError exception may be raised depending on the validity of the data being configured.
Source: show
# File ext/openssl/lib/openssl/config.rb, line 245 def initialize(filename = nil) @data = {} if filename File.open(filename.to_s) do |file| Config.parse_config(file).each do |section, hash| self[section] = hash end end end end
Get a specific section from the current configuration
Given the following configurating file being loaded:
config = OpenSSL::Config.load('foo.cnf')
#=> #<OpenSSL::Config sections=["default"]>
puts config.to_s
#=> [ default ]
# foo=bar
You can get a hash of the specific section like so:
config['default']
#=> {"foo"=>"bar"}
Source: show
# File ext/openssl/lib/openssl/config.rb, line 339 def [](section) @data[section] || {} end
Sets a specific section name with a Hash pairs
Given the following configuration being created:
config = OpenSSL::Config.new
#=> #<OpenSSL::Config sections=[]>
config['default'] = {"foo"=>"bar","baz"=>"buz"}
#=> {"foo"=>"bar", "baz"=>"buz"}
puts config.to_s
#=> [ default ]
# foo=bar
# baz=buz
It's important to note that this will essentially merge any of the keys
in pairs with the existing section. For example:
config['default']
#=> {"foo"=>"bar", "baz"=>"buz"}
config['default'] = {"foo" => "changed"}
#=> {"foo"=>"changed"}
config['default']
#=> {"foo"=>"changed", "baz"=>"buz"}
Source: show
# File ext/openssl/lib/openssl/config.rb, line 376 def []=(section, pairs) check_modify @data[section] ||= {} pairs.each do |key, value| self.add_value(section, key, value) end end
Set the target key with a given
value under a specific section.
Given the following configurating file being loaded:
config = OpenSSL::Config.load('foo.cnf')
#=> #<OpenSSL::Config sections=["default"]>
puts config.to_s
#=> [ default ]
# foo=bar
You can set the value of foo under the default
section to a new value:
config.add_value('default', 'foo', 'buzz')
#=> "buzz"
puts config.to_s
#=> [ default ]
# foo=buzz
Source: show
# File ext/openssl/lib/openssl/config.rb, line 318 def add_value(section, key, value) check_modify (@data[section] ||= {})[key] = value end
For a block.
Receive the section and its pairs for the current configuration.
config.each do |section, key, value|
# ...
end
Source: show
# File ext/openssl/lib/openssl/config.rb, line 437 def each @data.each do |section, hash| hash.each do |key, value| yield [section, key, value] end end end
Gets the value of key from the given section
Given the following configurating file being loaded:
config = OpenSSL::Config.load('foo.cnf')
#=> #<OpenSSL::Config sections=["default"]>
puts config.to_s
#=> [ default ]
# foo=bar
You can get a specific value from the config if you know the
section and key like so:
config.get_value('default','foo')
#=> "bar"
Source: show
# File ext/openssl/lib/openssl/config.rb, line 273 def get_value(section, key) if section.nil? raise TypeError.new('nil not allowed') end section = 'default' if section.empty? get_key_string(section, key) end
String representation of this configuration object, including the class name and its sections.
Source: show
# File ext/openssl/lib/openssl/config.rb, line 448 def inspect "#<#{self.class.name} sections=#{sections.inspect}>" end
Parses a given string as a blob that contains configuration
for openssl.
If the source of the IO is a file, then consider using parse_config.
Source: show
# File ext/openssl/lib/openssl/config.rb, line 35 def parse(string) c = new() parse_config(StringIO.new(string)).each do |section, hash| c[section] = hash end c end
Parses the configuration data read from io, see also parse.
Raises a ConfigError on invalid configuration data.
Source: show
# File ext/openssl/lib/openssl/config.rb, line 51 def parse_config(io) begin parse_config_lines(io) rescue ConfigError => e e.message.replace("error in line #{io.lineno}: " + e.message) raise end end
Get the names of all sections in the current configuration
Source: show
# File ext/openssl/lib/openssl/config.rb, line 386 def sections @data.keys end
Get the parsable form of the current configuration
Given the following configuration being created:
config = OpenSSL::Config.new
#=> #<OpenSSL::Config sections=[]>
config['default'] = {"foo"=>"bar","baz"=>"buz"}
#=> {"foo"=>"bar", "baz"=>"buz"}
puts config.to_s
#=> [ default ]
# foo=bar
# baz=buz
You can parse get the serialized configuration using to_s and then parse it later:
serialized_config = config.to_s
# much later...
new_config = OpenSSL::Config.parse(serialized_config)
#=> #<OpenSSL::Config sections=["default"]>
puts new_config
#=> [ default ]
foo=bar
baz=buz
Source: show
# File ext/openssl/lib/openssl/config.rb, line 416 def to_s ary = [] @data.keys.sort.each do |section| ary << "[ #{section} ]\n" @data[section].keys.each do |key| ary << "#{key}=#{@data[section][key]}\n" end ary << "\n" end ary.join end