ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/conf.C
(Generate patch)

Comparing gvpe/src/conf.C (file contents):
Revision 1.12 by pcg, Mon Apr 7 01:12:56 2003 UTC vs.
Revision 1.39 by pcg, Sat Mar 26 03:16:24 2005 UTC

1/* 1/*
2 conf.c -- configuration code 2 conf.c -- configuration code
3 Copyright (C) 1998 Robert van der Meulen 3 Copyright (C) 2003-2005 Marc Lehmann <gvpe@schmorp.de>
4 1998-2002 Ivo Timmermans <ivo@o2w.nl>
5 2000-2002 Guus Sliepen <guus@sliepen.eu.org>
6 2000 Cris van Pelt <tribbel@arise.dhs.org>
7 2003 Marc Lehmann <pcg@goof.com>
8 4
5 This file is part of GVPE.
6
9 This program is free software; you can redistribute it and/or modify 7 GVPE is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or 9 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version. 10 (at your option) any later version.
13 11
14 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details. 15 GNU General Public License for more details.
18 16
19 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software 18 along with gvpe; if not, write to the Free Software
21 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22*/ 20*/
23 21
24#include "config.h" 22#include "config.h"
25 23
31#include <netdb.h> 29#include <netdb.h>
32#include <sys/stat.h> 30#include <sys/stat.h>
33#include <sys/types.h> 31#include <sys/types.h>
34#include <unistd.h> 32#include <unistd.h>
35 33
36#include <netinet/in.h> 34#include "netcompat.h"
37 35
38#include <openssl/err.h> 36#include <openssl/err.h>
39#include <openssl/pem.h> 37#include <openssl/pem.h>
40#include <openssl/rsa.h> 38#include <openssl/rsa.h>
41#include <openssl/rand.h> 39#include <openssl/rand.h>
42 40#include <openssl/bn.h>
43#include "gettext.h"
44 41
45#include "conf.h" 42#include "conf.h"
46#include "slog.h" 43#include "slog.h"
47#include "util.h" 44#include "util.h"
48 45
49char *confbase; 46char *confbase;
50char *thisnode; 47char *thisnode;
51char *identname; 48char *identname;
52char *pidfilename;
53 49
54struct configuration conf; 50struct configuration conf;
55 51
56u8 best_protocol (u8 protset) 52u8 best_protocol (u8 protset)
57{ 53{
58 if (protset & PROT_IPv4 ) return PROT_IPv4; 54 if (protset & PROT_IPv4 ) return PROT_IPv4;
55 if (protset & PROT_ICMPv4) return PROT_ICMPv4;
59 if (protset & PROT_UDPv4) return PROT_UDPv4; 56 if (protset & PROT_UDPv4 ) return PROT_UDPv4;
60 if (protset & PROT_TCPv4) return PROT_TCPv4; 57 if (protset & PROT_TCPv4 ) return PROT_TCPv4;
58 if (protset & PROT_DNSv4 ) return PROT_DNSv4;
61 59
62 return 0; 60 return 0;
63} 61}
64 62
65const char *strprotocol (u8 protocol) 63const char *strprotocol (u8 protocol)
66{ 64{
67 if (protocol & PROT_IPv4 ) return "rawip"; 65 if (protocol & PROT_IPv4 ) return "rawip";
66 if (protocol & PROT_ICMPv4) return "icmp";
68 if (protocol & PROT_UDPv4) return "udp"; 67 if (protocol & PROT_UDPv4 ) return "udp";
69 if (protocol & PROT_TCPv4) return "tcp"; 68 if (protocol & PROT_TCPv4 ) return "tcp";
69 if (protocol & PROT_DNSv4 ) return "dns";
70 70
71 return "<unknown>"; 71 return "<unknown>";
72} 72}
73 73
74void 74void
88 ); 88 );
89} 89}
90 90
91conf_node::~conf_node () 91conf_node::~conf_node ()
92{ 92{
93#if 0
94 // does not work, because string pointers etc. are shared
95 // is not called, however
93 if (rsa_key) 96 if (rsa_key)
94 RSA_free (rsa_key); 97 RSA_free (rsa_key);
95 98
96 free (nodename); 99 free (nodename);
97 free (hostname); 100 free (hostname);
101 free (if_up_data);
102#if ENABLE_DNS
103 free (domain);
104 free (dns_hostname);
105#endif
106#endif
98} 107}
99 108
100void configuration::init () 109void configuration::init ()
101{ 110{
102 memset (this, 0, sizeof (*this)); 111 memset (this, 0, sizeof (*this));
103 112
113 mtu = DEFAULT_MTU;
104 rekey = DEFAULT_REKEY; 114 rekey = DEFAULT_REKEY;
105 keepalive = DEFAULT_KEEPALIVE; 115 keepalive = DEFAULT_KEEPALIVE;
106 llevel = L_INFO; 116 llevel = L_INFO;
107 ip_proto = IPPROTO_GRE; 117 ip_proto = IPPROTO_GRE;
118#if ENABLE_ICMP
119 icmp_type = ICMP_ECHOREPLY;
120#endif
108 121
109 default_node.udp_port = DEFAULT_UDPPORT; 122 default_node.udp_port = DEFAULT_UDPPORT;
110 default_node.tcp_port = DEFAULT_UDPPORT; 123 default_node.tcp_port = DEFAULT_UDPPORT; // ehrm
111 default_node.connectmode = conf_node::C_ALWAYS; 124 default_node.connectmode = conf_node::C_ALWAYS;
112 default_node.compress = true; 125 default_node.compress = true;
113 default_node.protocols = PROT_UDPv4; 126 default_node.protocols = 0;
127 default_node.max_retry = DEFAULT_MAX_RETRY;
128 default_node.if_up_data = strdup ("");
129
130#if ENABLE_DNS
131 default_node.dns_port = 0; // default is 0 == client
132
133 dns_forw_host = strdup ("127.0.0.1");
134 dns_forw_port = 53;
135 dns_timeout_factor = DEFAULT_DNS_TIMEOUT_FACTOR;
136 dns_send_interval = DEFAULT_DNS_SEND_INTERVAL;
137 dns_overlap_factor = DEFAULT_DNS_OVERLAP_FACTOR;
138 dns_max_outstanding = DEFAULT_DNS_MAX_OUTSTANDING;
139#endif
140
141 conf.pidfilename = strdup (LOCALSTATEDIR "/run/gvpe.pid");
114} 142}
115 143
116void configuration::cleanup() 144void configuration::cleanup()
117{ 145{
118 if (rsa_key) 146 if (rsa_key)
119 RSA_free (rsa_key); 147 RSA_free (rsa_key);
120 148
121 rsa_key = 0; 149 rsa_key = 0;
122 150
151 free (pidfilename); pidfilename = 0;
123 free (ifname); ifname = 0; 152 free (ifname); ifname = 0;
124#if ENABLE_HTTP_PROXY 153#if ENABLE_HTTP_PROXY
125 free (proxy_host); proxy_host = 0; 154 free (proxy_host); proxy_host = 0;
126 free (proxy_auth); proxy_auth = 0; 155 free (proxy_auth); proxy_auth = 0;
156#endif
157#if ENABLE_DNS
158 free (dns_forw_host); dns_forw_host = 0;
127#endif 159#endif
128} 160}
129 161
130void 162void
131configuration::clear_config () 163configuration::clear_config ()
137 169
138 cleanup (); 170 cleanup ();
139 init (); 171 init ();
140} 172}
141 173
142#define parse_bool(target,name,trueval,falseval) \ 174#define parse_bool(target,name,trueval,falseval) do { \
143 if (!strcmp (val, "yes")) target = trueval; \ 175 if (!strcmp (val, "yes")) target = trueval; \
144 else if (!strcmp (val, "no")) target = falseval; \ 176 else if (!strcmp (val, "no")) target = falseval; \
145 else if (!strcmp (val, "true")) target = trueval; \ 177 else if (!strcmp (val, "true")) target = trueval; \
146 else if (!strcmp (val, "false")) target = falseval; \ 178 else if (!strcmp (val, "false")) target = falseval; \
147 else if (!strcmp (val, "on")) target = trueval; \ 179 else if (!strcmp (val, "on")) target = trueval; \
148 else if (!strcmp (val, "off")) target = falseval; \ 180 else if (!strcmp (val, "off")) target = falseval; \
149 else \ 181 else \
150 slog (L_WARN, \ 182 slog (L_WARN, \
151 _("illegal value for '%s', only 'yes|true|on' or 'no|false|off' allowed, at '%s' line %d"), \ 183 _("illegal value for '%s', only 'yes|true|on' or 'no|false|off' allowed, at '%s' line %d"), \
152 name, var, fname, lineno); 184 name, var, fname, lineno); \
185} while (0)
153 186
154void configuration::read_config (bool need_keys) 187void configuration::read_config (bool need_keys)
155{ 188{
156 char *fname; 189 char *fname;
157 FILE *f; 190 FILE *f;
158 191
159 clear_config (); 192 clear_config ();
160 193
161 asprintf (&fname, "%s/vped.conf", confbase); 194 asprintf (&fname, "%s/gvpe.conf", confbase);
162 f = fopen (fname, "r"); 195 f = fopen (fname, "r");
163 196
164 if (f) 197 if (f)
165 { 198 {
166 char line[16384]; 199 char line[16384];
196 val = strtok (NULL, "\t\n\r ="); 229 val = strtok (NULL, "\t\n\r =");
197 230
198 if (!val || val[0] == '#') 231 if (!val || val[0] == '#')
199 { 232 {
200 slog (L_WARN, 233 slog (L_WARN,
201 _("no value for variable `%s', at '%s' line %d"), 234 _("no value for variable `%s', at '%s' line %d, skipping."),
202 var, fname, lineno); 235 var, fname, lineno);
203 break; 236 continue;
204 } 237 }
205 238
206 if (!strcmp (var, "on")) 239 if (!strcmp (var, "on"))
207 { 240 {
208 if (!::thisnode 241 if (!::thisnode
223 else 256 else
224 slog (L_WARN, "'%s': %s, at '%s' line %d", val, UNKNOWN_LOGLEVEL, fname, line); 257 slog (L_WARN, "'%s': %s, at '%s' line %d", val, UNKNOWN_LOGLEVEL, fname, line);
225 } 258 }
226 else if (!strcmp (var, "ip-proto")) 259 else if (!strcmp (var, "ip-proto"))
227 ip_proto = atoi (val); 260 ip_proto = atoi (val);
261 else if (!strcmp (var, "icmp-type"))
262 {
263#if ENABLE_ICMP
264 icmp_type = atoi (val);
265#endif
266 }
228 267
229 // per config 268 // per config
230 else if (!strcmp (var, "node")) 269 else if (!strcmp (var, "node"))
231 { 270 {
232 default_node.id++; 271 default_node.id++;
250 289
251 if (!PEM_read_RSAPublicKey(f, &node->rsa_key, NULL, NULL)) 290 if (!PEM_read_RSAPublicKey(f, &node->rsa_key, NULL, NULL))
252 { 291 {
253 ERR_load_RSA_strings (); ERR_load_PEM_strings (); 292 ERR_load_RSA_strings (); ERR_load_PEM_strings ();
254 slog (L_ERR, _("unable to open public rsa key file '%s': %s"), fname, ERR_error_string (ERR_get_error (), 0)); 293 slog (L_ERR, _("unable to open public rsa key file '%s': %s"), fname, ERR_error_string (ERR_get_error (), 0));
255 exit (1); 294 exit (EXIT_FAILURE);
256 } 295 }
257 296
258 RSA_blinding_on (node->rsa_key, 0); 297 require (RSA_blinding_on (node->rsa_key, 0));
259 298
260 fclose (f); 299 fclose (f);
261 } 300 }
262 else 301 else
263 { 302 {
264 slog (need_keys ? L_ERR : L_NOTICE, _("unable to read public rsa key file '%s': %s"), fname, strerror (errno)); 303 slog (need_keys ? L_ERR : L_NOTICE, _("unable to read public rsa key file '%s': %s"), fname, strerror (errno));
265 304
266 if (need_keys) 305 if (need_keys)
267 exit (1); 306 exit (EXIT_FAILURE);
268 } 307 }
269 308
270 free (fname); 309 free (fname);
271 } 310 }
272 311
273 if (!::thisnode || !strcmp (node->nodename, ::thisnode)) 312 if (::thisnode && !strcmp (node->nodename, ::thisnode))
274 thisnode = node; 313 thisnode = node;
275 } 314 }
276 else if (!strcmp (var, "private-key")) 315 else if (!strcmp (var, "private-key"))
277 prikeyfile = strdup (val); 316 free (prikeyfile), prikeyfile = strdup (val);
278 else if (!strcmp (var, "ifpersist")) 317 else if (!strcmp (var, "ifpersist"))
279 {
280 parse_bool (ifpersist, "ifpersist", true, false); 318 parse_bool (ifpersist, "ifpersist", true, false);
281 }
282 else if (!strcmp (var, "ifname")) 319 else if (!strcmp (var, "ifname"))
283 ifname = strdup (val); 320 free (ifname), ifname = strdup (val);
284 else if (!strcmp (var, "rekey")) 321 else if (!strcmp (var, "rekey"))
285 rekey = atoi (val); 322 rekey = atoi (val);
286 else if (!strcmp (var, "keepalive")) 323 else if (!strcmp (var, "keepalive"))
287 keepalive = atoi (val); 324 keepalive = atoi (val);
288 else if (!strcmp (var, "mtu")) 325 else if (!strcmp (var, "mtu"))
289 mtu = atoi (val); 326 mtu = atoi (val);
290 else if (!strcmp (var, "if-up")) 327 else if (!strcmp (var, "if-up"))
291 script_if_up = strdup (val); 328 free (script_if_up), script_if_up = strdup (val);
292 else if (!strcmp (var, "node-up")) 329 else if (!strcmp (var, "node-up"))
293 script_node_up = strdup (val); 330 free (script_node_up), script_node_up = strdup (val);
294 else if (!strcmp (var, "node-down")) 331 else if (!strcmp (var, "node-down"))
295 script_node_down = strdup (val); 332 free (script_node_down), script_node_down = strdup (val);
333 else if (!strcmp (var, "pid-file"))
334 free (pidfilename), pidfilename = strdup (val);
335 else if (!strcmp (var, "dns-forw-host"))
336 {
337#if ENABLE_DNS
338 free (dns_forw_host), dns_forw_host = strdup (val);
339#endif
340 }
341 else if (!strcmp (var, "dns-forw-port"))
342 {
343#if ENABLE_DNS
344 dns_forw_port = atoi (val);
345#endif
346 }
347 else if (!strcmp (var, "dns-timeout-factor"))
348 {
349#if ENABLE_DNS
350 dns_timeout_factor = atof (val);
351#endif
352 }
353 else if (!strcmp (var, "dns-send-interval"))
354 {
355#if ENABLE_DNS
356 dns_send_interval = atoi (val);
357#endif
358 }
359 else if (!strcmp (var, "dns-overlap-factor"))
360 {
361#if ENABLE_DNS
362 dns_overlap_factor = atof (val);
363#endif
364 }
365 else if (!strcmp (var, "dns-max-outstanding"))
366 {
367#if ENABLE_DNS
368 dns_max_outstanding = atoi (val);
369#endif
370 }
371 else if (!strcmp (var, "http-proxy-host"))
372 {
296#if ENABLE_HTTP_PROXY 373#if ENABLE_HTTP_PROXY
297 else if (!strcmp (var, "http-proxy-host"))
298 proxy_host = strdup (val); 374 free (proxy_host), proxy_host = strdup (val);
375#endif
376 }
299 else if (!strcmp (var, "http-proxy-port")) 377 else if (!strcmp (var, "http-proxy-port"))
378 {
379#if ENABLE_HTTP_PROXY
300 proxy_port = atoi (val); 380 proxy_port = atoi (val);
381#endif
382 }
301 else if (!strcmp (var, "http-proxy-auth")) 383 else if (!strcmp (var, "http-proxy-auth"))
384 {
385#if ENABLE_HTTP_PROXY
302 proxy_auth = (char *)base64_encode ((const u8 *)val, strlen (val)); 386 proxy_auth = (char *)base64_encode ((const u8 *)val, strlen (val));
303#endif 387#endif
388 }
304 389
305 /* node-specific, non-defaultable */ 390 /* node-specific, non-defaultable */
306 else if (node != &default_node && !strcmp (var, "hostname")) 391 else if (node != &default_node && !strcmp (var, "hostname"))
307 {
308 free (node->hostname);
309 node->hostname = strdup (val); 392 free (node->hostname), node->hostname = strdup (val);
310 }
311 393
312 /* node-specific, defaultable */ 394 /* node-specific, defaultable */
313 else if (!strcmp (var, "udp-port")) 395 else if (!strcmp (var, "udp-port"))
314 node->udp_port = atoi (val); 396 node->udp_port = atoi (val);
315 else if (!strcmp (var, "tcp-port")) 397 else if (!strcmp (var, "tcp-port"))
316 node->tcp_port = atoi (val); 398 node->tcp_port = atoi (val);
399 else if (!strcmp (var, "dns-hostname"))
400 {
401#if ENABLE_DNS
402 free (node->dns_hostname), node->dns_hostname = strdup (val);
403#endif
404 }
405 else if (!strcmp (var, "dns-port"))
406 {
407#if ENABLE_DNS
408 node->dns_port = atoi (val);
409#endif
410 }
411 else if (!strcmp (var, "dns-domain"))
412 {
413#if ENABLE_DNS
414 free (node->domain), node->domain = strdup (val);
415#endif
416 }
417 else if (!strcmp (var, "if-up-data"))
418 free (node->if_up_data), node->if_up_data = strdup (val);
317 else if (!strcmp (var, "router-priority")) 419 else if (!strcmp (var, "router-priority"))
318 node->routerprio = atoi (val); 420 node->routerprio = atoi (val);
421 else if (!strcmp (var, "max-retry"))
422 node->max_retry = atoi (val);
319 else if (!strcmp (var, "connect")) 423 else if (!strcmp (var, "connect"))
320 { 424 {
321 if (!strcmp (val, "ondemand")) 425 if (!strcmp (val, "ondemand"))
322 node->connectmode = conf_node::C_ONDEMAND; 426 node->connectmode = conf_node::C_ONDEMAND;
323 else if (!strcmp (val, "never")) 427 else if (!strcmp (val, "never"))
326 node->connectmode = conf_node::C_ALWAYS; 430 node->connectmode = conf_node::C_ALWAYS;
327 else if (!strcmp (val, "disabled")) 431 else if (!strcmp (val, "disabled"))
328 node->connectmode = conf_node::C_DISABLED; 432 node->connectmode = conf_node::C_DISABLED;
329 else 433 else
330 slog (L_WARN, 434 slog (L_WARN,
331 _("illegal value for 'connectmode', use one of 'ondemand', 'never', 'always' or 'disabled', at '%s' line %d"), 435 _("illegal value for 'connectmode', use one of 'ondemand', 'never', 'always' or 'disabled', at '%s' line %d, ignoring."),
332 var, fname, lineno); 436 var, fname, lineno);
333 } 437 }
334 else if (!strcmp (var, "inherit-tos")) 438 else if (!strcmp (var, "inherit-tos"))
335 {
336 parse_bool (node->inherit_tos, "inherit-tos", true, false); 439 parse_bool (node->inherit_tos, "inherit-tos", true, false);
337 }
338 else if (!strcmp (var, "compress")) 440 else if (!strcmp (var, "compress"))
339 {
340 parse_bool (node->compress, "compress", true, false); 441 parse_bool (node->compress, "compress", true, false);
341 }
342 // all these bool options really really cost a lot of executable size! 442 // all these bool options really really cost a lot of executable size!
343 else if (!strcmp (var, "enable-tcp")) 443 else if (!strcmp (var, "enable-tcp"))
344 { 444 {
345#if ENABLE_TCP 445#if ENABLE_TCP
346 u8 v; parse_bool (v, "enable-tcp" , PROT_TCPv4, 0); node->protocols = (node->protocols & ~PROT_TCPv4) | v; 446 u8 v; parse_bool (v, "enable-tcp" , PROT_TCPv4, 0); node->protocols = (node->protocols & ~PROT_TCPv4) | v;
447#endif
448 }
449 else if (!strcmp (var, "enable-icmp"))
450 {
451#if ENABLE_ICMP
452 u8 v; parse_bool (v, "enable-icmp" , PROT_ICMPv4, 0); node->protocols = (node->protocols & ~PROT_ICMPv4) | v;
453#endif
454 }
455 else if (!strcmp (var, "enable-dns"))
456 {
457#if ENABLE_DNS
458 u8 v; parse_bool (v, "enable-dns" , PROT_DNSv4, 0); node->protocols = (node->protocols & ~PROT_DNSv4) | v;
347#endif 459#endif
348 } 460 }
349 else if (!strcmp (var, "enable-udp")) 461 else if (!strcmp (var, "enable-udp"))
350 { 462 {
351 u8 v; parse_bool (v, "enable-udp" , PROT_UDPv4, 0); node->protocols = (node->protocols & ~PROT_UDPv4) | v; 463 u8 v; parse_bool (v, "enable-udp" , PROT_UDPv4, 0); node->protocols = (node->protocols & ~PROT_UDPv4) | v;
356 } 468 }
357 469
358 // unknown or misplaced 470 // unknown or misplaced
359 else 471 else
360 slog (L_WARN, 472 slog (L_WARN,
361 _("unknown or misplaced variable `%s', at '%s' line %d"), 473 _("unknown or misplaced variable `%s', at '%s' line %d, skipping."),
362 var, fname, lineno); 474 var, fname, lineno);
363 } 475 }
364 476
365 fclose (f); 477 fclose (f);
366 } 478 }
367 else 479 else
368 { 480 {
369 slog (L_ERR, _("unable to read config file '%s': %s"), fname, strerror (errno)); 481 slog (L_ERR, _("unable to read config file '%s': %s"), fname, strerror (errno));
370 exit (1); 482 exit (EXIT_FAILURE);
371 } 483 }
372 484
373 free (fname); 485 free (fname);
374 486
375 fname = config_filename (prikeyfile, "hostkey"); 487 fname = config_filename (prikeyfile, "hostkey");
381 493
382 if (!PEM_read_RSAPrivateKey (f, &rsa_key, NULL, NULL)) 494 if (!PEM_read_RSAPrivateKey (f, &rsa_key, NULL, NULL))
383 { 495 {
384 ERR_load_RSA_strings (); ERR_load_PEM_strings (); 496 ERR_load_RSA_strings (); ERR_load_PEM_strings ();
385 slog (L_ERR, _("unable to read private rsa key file '%s': %s"), fname, ERR_error_string (ERR_get_error (), 0)); 497 slog (L_ERR, _("unable to read private rsa key file '%s': %s"), fname, ERR_error_string (ERR_get_error (), 0));
386 exit (1); 498 exit (EXIT_FAILURE);
387 } 499 }
388 500
389 RSA_blinding_on (rsa_key, 0); 501 require (RSA_blinding_on (rsa_key, 0));
390 502
391 fclose (f); 503 fclose (f);
392 } 504 }
393 else 505 else
394 { 506 {
395 slog (need_keys ? L_ERR : L_NOTICE, _("unable to open private rsa key file '%s': %s"), fname, strerror (errno)); 507 slog (need_keys ? L_ERR : L_NOTICE, _("unable to open private rsa key file '%s': %s"), fname, strerror (errno));
396 508
397 if (need_keys) 509 if (need_keys)
398 exit (1); 510 exit (EXIT_FAILURE);
399 } 511 }
512
513 if (need_keys && ::thisnode
514 && rsa_key && thisnode && thisnode->rsa_key)
515 if (BN_cmp (rsa_key->n, thisnode->rsa_key->n) != 0
516 || BN_cmp (rsa_key->e, thisnode->rsa_key->e) != 0)
517 {
518 slog (L_NOTICE, _("private hostkey and public node key mismatch: is '%s' the correct node?"), ::thisnode);
519 exit (EXIT_FAILURE);
520 }
400 521
401 free (fname); 522 free (fname);
402} 523}
403 524
404char *configuration::config_filename (const char *name, const char *dflt) 525char *configuration::config_filename (const char *name, const char *dflt)
426 printf (_("MTU: %d\n"), mtu); 547 printf (_("MTU: %d\n"), mtu);
427 printf (_("rekeying interval: %d\n"), rekey); 548 printf (_("rekeying interval: %d\n"), rekey);
428 printf (_("keepalive interval: %d\n"), keepalive); 549 printf (_("keepalive interval: %d\n"), keepalive);
429 printf (_("interface: %s\n"), ifname); 550 printf (_("interface: %s\n"), ifname);
430 printf (_("primary rsa key: %s\n"), prikeyfile ? prikeyfile : "<default>"); 551 printf (_("primary rsa key: %s\n"), prikeyfile ? prikeyfile : "<default>");
431 printf (_("rsa key size: %d\n"), rsa_key ? RSA_size (rsa_key) : -1); 552 printf (_("rsa key size: %d\n"), rsa_key ? RSA_size (rsa_key) * 8 : -1);
432 printf ("\n"); 553 printf ("\n");
433 554
434 printf ("%4s %-17s %s %-8.8s %-10.10s %s\n", 555 printf ("%4s %-17s %s %-8.8s %-10.10s %s\n",
435 _("ID#"), _("MAC"), _("Com"), _("Conmode"), _("Node"), _("Host:Port")); 556 _("ID#"), _("MAC"), _("Com"), _("Conmode"), _("Node"), _("Host:Port"));
436 557
440 printf ("\n"); 561 printf ("\n");
441} 562}
442 563
443configuration::configuration () 564configuration::configuration ()
444{ 565{
566 asprintf (&confbase, "%s/gvpe", CONFDIR);
567
445 init (); 568 init ();
446} 569}
447 570
448configuration::~configuration () 571configuration::~configuration ()
449{ 572{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines