aboutsummaryrefslogtreecommitdiff
path: root/rcynic/rcynic.c
diff options
context:
space:
mode:
Diffstat (limited to 'rcynic/rcynic.c')
-rw-r--r--rcynic/rcynic.c42
1 files changed, 36 insertions, 6 deletions
diff --git a/rcynic/rcynic.c b/rcynic/rcynic.c
index e16fa2fc..f83056af 100644
--- a/rcynic/rcynic.c
+++ b/rcynic/rcynic.c
@@ -233,6 +233,28 @@ static int configure_syslog(const rcynic_ctx_t *rc,
}
}
+/*
+ * Configure boolean variable.
+ */
+static int configure_boolean(const rcynic_ctx_t *rc,
+ int *result,
+ const char *val)
+{
+ assert(rc && result && val);
+
+ switch (*val) {
+ case 'y': case 'Y': case 't': case 'T': case '1':
+ *result = 1;
+ return 1;
+ case 'n': case 'N': case 'f': case 'F': case '0':
+ * result = 0;
+ return 1;
+ default:
+ logmsg(rc, log_usage_err, "Bad boolean value %s", val);
+ return 0;
+ }
+}
+
/*
@@ -1264,6 +1286,8 @@ int main(int argc, char *argv[])
for (i = 0; i < sk_CONF_VALUE_num(cfg_section); i++) {
CONF_VALUE *val = sk_CONF_VALUE_value(cfg_section, i);
+ assert(val && val->name && val->value);
+
if (!name_cmp(val->name, "authenticated"))
set_directory(&rc.authenticated, val->value);
@@ -1285,15 +1309,19 @@ int main(int argc, char *argv[])
goto done;
else if (!opt_syslog &&
- !name_cmp(val->name, "use-syslog"))
- use_syslog = atoi(val->value);
+ !name_cmp(val->name, "use-syslog") &&
+ !configure_boolean(&rc, &use_syslog, val->value))
+ goto done;
else if (!opt_stdouterr &&
- !name_cmp(val->name, "use-stdouterr"))
- rc.use_stdouterr = atoi(val->value);
+ !name_cmp(val->name, "use-stdouterr") &&
+ !configure_boolean(&rc, &rc.use_stdouterr, val->value))
+ goto done;
- else if (!name_cmp(val->name, "syslog-perror"))
- syslog_perror |= atoi(val->value);
+ else if (!syslog_perror &&
+ !name_cmp(val->name, "syslog-perror") &&
+ !configure_boolean(&rc, &syslog_perror, val->value))
+ goto done;
else if (!name_cmp(val->name, "syslog-facility") &&
!configure_syslog(&rc, &syslog_facility,
@@ -1366,6 +1394,8 @@ int main(int argc, char *argv[])
certinfo_t ta_info;
X509 *x;
+ assert(val && val->name && val->value);
+
if (name_cmp(val->name, "trust-anchor"))
continue;