92
ossl_config_s_parse(VALUE klass, VALUE str)
97
conf = parse_config(str, NULL);
98
WrapConfig(klass, obj, conf);
104
ossl_config_s_alloc(VALUE klass)
109
if(!(conf = NCONF_new(NULL)))
110
ossl_raise(eConfigError, NULL);
111
WrapConfig(klass, obj, conf);
117
ossl_config_copy(VALUE self, VALUE other)
122
str = rb_funcall(self, rb_intern("to_s"), 0);
123
GetConfig(other, conf);
124
parse_config(str, conf);
130
ossl_config_initialize(int argc, VALUE *argv, VALUE self)
137
rb_scan_args(argc, argv, "01", &path);
139
SafeStringValue(path);
140
filename = StringValuePtr(path);
141
GetConfig(self, conf);
142
if (!NCONF_load(conf, filename, &eline)){
144
ossl_raise(eConfigError, "wrong config file %s", filename);
146
ossl_raise(eConfigError, "error in %s:%d", filename, eline);
149
#ifdef OSSL_NO_CONF_API
150
else rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");
153
GetConfig(self, conf);
154
_CONF_new_data(conf);
162
ossl_config_add_value(VALUE self, VALUE section, VALUE name, VALUE value)
164
#ifdef OSSL_NO_CONF_API
170
StringValue(section);
173
GetConfig(self, conf);
174
if(!(sv = _CONF_get_section(conf, RSTRING_PTR(section)))){
175
if(!(sv = _CONF_new_section(conf, RSTRING_PTR(section)))){
176
ossl_raise(eConfigError, NULL);
179
if(!(cv = OPENSSL_malloc(sizeof(CONF_VALUE)))){
180
ossl_raise(eConfigError, NULL);
182
cv->name = BUF_strdup(RSTRING_PTR(name));
183
cv->value = BUF_strdup(RSTRING_PTR(value));
184
if(!cv->name || !cv->value || !_CONF_add_string(conf, sv, cv)){
185
OPENSSL_free(cv->name);
186
OPENSSL_free(cv->value);
188
ossl_raise(eConfigError, "_CONF_add_string failure");
196
rb_ossl_config_modify_check(VALUE config)
198
if (OBJ_FROZEN(config)) rb_error_frozen("OpenSSL::Config");
199
if (!OBJ_UNTRUSTED(config) && rb_safe_level() >= 4)
200
rb_raise(rb_eSecurityError, "Insecure: can't modify OpenSSL config");
203
#if !defined(OSSL_NO_CONF_API)
205
ossl_config_add_value_m(VALUE self, VALUE section, VALUE name, VALUE value)
207
rb_ossl_config_modify_check(self);
208
return ossl_config_add_value(self, section, name, value);
211
#define ossl_config_add_value_m rb_f_notimplement
215
ossl_config_get_value(VALUE self, VALUE section, VALUE name)
220
StringValue(section);
222
GetConfig(self, conf);
223
str = NCONF_get_string(conf, RSTRING_PTR(section), RSTRING_PTR(name));
229
return rb_str_new2(str);
233
ossl_config_get_value_old(int argc, VALUE *argv, VALUE self)
237
rb_scan_args(argc, argv, "11", §ion, &name);
239
/* support conf.value(nil, "HOME") -> conf.get_value("", "HOME") */
240
if (NIL_P(section)) section = rb_str_new2("");
241
/* support conf.value("HOME") -> conf.get_value("", "HOME") */
244
section = rb_str_new2("");
246
/* NOTE: Don't care about conf.get_value(nil, nil) */
247
rb_warn("Config#value is deprecated; use Config#get_value");
248
return ossl_config_get_value(self, section, name);
252
set_conf_section_i(VALUE i, VALUE *arg)
256
Check_Type(i, T_ARRAY);
257
name = rb_ary_entry(i, 0);
258
value = rb_ary_entry(i, 1);
259
ossl_config_add_value(arg[0], arg[1], name, value);
265
ossl_config_set_section(VALUE self, VALUE section, VALUE hash)
269
rb_ossl_config_modify_check(self);
272
rb_block_call(hash, rb_intern("each"), 0, 0, set_conf_section_i, (VALUE)arg);
277
* Get all numbers as strings - use str.to_i to convert
278
* long number = CONF_get_number(confp->config, sect, StringValuePtr(item));
281
ossl_config_get_section(VALUE self, VALUE section)
284
STACK_OF(CONF_VALUE) *sk;
289
hash = rb_hash_new();
290
StringValue(section);
291
GetConfig(self, conf);
292
if (!(sk = NCONF_get_section(conf, StringValuePtr(section)))) {
296
if ((entries = sk_CONF_VALUE_num(sk)) < 0) {
297
OSSL_Debug("# of items in section is < 0?!?");
300
for (i=0; i<entries; i++) {
301
entry = sk_CONF_VALUE_value(sk, i);
302
rb_hash_aset(hash, rb_str_new2(entry->name), rb_str_new2(entry->value));
309
ossl_config_get_section_old(VALUE self, VALUE section)
311
rb_warn("Config#section is deprecated; use Config#[]");
312
return ossl_config_get_section(self, section);
315
#if defined(IMPLEMENT_LHASH_DOALL_ARG_FN) && defined(LHASH_OF)
317
get_conf_section_doall_arg(CONF_VALUE *cv, void *tmp)
319
VALUE ary = (VALUE)tmp;
321
rb_ary_push(ary, rb_str_new2(cv->section));
324
static IMPLEMENT_LHASH_DOALL_ARG_FN(get_conf_section, CONF_VALUE, void)
327
ossl_config_get_sections(VALUE self)
332
GetConfig(self, conf);
334
lh_doall_arg((_LHASH *)conf->data, LHASH_DOALL_ARG_FN(get_conf_section),
341
dump_conf_value_doall_arg(CONF_VALUE *cv, void *tmp)
343
VALUE str = (VALUE)tmp;
344
STACK_OF(CONF_VALUE) *sk;
348
if (cv->name) return;
349
sk = (STACK_OF(CONF_VALUE)*)cv->value;
350
num = sk_CONF_VALUE_num(sk);
351
rb_str_cat2(str, "[ ");
352
rb_str_cat2(str, cv->section);
353
rb_str_cat2(str, " ]\n");
354
for(i = 0; i < num; i++){
355
v = sk_CONF_VALUE_value(sk, i);
356
rb_str_cat2(str, v->name ? v->name : "None");
357
rb_str_cat2(str, "=");
358
rb_str_cat2(str, v->value ? v->value : "None");
359
rb_str_cat2(str, "\n");
361
rb_str_cat2(str, "\n");
364
static IMPLEMENT_LHASH_DOALL_ARG_FN(dump_conf_value, CONF_VALUE, void)
367
dump_conf(CONF *conf)
371
str = rb_str_new(0, 0);
372
lh_doall_arg((_LHASH *)conf->data, LHASH_DOALL_ARG_FN(dump_conf_value),
379
ossl_config_to_s(VALUE self)
383
GetConfig(self, conf);
385
return dump_conf(conf);
389
each_conf_value_doall_arg(CONF_VALUE *cv, void *dummy)
391
STACK_OF(CONF_VALUE) *sk;
393
VALUE section, name, value, args;
396
if (cv->name) return;
397
sk = (STACK_OF(CONF_VALUE)*)cv->value;
398
num = sk_CONF_VALUE_num(sk);
399
section = rb_str_new2(cv->section);
400
for(i = 0; i < num; i++){
401
v = sk_CONF_VALUE_value(sk, i);
402
name = v->name ? rb_str_new2(v->name) : Qnil;
403
value = v->value ? rb_str_new2(v->value) : Qnil;
404
args = rb_ary_new3(3, section, name, value);
409
static IMPLEMENT_LHASH_DOALL_ARG_FN(each_conf_value, CONF_VALUE, void *)
412
ossl_config_each(VALUE self)
416
RETURN_ENUMERATOR(self, 0, 0);
418
GetConfig(self, conf);
419
lh_doall_arg((_LHASH *)conf->data, LHASH_DOALL_ARG_FN(each_conf_value),
426
ossl_config_get_sections(VALUE self)
428
rb_warn("#sections don't work with %s", OPENSSL_VERSION_TEXT);
433
ossl_config_to_s(VALUE self)
435
rb_warn("#to_s don't work with %s", OPENSSL_VERSION_TEXT);
436
return rb_str_new(0, 0);
440
ossl_config_each(VALUE self)
442
rb_warn("#each don't work with %s", OPENSSL_VERSION_TEXT);
448
ossl_config_inspect(VALUE self)
450
VALUE str, ary = ossl_config_get_sections(self);
451
const char *cname = rb_class2name(rb_obj_class(self));
453
str = rb_str_new2("#<");
454
rb_str_cat2(str, cname);
455
rb_str_cat2(str, " sections=");
456
rb_str_append(str, rb_inspect(ary));
457
rb_str_cat2(str, ">");
473
72
rb_define_const(cConfig, "DEFAULT_CONFIG_FILE",
474
73
rb_str_new2(default_config_file));
475
74
OPENSSL_free(default_config_file);
476
rb_include_module(cConfig, rb_mEnumerable);
477
rb_define_singleton_method(cConfig, "parse", ossl_config_s_parse, 1);
478
rb_define_alias(CLASS_OF(cConfig), "load", "new");
479
rb_define_alloc_func(cConfig, ossl_config_s_alloc);
480
rb_define_copy_func(cConfig, ossl_config_copy);
481
rb_define_method(cConfig, "initialize", ossl_config_initialize, -1);
482
rb_define_method(cConfig, "get_value", ossl_config_get_value, 2);
483
rb_define_method(cConfig, "value", ossl_config_get_value_old, -1);
484
rb_define_method(cConfig, "add_value", ossl_config_add_value_m, 3);
485
rb_define_method(cConfig, "[]", ossl_config_get_section, 1);
486
rb_define_method(cConfig, "section", ossl_config_get_section_old, 1);
487
rb_define_method(cConfig, "[]=", ossl_config_set_section, 2);
488
rb_define_method(cConfig, "sections", ossl_config_get_sections, 0);
489
rb_define_method(cConfig, "to_s", ossl_config_to_s, 0);
490
rb_define_method(cConfig, "each", ossl_config_each, 0);
491
rb_define_method(cConfig, "inspect", ossl_config_inspect, 0);
75
/* methods are defined by openssl/config.rb */