Class: OpenSSL::Config (Ruby 2.3.4)

In Files

  • openssl/lib/openssl/config.rb
  • openssl/ossl.c

Parent

Included Modules

Class/Module Index [+]

Quicksearch

OpenSSL::Config

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.

See also www.openssl.org/docs/apps/config.html

Constants

DEFAULT_CONFIG_FILE

The default system configuration file for openssl

ESCAPE_MAP

escaped char map

QUOTE_REGEXP_DQ

escape with backslash and doubled dq

QUOTE_REGEXP_SQ

escape with backslash

Public Class Methods

new(filename = nil)

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.

 
               # File openssl/lib/openssl/config.rb, line 246
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
            
parse(string)

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.

 
               # File openssl/lib/openssl/config.rb, line 36
def parse(string)
  c = new()
  parse_config(StringIO.new(string)).each do |section, hash|
    c[section] = hash
  end
  c
end
            
parse_config(io)

Parses the configuration data read from io, see also parse.

Raises a ConfigError on invalid configuration data.

 
               # File openssl/lib/openssl/config.rb, line 52
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
            

Public Instance Methods

[](section)

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"}
 
               # File openssl/lib/openssl/config.rb, line 340
def [](section)
  @data[section] || {}
end
            
[]=(section, pairs)

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"}
 
               # File openssl/lib/openssl/config.rb, line 377
def []=(section, pairs)
  check_modify
  @data[section] ||= {}
  pairs.each do |key, value|
    self.add_value(section, key, value)
  end
end
            
add_value(section, key, value)

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
 
               # File openssl/lib/openssl/config.rb, line 319
def add_value(section, key, value)
  check_modify
  (@data[section] ||= {})[key] = value
end
            
each()

For a block.

Receive the section and its pairs for the current configuration.

config.each do |section, key, value|
  # ...
end
 
               # File openssl/lib/openssl/config.rb, line 438
def each
  @data.each do |section, hash|
    hash.each do |key, value|
      yield [section, key, value]
    end
  end
end
            
get_value(section, key)

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"
 
               # File openssl/lib/openssl/config.rb, line 274
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
            
inspect()

String representation of this configuration object, including the class name and its sections.

 
               # File openssl/lib/openssl/config.rb, line 449
def inspect
  "#<#{self.class.name} sections=#{sections.inspect}>"
end
            
sections()

Get the names of all sections in the current configuration

 
               # File openssl/lib/openssl/config.rb, line 387
def sections
  @data.keys
end
            
to_s()

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
 
               # File openssl/lib/openssl/config.rb, line 417
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