]> CyberLeo.Net >> Repos - FreeBSD/releng/10.3.git/blob - contrib/ntp/include/ntp_config.h
Fix multiple vulnerabilities in ntp. [SA-18:02.ntp]
[FreeBSD/releng/10.3.git] / contrib / ntp / include / ntp_config.h
1 #ifndef NTP_CONFIG_H
2 #define NTP_CONFIG_H
3
4 #ifdef HAVE_SYS_RESOURCE_H
5 # include <sys/resource.h>
6 #endif /* HAVE_SYS_RESOURCE_H */
7
8 #include "ntp_machine.h"
9 #include "ntpsim.h"
10
11
12 /*
13  * Configuration file name
14  */
15 #ifndef CONFIG_FILE
16 # ifndef SYS_WINNT
17 #  define       CONFIG_FILE "/etc/ntp.conf"
18 # else /* SYS_WINNT */
19 #  define       CONFIG_FILE     "%windir%\\system32\\drivers\\etc\\ntp.conf"
20 #  define       ALT_CONFIG_FILE "%windir%\\ntp.conf"
21 #  define       NTP_KEYSDIR     "%windir%\\system32\\drivers\\etc"
22 # endif /* SYS_WINNT */
23 #endif /* not CONFIG_FILE */
24
25
26 /*
27  * We keep config trees around for possible saveconfig use.  When
28  * built with configure --disable-saveconfig, and when built with
29  * debugging enabled, include the free_config_*() routines.  In the
30  * DEBUG case, they are used in an atexit() cleanup routine to make
31  * postmortem leak check reports more interesting.
32  */
33 #if !defined(FREE_CFG_T) && (!defined(SAVECONFIG) || defined(DEBUG))
34 #define FREE_CFG_T
35 #endif
36
37 /* Limits */
38 #define MAXLINE 1024
39
40 /* Configuration sources */
41
42 #define CONF_SOURCE_FILE                0
43 #define CONF_SOURCE_NTPQ                1
44
45 /* list of servers from command line for config_peers() */
46 extern  int     cmdline_server_count;
47 extern  char ** cmdline_servers;
48
49 /* set to zero if we're not locking memory */
50 extern  int     cur_memlock;
51
52 typedef struct int_range_tag {
53         int     first;
54         int     last;
55 } int_range;
56
57 /* generic list node */
58 typedef struct any_node_tag any_node;
59 struct any_node_tag {
60         any_node *      link;
61 };
62
63 typedef DECL_FIFO_ANCHOR(any_node) any_node_fifo;
64
65 /* Structure for storing an attribute-value pair */
66 typedef struct attr_val_tag attr_val;
67 struct attr_val_tag {
68         attr_val *      link;
69         int             attr;
70         int             type;   /* T_String, T_Integer, ... */
71         union val {
72                 int             i;
73                 u_int           u;
74                 int_range       r;
75                 double          d;
76                 char *          s;
77         } value;
78 };
79
80 typedef DECL_FIFO_ANCHOR(attr_val) attr_val_fifo;
81
82 /* Structure for nodes on the syntax tree */
83 typedef struct address_node_tag address_node;
84 struct address_node_tag {
85         address_node *  link;
86         char *          address;
87         u_short         type;   /* family, AF_UNSPEC (0), AF_INET[6] */
88 };
89
90 typedef DECL_FIFO_ANCHOR(address_node) address_fifo;
91
92 typedef struct int_node_tag int_node;
93 struct int_node_tag {
94         int_node *      link;
95         int             i;
96 };
97
98 typedef DECL_FIFO_ANCHOR(int_node) int_fifo;
99
100 typedef struct string_node_tag string_node;
101 struct string_node_tag {
102         string_node *   link;
103         char *          s;
104 };
105
106 typedef DECL_FIFO_ANCHOR(string_node) string_fifo;
107
108 typedef struct restrict_node_tag restrict_node;
109 struct restrict_node_tag {
110         restrict_node * link;
111         address_node *  addr;
112         address_node *  mask;
113         int_fifo *      flag_tok_fifo;
114         int             line_no;
115         short           ippeerlimit;
116 };
117
118 typedef DECL_FIFO_ANCHOR(restrict_node) restrict_fifo;
119
120 typedef struct peer_node_tag peer_node;
121 struct peer_node_tag {
122         peer_node *     link;
123         int             host_mode;
124         address_node *  addr;
125         attr_val_fifo * peerflags;
126         u_char          minpoll;
127         u_char          maxpoll;
128         u_int32         ttl;
129         u_char          peerversion;
130         keyid_t         peerkey;
131         char *          group;
132 };
133
134 typedef DECL_FIFO_ANCHOR(peer_node) peer_fifo;
135
136 typedef struct unpeer_node_tag unpeer_node;
137 struct unpeer_node_tag {
138         unpeer_node *   link;
139         associd_t       assocID;
140         address_node *  addr;
141 };
142
143 typedef DECL_FIFO_ANCHOR(unpeer_node) unpeer_fifo;
144
145 typedef struct auth_node_tag auth_node;
146 struct auth_node_tag {
147         int             control_key;
148         int             cryptosw;
149         attr_val_fifo * crypto_cmd_list;
150         char *          keys;
151         char *          keysdir;
152         int             request_key;
153         int             revoke;
154         attr_val_fifo * trusted_key_list;
155         char *          ntp_signd_socket;
156 };
157
158 typedef struct filegen_node_tag filegen_node;
159 struct filegen_node_tag {
160         filegen_node *  link;
161         int             filegen_token;
162         attr_val_fifo * options;
163 };
164
165 typedef DECL_FIFO_ANCHOR(filegen_node) filegen_fifo;
166
167 typedef struct setvar_node_tag setvar_node;
168 struct setvar_node_tag {
169         setvar_node *   link;
170         char *          var;
171         char *          val;
172         int             isdefault;
173 };
174
175 typedef DECL_FIFO_ANCHOR(setvar_node) setvar_fifo;
176
177 typedef struct nic_rule_node_tag nic_rule_node;
178 struct nic_rule_node_tag {
179         nic_rule_node * link;
180         int             match_class;
181         char *          if_name;        /* or numeric address */
182         int             action;
183 };
184
185 typedef DECL_FIFO_ANCHOR(nic_rule_node) nic_rule_fifo;
186
187 typedef struct addr_opts_node_tag addr_opts_node;
188 struct addr_opts_node_tag {
189         addr_opts_node *link;
190         address_node *  addr;
191         attr_val_fifo * options;
192 };
193
194 typedef DECL_FIFO_ANCHOR(addr_opts_node) addr_opts_fifo;
195
196 typedef struct sim_node_tag sim_node;
197 struct sim_node_tag {
198         sim_node *              link;
199         attr_val_fifo *         init_opts;
200         server_info_fifo *      servers;
201 };
202
203 typedef DECL_FIFO_ANCHOR(sim_node) sim_fifo;
204
205 /* The syntax tree */
206 typedef struct config_tree_tag config_tree;
207 struct config_tree_tag {
208         config_tree *   link;
209
210         attr_val        source;
211         time_t          timestamp;
212
213         peer_fifo *     peers;
214         unpeer_fifo *   unpeers;
215
216         /* Other Modes */
217         int             broadcastclient;
218         address_fifo *  manycastserver;
219         address_fifo *  multicastclient;
220
221         attr_val_fifo * orphan_cmds;    /* s/b renamed tos_options */
222
223         /* Monitoring Configuration */
224         int_fifo *      stats_list;
225         char *          stats_dir;
226         filegen_fifo *  filegen_opts;
227
228         /* Access Control Configuration */
229         attr_val_fifo * discard_opts;
230         attr_val_fifo * mru_opts;
231         restrict_fifo * restrict_opts;
232
233         addr_opts_fifo *fudge;
234         attr_val_fifo * rlimit;
235         attr_val_fifo * tinker;
236         attr_val_fifo * enable_opts;
237         attr_val_fifo * disable_opts;
238
239         auth_node       auth;
240
241         attr_val_fifo * logconfig;
242         string_fifo *   phone;
243         setvar_fifo *   setvar;
244         int_fifo *      ttl;
245         addr_opts_fifo *trap;
246         attr_val_fifo * vars;
247         nic_rule_fifo * nic_rules;
248         int_fifo *      reset_counters;
249
250         sim_fifo *      sim_details;
251         int             mdnstries;
252 };
253
254
255 /* Structure for holding a remote configuration command */
256 struct REMOTE_CONFIG_INFO {
257         char buffer[MAXLINE];
258         char err_msg[MAXLINE];
259         int pos;
260         int err_pos;
261         int no_errors;
262 };
263
264
265 /*
266  * context for trap_name_resolved() to call ctlsettrap() once the 
267  * name->address resolution completes.
268  */
269 typedef struct settrap_parms_tag {
270         sockaddr_u      ifaddr;
271         int             ifaddr_nonnull;
272 } settrap_parms;
273
274
275 /* get text from T_ tokens */
276 const char * token_name(int token);
277
278 /* generic fifo routines for structs linked by 1st member */
279 typedef void (*fifo_deleter)(void*);
280 void *  destroy_gen_fifo(void *fifo, fifo_deleter func);
281 void *  append_gen_fifo(void *fifo, void *entry);
282 void *  concat_gen_fifos(void *first, void *second);
283 #define DESTROY_G_FIFO(pf, func)        \
284         ((pf) = destroy_gen_fifo((pf), (fifo_deleter)(func)))
285 #define APPEND_G_FIFO(pf, pe)           \
286         ((pf) = append_gen_fifo((pf), (pe)))
287 #define CONCAT_G_FIFOS(first, second)   \
288         ((first) = concat_gen_fifos((first), (second)))
289 #define HEAD_PFIFO(pf)                  \
290         (((pf) != NULL)                 \
291               ? HEAD_FIFO(*(pf))        \
292               : NULL)
293
294 peer_node *create_peer_node(int hmode, address_node *addr,
295                             attr_val_fifo *options);
296 unpeer_node *create_unpeer_node(address_node *addr);
297 address_node *create_address_node(char *addr, int type);
298 void destroy_address_node(address_node *my_node);
299 attr_val *create_attr_dval(int attr, double value);
300 attr_val *create_attr_ival(int attr, int value);
301 attr_val *create_attr_uval(int attr, u_int value);
302 attr_val *create_attr_rangeval(int attr, int first, int last);
303 attr_val *create_attr_sval(int attr, const char *s);
304 void      destroy_attr_val(attr_val *node);
305 filegen_node *create_filegen_node(int filegen_token,
306                                   attr_val_fifo *options);
307 string_node *create_string_node(char *str);
308 restrict_node *create_restrict_node(address_node *addr,
309                                     address_node *mask,
310                                     short ippeerlimit,
311                                     int_fifo *flags, int line_no);
312 int_node *create_int_node(int val);
313 addr_opts_node *create_addr_opts_node(address_node *addr,
314                                       attr_val_fifo *options);
315 sim_node *create_sim_node(attr_val_fifo *init_opts,
316                           server_info_fifo *servers);
317 setvar_node *create_setvar_node(char *var, char *val, int isdefault);
318 nic_rule_node *create_nic_rule_node(int match_class, char *if_name,
319                                     int action);
320
321 script_info *create_sim_script_info(double duration,
322                                     attr_val_fifo *script_queue);
323 server_info *create_sim_server(address_node *addr, double server_offset,
324                                script_info_fifo *script);
325
326 extern struct REMOTE_CONFIG_INFO remote_config;
327 void config_remotely(sockaddr_u *);
328
329 #ifdef SAVECONFIG
330 int dump_config_tree(config_tree *ptree, FILE *df, int comment);
331 int dump_all_config_trees(FILE *df, int comment);
332 #endif
333
334 #if defined(HAVE_SETRLIMIT)
335 void ntp_rlimit(int, rlim_t, int, const char *);
336 #endif
337
338 #endif  /* !defined(NTP_CONFIG_H) */