]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add config object for dirauth; move one option there.
authorNick Mathewson <nickm@torproject.org>
Sun, 15 Dec 2019 16:46:55 +0000 (11:46 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 19 Dec 2019 12:54:56 +0000 (07:54 -0500)
I've chosen the "AuthDirMaxServersPerAddr" option here for
simplicity, since it is used literally nowhere else besides the dirauth
module.  Once we have all the infrastructure in place for this, we
can move more options into this structure.

12 files changed:
src/app/config/config.c
src/app/config/or_options_st.h
src/core/include.am
src/feature/dirauth/.may_include
src/feature/dirauth/dirauth_config.c
src/feature/dirauth/dirauth_config.h
src/feature/dirauth/dirauth_options.inc [new file with mode: 0644]
src/feature/dirauth/dirauth_options_st.h [new file with mode: 0644]
src/feature/dirauth/dirauth_stub.c
src/feature/dirauth/dirauth_sys.c
src/feature/dirauth/dirauth_sys.h
src/feature/dirauth/dirvote.c

index 5ea8cec6a6639c30de91c4875be7bb46c67ed7ed..680a7eeefac5db5b8e6566d6db4c3253619ed39a 100644 (file)
@@ -337,7 +337,6 @@ static const config_var_t option_vars_[] = {
   OBSOLETE("AuthDirRejectUnlisted"),
   OBSOLETE("AuthDirListBadDirs"),
   V(AuthDirListBadExits,         BOOL,     "0"),
-  V(AuthDirMaxServersPerAddr,    POSINT,     "2"),
   OBSOLETE("AuthDirMaxServersPerAuthAddr"),
   V(AuthDirHasIPv6Connectivity,  BOOL,     "0"),
   VAR("AuthoritativeDirectory",  BOOL, AuthoritativeDir,    "0"),
index a3d63d9208e83eb4be0c419374974842080b096d..e63ae2510f5194c2110b95c6ab201fdaf9790f99 100644 (file)
@@ -467,8 +467,6 @@ struct or_options_t {
 
   int AuthDirListBadExits; /**< True iff we should list bad exits,
                             * and vote for all other exits as good. */
-  int AuthDirMaxServersPerAddr; /**< Do not permit more than this
-                                 * number of servers per IP address. */
   int AuthDirHasIPv6Connectivity; /**< Boolean: are we on IPv6?  */
   int AuthDirPinKeys; /**< Boolean: Do we enforce key-pinning? */
 
index ab4adeaf66c4db54bcf40fbb341a0a400a8b7d7a..911932d46b71053f8b803c9e496dcd088e22d490 100644 (file)
@@ -355,6 +355,8 @@ noinst_HEADERS +=                                   \
        src/feature/dirauth/bridgeauth.h                \
        src/feature/dirauth/bwauth.h                    \
        src/feature/dirauth/dirauth_config.h            \
+       src/feature/dirauth/dirauth_options.inc         \
+       src/feature/dirauth/dirauth_options_st.h        \
        src/feature/dirauth/dirauth_periodic.h          \
        src/feature/dirauth/dirauth_sys.h               \
        src/feature/dirauth/dircollate.h                \
index 424c745c1253f9495e9b01b6bbe5e946e0f5bce6..a9bb27469906d8a3cc616f1c486c1cf910da30aa 100644 (file)
@@ -1 +1,2 @@
 *.h
+feature/dirauth/*.inc
index 552f851461f580862e5bf2eaaa393319ca23e21b..b7e160c24198382da159d341d9fe97a761053725 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "lib/encoding/confline.h"
 #include "lib/confmgt/confmgt.h"
+#include "lib/conf/confdecl.h"
 
 /* Required for dirinfo_type_t in or_options_t */
 #include "core/or/or.h"
@@ -28,6 +29,7 @@
 #include "feature/dirauth/dirauth_periodic.h"
 #include "feature/dirauth/dirvote.h"
 #include "feature/dirauth/guardfraction.h"
+#include "feature/dirauth/dirauth_options_st.h"
 
 /* Copied from config.c, we will refactor later in 29211. */
 #define REJECT(arg) \
@@ -438,3 +440,23 @@ options_act_dirauth_stats(const or_options_t *old_options,
 
   return 0;
 }
+
+/* Declare the options field table for dirauth_options */
+#define CONF_CONTEXT TABLE
+#include "feature/dirauth/dirauth_options.inc"
+#undef CONF_CONTEXT
+
+/** Magic number for dirauth_options_t. */
+#define DIRAUTH_OPTIONS_MAGIC 0x41757448
+
+/**
+ * Declare the configuration options for the dirauth module.
+ **/
+const config_format_t dirauth_options_fmt = {
+  .size = sizeof(dirauth_options_t),
+  .magic = { "dirauth_options_t",
+             DIRAUTH_OPTIONS_MAGIC,
+             offsetof(dirauth_options_t, magic) },
+  .vars = dirauth_options_t_vars,
+};
+
index b494ca685e9fed5e7e0af067afbcd0a68bae9028..d21fb69d1e7a1b780fd6729a15e160f8461e3691 100644 (file)
@@ -39,6 +39,8 @@ int options_act_dirauth_mtbf(const struct or_options_t *old_options);
 int options_act_dirauth_stats(const struct or_options_t *old_options,
                               bool *print_notice_out);
 
+extern const struct config_format_t dirauth_options_fmt;
+
 #else /* !defined(HAVE_MODULE_DIRAUTH) */
 
 /** When tor is compiled with the dirauth module disabled, it can't be
diff --git a/src/feature/dirauth/dirauth_options.inc b/src/feature/dirauth/dirauth_options.inc
new file mode 100644 (file)
index 0000000..6b66f1e
--- /dev/null
@@ -0,0 +1,18 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2019, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * @file dirauth_options.inc
+ * @brief Declare configuration options for the crypto_ops module.
+ **/
+
+/** Holds configuration about our directory authority options. */
+BEGIN_CONF_STRUCT(dirauth_options_t)
+
+/** Do not permit more than this number of servers per IP address. */
+CONF_VAR(AuthDirMaxServersPerAddr, POSINT, 0, "2")
+
+END_CONF_STRUCT(dirauth_options_t)
diff --git a/src/feature/dirauth/dirauth_options_st.h b/src/feature/dirauth/dirauth_options_st.h
new file mode 100644 (file)
index 0000000..93b9cb4
--- /dev/null
@@ -0,0 +1,22 @@
+/* Copyright (c) 2001 Matej Pfajfar.
+ * Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2019, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * @file dirauth_options_st.h
+ * @brief Structure dirauth_options_t to hold directory authority options.
+ **/
+
+#ifndef TOR_FEATURE_DIRAUTH_DIRAUTH_OPTIONS_ST_H
+#define TOR_FEATURE_DIRAUTH_DIRAUTH_OPTIONS_ST_H
+
+#include "lib/conf/confdecl.h"
+#define CONF_CONTEXT STRUCT
+#include "feature/dirauth/dirauth_options.inc"
+#undef CONF_CONTEXT
+
+typedef struct dirauth_options_t dirauth_options_t;
+
+#endif /* !defined(TOR_FEATURE_DIRAUTH_DIRAUTH_OPTIONS_ST_H) */
index fac68edd09c9d6c898789a53aa7de515167cc435..b0b4f987f2b450c331eef3125ac5aa0dab4bef13 100644 (file)
 
 #include "orconfig.h"
 #include "feature/dirauth/dirauth_sys.h"
+#include "lib/conf/conftypes.h"
+#include "lib/conf/confdecl.h"
+#include "lib/subsys/subsys.h"
+
+/* Declare the options field table for dirauth_options */
+#define CONF_CONTEXT STUB_TABLE
+#include "feature/dirauth/dirauth_options.inc"
+#undef CONF_CONTEXT
+
+static const config_format_t dirauth_options_stub_fmt = {
+  .vars = dirauth_options_t_vars,
+};
 
 const struct subsys_fns_t sys_dirauth = {
   .name = "dirauth",
   .supported = false,
   .level = 70,
+
+  .options_format = &dirauth_options_stub_fmt
 };
index 090e9129f23b9e6cd38106eb353949d75c51cb98..8a4b1abaab2584b7e9df3cb71ef9fc2ce1c3de60 100644 (file)
 #include "feature/dirauth/dirauth_periodic.h"
 #include "feature/dirauth/keypin.h"
 #include "feature/dirauth/process_descs.h"
+#include "feature/dirauth/dirauth_config.h"
+
+#include "feature/dirauth/dirauth_options_st.h"
 
 #include "lib/subsys/subsys.h"
 
+static const dirauth_options_t *global_dirauth_options;
+
 static int
 subsys_dirauth_initialize(void)
 {
@@ -34,6 +39,22 @@ subsys_dirauth_shutdown(void)
   dirvote_free_all();
   dirserv_clear_measured_bw_cache();
   keypin_close_journal();
+  global_dirauth_options = NULL;
+}
+
+const dirauth_options_t *
+dirauth_get_options(void)
+{
+  tor_assert(global_dirauth_options);
+  return global_dirauth_options;
+}
+
+static int
+dirauth_set_options(void *arg)
+{
+  dirauth_options_t *opts = arg;
+  global_dirauth_options = opts;
+  return 0;
 }
 
 const struct subsys_fns_t sys_dirauth = {
@@ -42,4 +63,7 @@ const struct subsys_fns_t sys_dirauth = {
   .level = 70,
   .initialize = subsys_dirauth_initialize,
   .shutdown = subsys_dirauth_shutdown,
+
+  .options_format = &dirauth_options_fmt,
+  .set_options = dirauth_set_options,
 };
index 2d5a0cb3e7cf73c5445959964f92aec783cca5e5..4c09ff64f966a85820a91d4d142632bf6d338ded 100644 (file)
@@ -12,6 +12,9 @@
 #ifndef DIRAUTH_SYS_H
 #define DIRAUTH_SYS_H
 
+struct dirauth_options_t;
+const struct dirauth_options_t *dirauth_get_options(void);
+
 extern const struct subsys_fns_t sys_dirauth;
 
 #endif /* !defined(DIRAUTH_SYS_H) */
index 043bbfc2273c3a4ca7473f7422736977d16862a6..13003bf6398c32fdef13ea35d165fc360b5cb872 100644 (file)
 #include "feature/dirauth/dirvote.h"
 #include "feature/dirauth/authmode.h"
 #include "feature/dirauth/shared_random_state.h"
+#include "feature/dirauth/dirauth_sys.h"
 
 #include "feature/nodelist/authority_cert_st.h"
 #include "feature/dircache/cached_dir_st.h"
 #include "feature/dirclient/dir_server_st.h"
+#include "feature/dirauth/dirauth_options_st.h"
 #include "feature/nodelist/document_signature_st.h"
 #include "feature/nodelist/microdesc_st.h"
 #include "feature/nodelist/networkstatus_st.h"
@@ -4228,7 +4230,7 @@ compare_routerinfo_by_ip_and_bw_(const void **a, const void **b)
 static digestmap_t *
 get_possible_sybil_list(const smartlist_t *routers)
 {
-  const or_options_t *options = get_options();
+  const dirauth_options_t *options = dirauth_get_options();
   digestmap_t *omit_as_sybil;
   smartlist_t *routers_by_ip = smartlist_new();
   uint32_t last_addr;