]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add a function to make sure all values in a config object are ok
authorNick Mathewson <nickm@torproject.org>
Wed, 19 Jun 2019 20:06:15 +0000 (16:06 -0400)
committerNick Mathewson <nickm@torproject.org>
Tue, 25 Jun 2019 16:51:25 +0000 (12:51 -0400)
src/app/config/confparse.c
src/app/config/confparse.h

index b9b5fddb967015aea8d87f2e878178fda826be3a..2890d8c81b8a93bc9f9d688140c2a2378d027236 100644 (file)
@@ -673,3 +673,21 @@ config_dump(const config_format_t *fmt, const void *default_options,
   }
   return result;
 }
+
+/**
+ * Return true if every member of <b>options</b> is in-range and well-formed.
+ * Return false otherwise.  Log errors at level <b>severity</b>.
+ */
+bool
+config_check_ok(const config_format_t *fmt, const void *options, int severity)
+{
+  bool all_ok = true;
+  for (int i=0; fmt->vars[i].member.name; ++i) {
+    if (!struct_var_ok(options, &fmt->vars[i].member)) {
+      log_fn(severity, LD_BUG, "Invalid value for %s",
+             fmt->vars[i].member.name);
+      all_ok = false;
+    }
+  }
+  return all_ok;
+}
index 4ef4e708f3f0bb61aa330ca235463e3dda9a1569..b91ea1c13de501414a4c1e4d50c7066728f65e1f 100644 (file)
@@ -138,6 +138,8 @@ void *config_dup(const config_format_t *fmt, const void *old);
 char *config_dump(const config_format_t *fmt, const void *default_options,
                   const void *options, int minimal,
                   int comment_defaults);
+bool config_check_ok(const config_format_t *fmt, const void *options,
+                     int severity);
 int config_assign(const config_format_t *fmt, void *options,
                   struct config_line_t *list,
                   unsigned flags, char **msg);