In Files

  • openssl/ossl.c

Parent

Included Modules

Class/Module Index [+]

Quicksearch

OpenSSL::Config

Public Class Methods

new(p1 = v1) click to toggle source
 
               static VALUE
ossl_config_initialize(int argc, VALUE *argv, VALUE self)
{
    CONF *conf;
    long eline = -1;
    char *filename;
    VALUE path;

    rb_scan_args(argc, argv, "01", &path);
    if(!NIL_P(path)){
        SafeStringValue(path);
        filename = StringValuePtr(path);
        GetConfig(self, conf);
        if (!NCONF_load(conf, filename, &eline)){
            if (eline <= 0)
                ossl_raise(eConfigError, "wrong config file %s", filename);
            else
                ossl_raise(eConfigError, "error in %s:%d", filename, eline);
        }
    }
#ifdef OSSL_NO_CONF_API
    else rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");
#else
    else {
        GetConfig(self, conf);
        _CONF_new_data(conf);
    }
#endif
    
    return self;
}
            
parse(p1) click to toggle source
 
               static VALUE
ossl_config_s_parse(VALUE klass, VALUE str)
{
    CONF *conf;
    VALUE obj;

    conf = parse_config(str, NULL);
    WrapConfig(klass, obj, conf);

    return obj;
}
            

Public Instance Methods

[](p1) click to toggle source

Get all numbers as strings - use str.to_i to convert long number = CONF_get_number(confp->config, sect, StringValuePtr(item));

 
               static VALUE
ossl_config_get_section(VALUE self, VALUE section)
{
    CONF *conf;
    STACK_OF(CONF_VALUE) *sk;
    CONF_VALUE *entry;
    int i, entries;
    VALUE hash;

    hash = rb_hash_new();
    StringValue(section);
    GetConfig(self, conf);
    if (!(sk = NCONF_get_section(conf, StringValuePtr(section)))) {
        ERR_clear_error();
        return hash;
    }
    if ((entries = sk_CONF_VALUE_num(sk)) < 0) {
        OSSL_Debug("# of items in section is < 0?!?");
        return hash;
    }
    for (i=0; i<entries; i++) {
        entry = sk_CONF_VALUE_value(sk, i);            
        rb_hash_aset(hash, rb_str_new2(entry->name), rb_str_new2(entry->value));
    }

    return hash;
}
            
[]=(p1, p2) click to toggle source
 
               static VALUE
ossl_config_set_section(VALUE self, VALUE section, VALUE hash)
{
    VALUE arg[2];

    rb_ossl_config_modify_check(self);
    arg[0] = self;
    arg[1] = section;
    rb_block_call(hash, rb_intern("each"), 0, 0, set_conf_section_i, (VALUE)arg);
    return hash;
}
            
add_value(p1, p2, p3) click to toggle source
 
               static VALUE
ossl_config_add_value(VALUE self, VALUE section, VALUE name, VALUE value)
{
#ifdef OSSL_NO_CONF_API
    rb_notimplement();
#else
    CONF *conf;
    CONF_VALUE *sv, *cv;

    StringValue(section);
    StringValue(name);
    StringValue(value);
    GetConfig(self, conf);
    if(!(sv = _CONF_get_section(conf, RSTRING_PTR(section)))){
        if(!(sv = _CONF_new_section(conf, RSTRING_PTR(section)))){
            ossl_raise(eConfigError, NULL);
        }
    }
    if(!(cv = OPENSSL_malloc(sizeof(CONF_VALUE)))){
        ossl_raise(eConfigError, NULL);
    }
    cv->name = BUF_strdup(RSTRING_PTR(name));
    cv->value = BUF_strdup(RSTRING_PTR(value));
    if(!cv->name || !cv->value || !_CONF_add_string(conf, sv, cv)){
        OPENSSL_free(cv->name);
        OPENSSL_free(cv->value);
        OPENSSL_free(cv);
        ossl_raise(eConfigError, "_CONF_add_string failure");
    }
    
    return value;
#endif
}
            
each() click to toggle source
 
               static VALUE
ossl_config_each(VALUE self)
{
    CONF *conf;

    RETURN_ENUMERATOR(self, 0, 0);

    GetConfig(self, conf);
    lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(each_conf_value), (void*)NULL);

    return self;
}
            
get_value(p1, p2) click to toggle source
 
               static VALUE
ossl_config_get_value(VALUE self, VALUE section, VALUE name)
{
    CONF *conf;
    char *str;

    StringValue(section);
    StringValue(name);
    GetConfig(self, conf);
    str = NCONF_get_string(conf, RSTRING_PTR(section), RSTRING_PTR(name));
    if(!str){
        ERR_clear_error();
        return Qnil;
    }

    return rb_str_new2(str);
}
            
inspect() click to toggle source
 
               static VALUE
ossl_config_inspect(VALUE self)
{
    VALUE str, ary = ossl_config_get_sections(self);
    const char *cname = rb_class2name(rb_obj_class(self));

    str = rb_str_new2("#<");
    rb_str_cat2(str, cname);
    rb_str_cat2(str, " sections=");
    rb_str_append(str, rb_inspect(ary));
    rb_str_cat2(str, ">");

    return str;
}
            
section(p1) click to toggle source
 
               static VALUE
ossl_config_get_section_old(VALUE self, VALUE section)
{
    rb_warn("Config#section is deprecated; use Config#[]");
    return ossl_config_get_section(self, section);
}
            
sections() click to toggle source
 
               static VALUE
ossl_config_get_sections(VALUE self)
{
    CONF *conf;
    VALUE ary;

    GetConfig(self, conf);
    ary = rb_ary_new();
    lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(get_conf_section), (void*)ary);

    return ary;
}
            
to_s() click to toggle source
 
               static VALUE
ossl_config_to_s(VALUE self)
{
    CONF *conf;

    GetConfig(self, conf);

    return dump_conf(conf);
}
            
value(p1, p2 = v2) click to toggle source
 
               static VALUE
ossl_config_get_value_old(int argc, VALUE *argv, VALUE self)
{
    VALUE section, name;
    
    rb_scan_args(argc, argv, "11", &section, &name);

    /* support conf.value(nil, "HOME") -> conf.get_value("", "HOME") */
    if (NIL_P(section)) section = rb_str_new2("");
    /* support conf.value("HOME") -> conf.get_value("", "HOME") */
    if (NIL_P(name)) {
        name = section;
        section = rb_str_new2("");
    }
    /* NOTE: Don't care about conf.get_value(nil, nil) */
    rb_warn("Config#value is deprecated; use Config#get_value");
    return ossl_config_get_value(self, section, name);
}