Tor  0.4.4.0-alpha-dev
confmgt.h
Go to the documentation of this file.
1 /* Copyright (c) 2001 Matej Pfajfar.
2  * Copyright (c) 2001-2004, Roger Dingledine.
3  * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4  * Copyright (c) 2007-2020, The Tor Project, Inc. */
5 /* See LICENSE for licensing information */
6 
7 /**
8  * \file confmgt.h
9  *
10  * \brief Header for confmgt.c.
11  */
12 
13 #ifndef TOR_CONFMGT_H
14 #define TOR_CONFMGT_H
15 
16 #include "lib/conf/conftypes.h"
17 #include "lib/conf/confmacros.h"
19 
20 /**
21  * A collection of config_format_t objects to describe several objects
22  * that are all configured with the same configuration file.
23  *
24  * (NOTE: for now, this only handles a single config_format_t.)
25  **/
26 typedef struct config_mgr_t config_mgr_t;
27 
28 config_mgr_t *config_mgr_new(const config_format_t *toplevel_fmt);
31  const config_format_t *fmt);
33 #define config_mgr_free(mgr) \
34  FREE_AND_NULL(config_mgr_t, config_mgr_free_, (mgr))
37 
38 /** A collection of managed configuration objects. */
39 typedef struct config_suite_t config_suite_t;
40 
41 /**
42  * Flag for config_assign: if set, then "resetting" an option changes it to
43  * its default value, as specified in the config_var_t. Otherwise,
44  * "resetting" an option changes it to a type-dependent null value --
45  * typically 0 or NULL.
46  *
47  * (An option is "reset" when it is set to an empty value, or as described in
48  * CAL_CLEAR_FIRST).
49  **/
50 #define CAL_USE_DEFAULTS (1u<<0)
51 /**
52  * Flag for config_assign: if set, then we reset every provided config
53  * option before we set it.
54  *
55  * For example, if this flag is not set, then passing a multi-line option to
56  * config_assign will cause any previous value to be extended. But if this
57  * flag is set, then a multi-line option will replace any previous value.
58  **/
59 #define CAL_CLEAR_FIRST (1u<<1)
60 /**
61  * Flag for config_assign: if set, we warn about deprecated options.
62  **/
63 #define CAL_WARN_DEPRECATIONS (1u<<2)
64 
65 void *config_new(const config_mgr_t *fmt);
66 void config_free_(const config_mgr_t *fmt, void *options);
67 #define config_free(mgr, options) do { \
68  config_free_((mgr), (options)); \
69  (options) = NULL; \
70  } while (0)
71 
73  const void *options, const char *key,
74  int escape_val);
75 int config_is_same(const config_mgr_t *fmt,
76  const void *o1, const void *o2,
77  const char *name);
79  const void *options1, const void *options2);
80 void config_init(const config_mgr_t *mgr, void *options);
81 
82 /** An enumeration to report which validation step failed. */
83 typedef enum {
84  VSTAT_PRE_NORMALIZE_ERR = -5,
85  VSTAT_VALIDATE_ERR = -4,
86  VSTAT_LEGACY_ERR = -3,
87  VSTAT_TRANSITION_ERR = -2,
88  VSTAT_POST_NORMALIZE_ERR = -1,
89  VSTAT_OK = 0,
91 
93  const void *old_options, void *options,
94  char **msg_out);
95 void *config_dup(const config_mgr_t *mgr, const void *old);
96 char *config_dump(const config_mgr_t *mgr, const void *default_options,
97  const void *options, int minimal,
98  int comment_defaults);
100  const void *object);
101 bool config_check_ok(const config_mgr_t *mgr, const void *options,
102  int severity);
103 int config_assign(const config_mgr_t *mgr, void *options,
104  struct config_line_t *list,
105  unsigned flags, char **msg);
106 const char *config_find_deprecation(const config_mgr_t *mgr,
107  const char *key);
108 const char *config_find_option_name(const config_mgr_t *mgr,
109  const char *key);
110 const char *config_expand_abbrev(const config_mgr_t *mgr,
111  const char *option,
112  int command_line, int warn_obsolete);
113 void warn_deprecated_option(const char *what, const char *why);
114 
115 bool config_var_is_settable(const config_var_t *var);
116 bool config_var_is_listable(const config_var_t *var);
117 
118 /* Helper macros to compare an option across two configuration objects */
119 #define CFG_EQ_BOOL(a,b,opt) ((a)->opt == (b)->opt)
120 #define CFG_EQ_INT(a,b,opt) ((a)->opt == (b)->opt)
121 #define CFG_EQ_STRING(a,b,opt) (!strcmp_opt((a)->opt, (b)->opt))
122 #define CFG_EQ_SMARTLIST(a,b,opt) smartlist_strings_eq((a)->opt, (b)->opt)
123 #define CFG_EQ_LINELIST(a,b,opt) config_lines_eq((a)->opt, (b)->opt)
124 #define CFG_EQ_ROUTERSET(a,b,opt) routerset_equal((a)->opt, (b)->opt)
125 
127  void *toplevel, int idx);
128 const void *config_mgr_get_obj(const config_mgr_t *mgr,
129  const void *toplevel, int idx);
130 
131 #ifdef CONFMGT_PRIVATE
132 STATIC void config_reset_line(const config_mgr_t *mgr, void *options,
133  const char *key, int use_defaults);
134 #endif /* defined(CONFMGT_PRIVATE) */
135 
136 #endif /* !defined(TOR_CONFMGT_H) */
void config_init(const config_mgr_t *mgr, void *options)
Definition: confmgt.c:1158
void * config_dup(const config_mgr_t *mgr, const void *old)
Definition: confmgt.c:1132
int config_assign(const config_mgr_t *mgr, void *options, struct config_line_t *list, unsigned flags, char **msg)
Definition: confmgt.c:937
validation_status_t config_validate(const config_mgr_t *mgr, const void *old_options, void *options, char **msg_out)
Definition: confmgt.c:1272
int config_mgr_add_format(config_mgr_t *mgr, const config_format_t *fmt)
Definition: confmgt.c:216
struct smartlist_t * config_mgr_list_deprecated_vars(const config_mgr_t *mgr)
Definition: confmgt.c:333
const char * config_expand_abbrev(const config_mgr_t *mgr, const char *option, int command_line, int warn_obsolete)
Definition: confmgt.c:415
bool config_var_is_settable(const config_var_t *var)
Definition: confmgt.c:558
void config_mgr_freeze(config_mgr_t *mgr)
Definition: confmgt.c:285
const char * name
Definition: config.c:2441
void config_check_toplevel_magic(const config_mgr_t *mgr, const void *object)
Definition: confmgt.c:347
void config_mgr_free_(config_mgr_t *mgr)
Definition: confmgt.c:302
const void * config_mgr_get_obj(const config_mgr_t *mgr, const void *toplevel, int idx)
Definition: confmgt.c:265
void warn_deprecated_option(const char *what, const char *why)
Definition: confmgt.c:692
Macro definitions for declaring configuration variables.
config_mgr_t * config_mgr_new(const config_format_t *toplevel_fmt)
Definition: confmgt.c:145
#define STATIC
Definition: testsupport.h:32
const char * config_find_deprecation(const config_mgr_t *mgr, const char *key)
Definition: confmgt.c:442
struct config_line_t * config_get_changes(const config_mgr_t *mgr, const void *options1, const void *options2)
Definition: confmgt.c:1096
int config_is_same(const config_mgr_t *fmt, const void *o1, const void *o2, const char *name)
Definition: confmgt.c:1070
bool config_check_ok(const config_mgr_t *mgr, const void *options, int severity)
Definition: confmgt.c:1393
STATIC void config_reset_line(const config_mgr_t *mgr, void *options, const char *key, int use_defaults)
Definition: confmgt.c:798
void * config_new(const config_mgr_t *fmt)
Definition: confmgt.c:387
const char * config_find_option_name(const config_mgr_t *mgr, const char *key)
Definition: confmgt.c:513
struct config_line_t * config_get_assigned_option(const config_mgr_t *mgr, const void *options, const char *key, int escape_val)
Definition: confmgt.c:843
Types used to specify configurable options.
Macros to implement mocking and selective exposure for the test code.
validation_status_t
Definition: confmgt.h:83
bool config_var_is_listable(const config_var_t *var)
Definition: confmgt.c:619
char * config_dump(const config_mgr_t *mgr, const void *default_options, const void *options, int minimal, int comment_defaults)
Definition: confmgt.c:1314
void * config_mgr_get_obj_mutable(const config_mgr_t *mgr, void *toplevel, int idx)
Definition: confmgt.c:246
struct smartlist_t * config_mgr_list_vars(const config_mgr_t *mgr)
Definition: confmgt.c:319
void config_free_(const config_mgr_t *fmt, void *options)
Definition: confmgt.c:1025