Object
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; }
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; }
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; }
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 }
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; }
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); }
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; }
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); }
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; }
static VALUE ossl_config_to_s(VALUE self) { CONF *conf; GetConfig(self, conf); return dump_conf(conf); }
static VALUE ossl_config_get_value_old(int argc, VALUE *argv, VALUE self) { VALUE section, name; rb_scan_args(argc, argv, "11", §ion, &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); }