Use bools and enums where appropriate.
This commit is contained in:
parent
471308e163
commit
eefa28059a
40 changed files with 767 additions and 765 deletions
102
src/conf.c
102
src/conf.c
|
@ -19,7 +19,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: conf.c,v 1.9.4.67 2003/07/18 14:10:27 guus Exp $
|
||||
$Id: conf.c,v 1.9.4.68 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -141,109 +141,109 @@ config_t *lookup_config_next(avl_tree_t *config_tree, config_t *cfg)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int get_config_bool(config_t *cfg, int *result)
|
||||
bool get_config_bool(config_t *cfg, bool *result)
|
||||
{
|
||||
cp();
|
||||
|
||||
if(!cfg)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
if(!strcasecmp(cfg->value, "yes")) {
|
||||
*result = 1;
|
||||
return 1;
|
||||
*result = true;
|
||||
return true;
|
||||
} else if(!strcasecmp(cfg->value, "no")) {
|
||||
*result = 0;
|
||||
return 1;
|
||||
*result = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
logger(LOG_ERR, _("\"yes\" or \"no\" expected for configuration variable %s in %s line %d"),
|
||||
cfg->variable, cfg->file, cfg->line);
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
int get_config_int(config_t *cfg, int *result)
|
||||
bool get_config_int(config_t *cfg, int *result)
|
||||
{
|
||||
cp();
|
||||
|
||||
if(!cfg)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
if(sscanf(cfg->value, "%d", result) == 1)
|
||||
return 1;
|
||||
return true;
|
||||
|
||||
logger(LOG_ERR, _("Integer expected for configuration variable %s in %s line %d"),
|
||||
cfg->variable, cfg->file, cfg->line);
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
int get_config_string(config_t *cfg, char **result)
|
||||
bool get_config_string(config_t *cfg, char **result)
|
||||
{
|
||||
cp();
|
||||
|
||||
if(!cfg)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
*result = xstrdup(cfg->value);
|
||||
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
int get_config_address(config_t *cfg, struct addrinfo **result)
|
||||
bool get_config_address(config_t *cfg, struct addrinfo **result)
|
||||
{
|
||||
struct addrinfo *ai;
|
||||
|
||||
cp();
|
||||
|
||||
if(!cfg)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
ai = str2addrinfo(cfg->value, NULL, 0);
|
||||
|
||||
if(ai) {
|
||||
*result = ai;
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
logger(LOG_ERR, _("Hostname or IP address expected for configuration variable %s in %s line %d"),
|
||||
cfg->variable, cfg->file, cfg->line);
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
int get_config_subnet(config_t *cfg, subnet_t ** result)
|
||||
bool get_config_subnet(config_t *cfg, subnet_t ** result)
|
||||
{
|
||||
subnet_t *subnet;
|
||||
|
||||
cp();
|
||||
|
||||
if(!cfg)
|
||||
return 0;
|
||||
return false;
|
||||
|
||||
subnet = str2net(cfg->value);
|
||||
|
||||
if(!subnet) {
|
||||
logger(LOG_ERR, _("Subnet expected for configuration variable %s in %s line %d"),
|
||||
cfg->variable, cfg->file, cfg->line);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Teach newbies what subnets are... */
|
||||
|
||||
if(((subnet->type == SUBNET_IPV4)
|
||||
&& maskcheck(&subnet->net.ipv4.address, subnet->net.ipv4.prefixlength, sizeof(ipv4_t)))
|
||||
&& !maskcheck(&subnet->net.ipv4.address, subnet->net.ipv4.prefixlength, sizeof(ipv4_t)))
|
||||
|| ((subnet->type == SUBNET_IPV6)
|
||||
&& maskcheck(&subnet->net.ipv6.address, subnet->net.ipv6.prefixlength, sizeof(ipv6_t)))) {
|
||||
&& !maskcheck(&subnet->net.ipv6.address, subnet->net.ipv6.prefixlength, sizeof(ipv6_t)))) {
|
||||
logger(LOG_ERR, _ ("Network address and prefix length do not match for configuration variable %s in %s line %d"),
|
||||
cfg->variable, cfg->file, cfg->line);
|
||||
free(subnet);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
*result = subnet;
|
||||
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -325,7 +325,8 @@ int read_config_file(avl_tree_t *config_tree, const char *fname)
|
|||
FILE *fp;
|
||||
char *buffer, *line;
|
||||
char *variable, *value;
|
||||
int lineno = 0, ignore = 0;
|
||||
int lineno = 0;
|
||||
bool ignore = false;
|
||||
config_t *cfg;
|
||||
size_t bufsize;
|
||||
|
||||
|
@ -366,7 +367,7 @@ int read_config_file(avl_tree_t *config_tree, const char *fname)
|
|||
continue; /* comment: ignore */
|
||||
|
||||
if(!strcmp(variable, "-----BEGIN"))
|
||||
ignore = 1;
|
||||
ignore = true;
|
||||
|
||||
if(!ignore) {
|
||||
value = strtok(NULL, "\t\n\r =");
|
||||
|
@ -387,7 +388,7 @@ int read_config_file(avl_tree_t *config_tree, const char *fname)
|
|||
}
|
||||
|
||||
if(!strcmp(variable, "-----END"))
|
||||
ignore = 0;
|
||||
ignore = false;
|
||||
}
|
||||
|
||||
free(buffer);
|
||||
|
@ -396,7 +397,7 @@ int read_config_file(avl_tree_t *config_tree, const char *fname)
|
|||
return err;
|
||||
}
|
||||
|
||||
int read_server_config()
|
||||
bool read_server_config()
|
||||
{
|
||||
char *fname;
|
||||
int x;
|
||||
|
@ -412,10 +413,10 @@ int read_server_config()
|
|||
|
||||
free(fname);
|
||||
|
||||
return x;
|
||||
return x == 0;
|
||||
}
|
||||
|
||||
int is_safe_path(const char *file)
|
||||
bool is_safe_path(const char *file)
|
||||
{
|
||||
#if !(defined(HAVE_CYGWIN) || defined(HAVE_MINGW))
|
||||
char *p;
|
||||
|
@ -426,7 +427,7 @@ int is_safe_path(const char *file)
|
|||
|
||||
if(*file != '/') {
|
||||
logger(LOG_ERR, _("`%s' is not an absolute path"), file);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
p = strrchr(file, '/');
|
||||
|
@ -442,13 +443,13 @@ int is_safe_path(const char *file)
|
|||
check1:
|
||||
if(lstat(f, &s) < 0) {
|
||||
logger(LOG_ERR, _("Couldn't stat `%s': %s"), f, strerror(errno));
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(s.st_uid != geteuid()) {
|
||||
logger(LOG_ERR, _("`%s' is owned by UID %d instead of %d"),
|
||||
f, s.st_uid, geteuid());
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(S_ISLNK(s.st_mode)) {
|
||||
|
@ -457,7 +458,7 @@ check1:
|
|||
if(readlink(f, l, MAXBUFSIZE) < 0) {
|
||||
logger(LOG_ERR, _("Unable to read symbolic link `%s': %s"), f,
|
||||
strerror(errno));
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
f = l;
|
||||
|
@ -470,16 +471,16 @@ check1:
|
|||
check2:
|
||||
if(lstat(f, &s) < 0 && errno != ENOENT) {
|
||||
logger(LOG_ERR, _("Couldn't stat `%s': %s"), f, strerror(errno));
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(errno == ENOENT)
|
||||
return 1;
|
||||
return true;
|
||||
|
||||
if(s.st_uid != geteuid()) {
|
||||
logger(LOG_ERR, _("`%s' is owned by UID %d instead of %d"),
|
||||
f, s.st_uid, geteuid());
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(S_ISLNK(s.st_mode)) {
|
||||
|
@ -488,7 +489,7 @@ check2:
|
|||
if(readlink(f, l, MAXBUFSIZE) < 0) {
|
||||
logger(LOG_ERR, _("Unable to read symbolic link `%s': %s"), f,
|
||||
strerror(errno));
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
f = l;
|
||||
|
@ -498,15 +499,14 @@ check2:
|
|||
if(s.st_mode & 0007) {
|
||||
/* Accessible by others */
|
||||
logger(LOG_ERR, _("`%s' has unsecure permissions"), f);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
FILE *ask_and_safe_open(const char *filename, const char *what,
|
||||
const char *mode)
|
||||
FILE *ask_and_safe_open(const char *filename, const char *what, bool safe, const char *mode)
|
||||
{
|
||||
FILE *r;
|
||||
char *directory;
|
||||
|
@ -562,12 +562,14 @@ FILE *ask_and_safe_open(const char *filename, const char *what,
|
|||
}
|
||||
|
||||
/* Then check the file for nasty attacks */
|
||||
if(!is_safe_path(fn)) { /* Do not permit any directories that are readable or writeable by other users. */
|
||||
fprintf(stderr, _("The file `%s' (or any of the leading directories) has unsafe permissions.\n"
|
||||
"I will not create or overwrite this file.\n"), fn);
|
||||
fclose(r);
|
||||
free(fn);
|
||||
return NULL;
|
||||
if(safe) {
|
||||
if(!is_safe_path(fn)) { /* Do not permit any directories that are readable or writeable by other users. */
|
||||
fprintf(stderr, _("The file `%s' (or any of the leading directories) has unsafe permissions.\n"
|
||||
"I will not create or overwrite this file.\n"), fn);
|
||||
fclose(r);
|
||||
free(fn);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
free(fn);
|
||||
|
|
23
src/conf.h
23
src/conf.h
|
@ -17,14 +17,13 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: conf.h,v 1.6.4.39 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: conf.h,v 1.6.4.40 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_CONF_H__
|
||||
#define __TINC_CONF_H__
|
||||
|
||||
#include "avl_tree.h"
|
||||
#include "subnet.h"
|
||||
|
||||
typedef struct config_t {
|
||||
char *variable;
|
||||
|
@ -33,11 +32,13 @@ typedef struct config_t {
|
|||
int line;
|
||||
} config_t;
|
||||
|
||||
#include "subnet.h"
|
||||
|
||||
extern avl_tree_t *config_tree;
|
||||
|
||||
extern int pingtimeout;
|
||||
extern int maxtimeout;
|
||||
extern int bypass_security;
|
||||
extern bool bypass_security;
|
||||
extern char *confbase;
|
||||
extern char *netname;
|
||||
|
||||
|
@ -48,15 +49,15 @@ extern void free_config(config_t *);
|
|||
extern void config_add(avl_tree_t *, config_t *);
|
||||
extern config_t *lookup_config(avl_tree_t *, char *);
|
||||
extern config_t *lookup_config_next(avl_tree_t *, config_t *);
|
||||
extern int get_config_bool(config_t *, int *);
|
||||
extern int get_config_int(config_t *, int *);
|
||||
extern int get_config_string(config_t *, char **);
|
||||
extern int get_config_address(config_t *, struct addrinfo **);
|
||||
extern int get_config_subnet(config_t *, struct subnet_t **);
|
||||
extern bool get_config_bool(config_t *, bool *);
|
||||
extern bool get_config_int(config_t *, int *);
|
||||
extern bool get_config_string(config_t *, char **);
|
||||
extern bool get_config_address(config_t *, struct addrinfo **);
|
||||
extern bool get_config_subnet(config_t *, struct subnet_t **);
|
||||
|
||||
extern int read_config_file(avl_tree_t *, const char *);
|
||||
extern int read_server_config(void);
|
||||
extern FILE *ask_and_safe_open(const char *, const char *, const char *);
|
||||
extern int is_safe_path(const char *);
|
||||
extern bool read_server_config(void);
|
||||
extern FILE *ask_and_safe_open(const char *, const char *, bool, const char *);
|
||||
extern bool is_safe_path(const char *);
|
||||
|
||||
#endif /* __TINC_CONF_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: connection.c,v 1.1.2.40 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: connection.c,v 1.1.2.41 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -128,7 +128,7 @@ void dump_connections(void)
|
|||
logger(LOG_DEBUG, _("End of connections."));
|
||||
}
|
||||
|
||||
int read_connection_config(connection_t *c)
|
||||
bool read_connection_config(connection_t *c)
|
||||
{
|
||||
char *fname;
|
||||
int x;
|
||||
|
@ -139,5 +139,5 @@ int read_connection_config(connection_t *c)
|
|||
x = read_config_file(c->config_tree, fname);
|
||||
free(fname);
|
||||
|
||||
return x;
|
||||
return x == 0;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: connection.h,v 1.1.2.34 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: connection.h,v 1.1.2.35 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_CONNECTION_H__
|
||||
|
@ -27,11 +27,6 @@
|
|||
#include <openssl/evp.h>
|
||||
|
||||
#include "avl_tree.h"
|
||||
#include "conf.h"
|
||||
#include "edge.h"
|
||||
#include "list.h"
|
||||
#include "net.h"
|
||||
#include "node.h"
|
||||
|
||||
#define OPTION_INDIRECT 0x0001
|
||||
#define OPTION_TCPONLY 0x0002
|
||||
|
@ -49,10 +44,15 @@ typedef struct connection_status_t {
|
|||
int unused:18;
|
||||
} connection_status_t;
|
||||
|
||||
#include "edge.h"
|
||||
#include "list.h"
|
||||
#include "net.h"
|
||||
#include "node.h"
|
||||
|
||||
typedef struct connection_t {
|
||||
char *name; /* name he claims to have */
|
||||
|
||||
sockaddr_t address; /* his real (internet) ip */
|
||||
union sockaddr_t address; /* his real (internet) ip */
|
||||
char *hostname; /* the hostname of its real ip */
|
||||
int protocol_version; /* used protocol */
|
||||
|
||||
|
@ -105,6 +105,6 @@ extern void free_connection(connection_t *);
|
|||
extern void connection_add(connection_t *);
|
||||
extern void connection_del(connection_t *);
|
||||
extern void dump_connections(void);
|
||||
extern int read_connection_config(connection_t *);
|
||||
extern bool read_connection_config(connection_t *);
|
||||
|
||||
#endif /* __TINC_CONNECTION_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.9 2003/07/18 13:41:35 guus Exp $
|
||||
$Id: device.c,v 1.1.2.10 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -84,7 +84,7 @@ HANDLE handle;
|
|||
pid_t reader_pid;
|
||||
int sp[2];
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
HKEY key, key2, adapterkey;
|
||||
int i;
|
||||
|
@ -108,7 +108,7 @@ int setup_device(void)
|
|||
|
||||
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, (OSTYPE > 4 ? NETCARD_REG_KEY_2000 : NETCARD_REG_KEY), 0, KEY_READ, &key)) {
|
||||
logger(LOG_ERR, _("Unable to read registry"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
for (i = 0; ; i++) {
|
||||
|
@ -120,7 +120,7 @@ int setup_device(void)
|
|||
|
||||
if(RegOpenKeyEx (key, adapterid, 0, KEY_READ, &adapterkey)) {
|
||||
logger(LOG_ERR, _("Unable to read registry"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
len = sizeof(productname);
|
||||
|
@ -146,7 +146,7 @@ skip:
|
|||
|
||||
if(!found) {
|
||||
logger(LOG_ERR, _("No CIPE adapters found!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get adapter name */
|
||||
|
@ -166,14 +166,14 @@ skip:
|
|||
|
||||
if(socketpair(AF_UNIX, SOCK_DGRAM, PF_UNIX, sp)) {
|
||||
logger(LOG_DEBUG, _("System call `%s' failed: %s"), "socketpair", strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
reader_pid = fork();
|
||||
|
||||
if(reader_pid == -1) {
|
||||
logger(LOG_DEBUG, _("System call `%s' failed: %s"), "fork", strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!reader_pid) {
|
||||
|
@ -213,7 +213,7 @@ skip:
|
|||
|
||||
if(handle == INVALID_HANDLE_VALUE) {
|
||||
logger(LOG_ERR, _("Could not open CIPE tap device for writing!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_fd = sp[0];
|
||||
|
@ -228,7 +228,7 @@ skip:
|
|||
read(device_fd, &gelukt, 1);
|
||||
if(gelukt != 1) {
|
||||
logger(LOG_DEBUG, "Tap reader failed!");
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!get_config_string(lookup_config(config_tree, "Interface"), &iface))
|
||||
|
@ -238,7 +238,7 @@ skip:
|
|||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -252,7 +252,7 @@ void close_device(void)
|
|||
kill(reader_pid, SIGKILL);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
|
||||
|
@ -261,7 +261,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if((lenin = read(sp[0], packet->data, MTU)) <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->len = lenin;
|
||||
|
@ -271,10 +271,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
ifdebug(TRAFFIC) logger(LOG_DEBUG, _("Read packet of %d bytes from %s"), packet->len,
|
||||
device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenout;
|
||||
|
||||
|
@ -285,12 +285,12 @@ int write_packet(vpn_packet_t *packet)
|
|||
|
||||
if(!WriteFile (handle, packet->data, packet->len, &lenout, NULL)) {
|
||||
logger(LOG_ERR, "Error while writing to %s %s", device_info, device);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.9 2003/07/18 13:41:36 guus Exp $
|
||||
$Id: device.c,v 1.1.2.10 2003/07/22 20:55:21 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -30,14 +30,13 @@
|
|||
#define DEFAULT_DEVICE "/dev/tun0"
|
||||
|
||||
int device_fd = -1;
|
||||
int device_type;
|
||||
char *device;
|
||||
char *iface;
|
||||
char *device_info;
|
||||
int device_total_in = 0;
|
||||
int device_total_out = 0;
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -49,14 +48,14 @@ int setup_device(void)
|
|||
|
||||
if((device_fd = open(device, O_RDWR | O_NONBLOCK)) < 0) {
|
||||
logger(LOG_ERR, _("Could not open %s: %s"), device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_info = _("MacOS/X tun device");
|
||||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -66,7 +65,7 @@ void close_device(void)
|
|||
close(device_fd);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
|
||||
|
@ -75,7 +74,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if((lenin = read(device_fd, packet->data + 14, MTU - 14)) <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->data[12] = 0x08;
|
||||
|
@ -88,10 +87,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
ifdebug(TRAFFIC) logger(LOG_DEBUG, _("Read packet of %d bytes from %s"),
|
||||
packet->len, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -101,10 +100,12 @@ int write_packet(vpn_packet_t *packet)
|
|||
if(write(device_fd, packet->data + 14, packet->len - 14) < 0) {
|
||||
logger(LOG_ERR, _("Error while writing to %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
10
src/device.h
10
src/device.h
|
@ -17,21 +17,23 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.h,v 1.1.2.10 2003/07/18 13:45:06 guus Exp $
|
||||
$Id: device.h,v 1.1.2.11 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_DEVICE_H__
|
||||
#define __TINC_DEVICE_H__
|
||||
|
||||
#include "net.h"
|
||||
|
||||
extern int device_fd;
|
||||
extern char *device;
|
||||
|
||||
extern char *iface;
|
||||
|
||||
extern int setup_device(void);
|
||||
extern bool setup_device(void);
|
||||
extern void close_device(void);
|
||||
extern int read_packet(vpn_packet_t *);
|
||||
extern int write_packet(vpn_packet_t *);
|
||||
extern bool read_packet(struct vpn_packet_t *);
|
||||
extern bool write_packet(struct vpn_packet_t *);
|
||||
extern void dump_device_stats(void);
|
||||
|
||||
#endif /* __TINC_DEVICE_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.12 2003/07/18 13:41:36 guus Exp $
|
||||
$Id: device.c,v 1.1.2.13 2003/07/22 20:55:21 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -30,14 +30,13 @@
|
|||
#define DEFAULT_DEVICE "/dev/tap0"
|
||||
|
||||
int device_fd = -1;
|
||||
int device_type;
|
||||
char *device;
|
||||
char *iface;
|
||||
char *device_info;
|
||||
int device_total_in = 0;
|
||||
int device_total_out = 0;
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -49,14 +48,14 @@ int setup_device(void)
|
|||
|
||||
if((device_fd = open(device, O_RDWR | O_NONBLOCK)) < 0) {
|
||||
logger(LOG_ERR, _("Could not open %s: %s"), device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_info = _("FreeBSD tap device");
|
||||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -66,7 +65,7 @@ void close_device(void)
|
|||
close(device_fd);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
|
||||
|
@ -75,7 +74,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if((lenin = read(device_fd, packet->data, MTU)) <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->len = lenin;
|
||||
|
@ -85,10 +84,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
ifdebug(TRAFFIC) logger(LOG_DEBUG, _("Read packet of %d bytes from %s"),
|
||||
packet->len, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -98,10 +97,12 @@ int write_packet(vpn_packet_t *packet)
|
|||
if(write(device_fd, packet->data, packet->len) < 0) {
|
||||
logger(LOG_ERR, _("Error while writing to %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
40
src/graph.c
40
src/graph.c
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: graph.c,v 1.1.2.26 2003/07/18 13:45:06 guus Exp $
|
||||
$Id: graph.c,v 1.1.2.27 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
/* We need to generate two trees from the graph:
|
||||
|
@ -69,7 +69,7 @@ void mst_kruskal(void)
|
|||
connection_t *c;
|
||||
int nodes = 0;
|
||||
int safe_edges = 0;
|
||||
int skipped;
|
||||
bool skipped;
|
||||
|
||||
cp();
|
||||
|
||||
|
@ -77,7 +77,7 @@ void mst_kruskal(void)
|
|||
|
||||
for(node = connection_tree->head; node; node = node->next) {
|
||||
c = (connection_t *) node->data;
|
||||
c->status.mst = 0;
|
||||
c->status.mst = false;
|
||||
}
|
||||
|
||||
/* Do we have something to do at all? */
|
||||
|
@ -91,33 +91,33 @@ void mst_kruskal(void)
|
|||
|
||||
for(node = node_tree->head; node; node = node->next) {
|
||||
n = (node_t *) node->data;
|
||||
n->status.visited = 0;
|
||||
n->status.visited = false;
|
||||
nodes++;
|
||||
}
|
||||
|
||||
/* Starting point */
|
||||
|
||||
((edge_t *) edge_weight_tree->head->data)->from->status.visited = 1;
|
||||
((edge_t *) edge_weight_tree->head->data)->from->status.visited = true;
|
||||
|
||||
/* Add safe edges */
|
||||
|
||||
for(skipped = 0, node = edge_weight_tree->head; node; node = next) {
|
||||
for(skipped = false, node = edge_weight_tree->head; node; node = next) {
|
||||
next = node->next;
|
||||
e = (edge_t *) node->data;
|
||||
|
||||
if(!e->reverse || e->from->status.visited == e->to->status.visited) {
|
||||
skipped = 1;
|
||||
skipped = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
e->from->status.visited = 1;
|
||||
e->to->status.visited = 1;
|
||||
e->from->status.visited = true;
|
||||
e->to->status.visited = true;
|
||||
|
||||
if(e->connection)
|
||||
e->connection->status.mst = 1;
|
||||
e->connection->status.mst = true;
|
||||
|
||||
if(e->reverse->connection)
|
||||
e->reverse->connection->status.mst = 1;
|
||||
e->reverse->connection->status.mst = true;
|
||||
|
||||
safe_edges++;
|
||||
|
||||
|
@ -125,7 +125,7 @@ void mst_kruskal(void)
|
|||
e->to->name, e->weight);
|
||||
|
||||
if(skipped) {
|
||||
skipped = 0;
|
||||
skipped = false;
|
||||
next = edge_weight_tree->head;
|
||||
continue;
|
||||
}
|
||||
|
@ -145,7 +145,7 @@ void sssp_bfs(void)
|
|||
edge_t *e;
|
||||
node_t *n;
|
||||
avl_tree_t *todo_tree;
|
||||
int indirect;
|
||||
bool indirect;
|
||||
char *name;
|
||||
char *address, *port;
|
||||
char *envp[7];
|
||||
|
@ -159,14 +159,14 @@ void sssp_bfs(void)
|
|||
|
||||
for(node = node_tree->head; node; node = node->next) {
|
||||
n = (node_t *) node->data;
|
||||
n->status.visited = 0;
|
||||
n->status.indirect = 1;
|
||||
n->status.visited = false;
|
||||
n->status.indirect = true;
|
||||
}
|
||||
|
||||
/* Begin with myself */
|
||||
|
||||
myself->status.visited = 1;
|
||||
myself->status.indirect = 0;
|
||||
myself->status.visited = true;
|
||||
myself->status.indirect = false;
|
||||
myself->nexthop = myself;
|
||||
myself->via = myself;
|
||||
node = avl_alloc_node();
|
||||
|
@ -212,7 +212,7 @@ void sssp_bfs(void)
|
|||
&& (!e->to->status.indirect || indirect))
|
||||
continue;
|
||||
|
||||
e->to->status.visited = 1;
|
||||
e->to->status.visited = true;
|
||||
e->to->status.indirect = indirect;
|
||||
e->to->nexthop = (n->nexthop == myself) ? e->to : n->nexthop;
|
||||
e->to->via = indirect ? n->via : e->to;
|
||||
|
@ -257,8 +257,8 @@ void sssp_bfs(void)
|
|||
n->name, n->hostname);
|
||||
}
|
||||
|
||||
n->status.validkey = 0;
|
||||
n->status.waitingforkey = 0;
|
||||
n->status.validkey = false;
|
||||
n->status.waitingforkey = false;
|
||||
|
||||
asprintf(&envp[0], "NETNAME=%s", netname ? : "");
|
||||
asprintf(&envp[1], "DEVICE=%s", device ? : "");
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.19 2003/07/18 13:41:36 guus Exp $
|
||||
$Id: device.c,v 1.1.2.20 2003/07/22 20:55:21 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -39,14 +39,14 @@
|
|||
#include "route.h"
|
||||
#include "utils.h"
|
||||
|
||||
enum {
|
||||
typedef enum device_type_t {
|
||||
DEVICE_TYPE_ETHERTAP,
|
||||
DEVICE_TYPE_TUN,
|
||||
DEVICE_TYPE_TAP,
|
||||
};
|
||||
} device_type_t;
|
||||
|
||||
int device_fd = -1;
|
||||
int device_type;
|
||||
device_type_t device_type;
|
||||
char *device;
|
||||
char *iface;
|
||||
char ifrname[IFNAMSIZ];
|
||||
|
@ -55,7 +55,7 @@ char *device_info;
|
|||
int device_total_in = 0;
|
||||
int device_total_out = 0;
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
|
||||
|
@ -74,7 +74,7 @@ int setup_device(void)
|
|||
|
||||
if(device_fd < 0) {
|
||||
logger(LOG_ERR, _("Could not open %s: %s"), device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef HAVE_TUNTAP
|
||||
|
@ -105,7 +105,7 @@ int setup_device(void)
|
|||
#endif
|
||||
{
|
||||
if(routing_mode == RMODE_ROUTER)
|
||||
overwrite_mac = 1;
|
||||
overwrite_mac = true;
|
||||
device_info = _("Linux ethertap device");
|
||||
device_type = DEVICE_TYPE_ETHERTAP;
|
||||
iface = rindex(device, '/') ? rindex(device, '/') + 1 : device;
|
||||
|
@ -113,7 +113,7 @@ int setup_device(void)
|
|||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -123,7 +123,7 @@ void close_device(void)
|
|||
close(device_fd);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
|
||||
|
@ -136,7 +136,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if(lenin <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"),
|
||||
device_info, device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->len = lenin + 10;
|
||||
|
@ -147,7 +147,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if(lenin <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"),
|
||||
device_info, device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->len = lenin;
|
||||
|
@ -158,7 +158,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if(lenin <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"),
|
||||
device_info, device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->len = lenin - 2;
|
||||
|
@ -170,10 +170,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
ifdebug(TRAFFIC) logger(LOG_DEBUG, _("Read packet of %d bytes from %s"), packet->len,
|
||||
device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -186,14 +186,14 @@ int write_packet(vpn_packet_t *packet)
|
|||
if(write(device_fd, packet->data + 10, packet->len - 10) < 0) {
|
||||
logger(LOG_ERR, _("Can't write to %s %s: %s"), device_info, device,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case DEVICE_TYPE_TAP:
|
||||
if(write(device_fd, packet->data, packet->len) < 0) {
|
||||
logger(LOG_ERR, _("Can't write to %s %s: %s"), device_info, device,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case DEVICE_TYPE_ETHERTAP:
|
||||
|
@ -202,14 +202,14 @@ int write_packet(vpn_packet_t *packet)
|
|||
if(write(device_fd, packet->data - 2, packet->len + 2) < 0) {
|
||||
logger(LOG_ERR, _("Can't write to %s %s: %s"), device_info, device,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
15
src/logger.c
15
src/logger.c
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: logger.c,v 1.1.2.4 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: logger.c,v 1.1.2.5 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -25,18 +25,20 @@
|
|||
#include "conf.h"
|
||||
#include "logger.h"
|
||||
|
||||
int debug_level = DEBUG_NOTHING;
|
||||
static int logmode = LOGMODE_STDERR;
|
||||
debug_t debug_level = DEBUG_NOTHING;
|
||||
static logmode_t logmode = LOGMODE_STDERR;
|
||||
static pid_t logpid;
|
||||
extern char *logfilename;
|
||||
static FILE *logfile = NULL;
|
||||
static const char *logident = NULL;
|
||||
|
||||
void openlogger(const char *ident, int mode) {
|
||||
void openlogger(const char *ident, logmode_t mode) {
|
||||
logident = ident;
|
||||
logmode = mode;
|
||||
|
||||
switch(mode) {
|
||||
case LOGMODE_NULL:
|
||||
break;
|
||||
case LOGMODE_STDERR:
|
||||
logpid = getpid();
|
||||
break;
|
||||
|
@ -58,6 +60,8 @@ void logger(int priority, const char *format, ...) {
|
|||
va_start(ap, format);
|
||||
|
||||
switch(logmode) {
|
||||
case LOGMODE_NULL:
|
||||
break;
|
||||
case LOGMODE_STDERR:
|
||||
vfprintf(stderr, format, ap);
|
||||
fprintf(stderr, "\n");
|
||||
|
@ -85,6 +89,9 @@ void logger(int priority, const char *format, ...) {
|
|||
|
||||
void closelogger(void) {
|
||||
switch(logmode) {
|
||||
case LOGMODE_NULL:
|
||||
case LOGMODE_STDERR:
|
||||
break;
|
||||
case LOGMODE_FILE:
|
||||
fclose(logfile);
|
||||
break;
|
||||
|
|
12
src/logger.h
12
src/logger.h
|
@ -1,6 +1,6 @@
|
|||
#ifndef __TINC_LOGGER_H__
|
||||
|
||||
enum {
|
||||
typedef enum debug_t {
|
||||
DEBUG_NOTHING = 0, /* Quiet mode, only show starting/stopping of the daemon */
|
||||
DEBUG_ALWAYS = 0,
|
||||
DEBUG_CONNECTIONS = 1, /* Show (dis)connects of other tinc daemons via TCP */
|
||||
|
@ -11,17 +11,17 @@ enum {
|
|||
DEBUG_TRAFFIC = 5, /* Show network traffic information */
|
||||
DEBUG_PACKET = 6, /* Show contents of each packet that is being sent/received */
|
||||
DEBUG_SCARY_THINGS = 10 /* You have been warned */
|
||||
};
|
||||
} debug_t;
|
||||
|
||||
enum {
|
||||
typedef enum logmode_t {
|
||||
LOGMODE_NULL,
|
||||
LOGMODE_STDERR,
|
||||
LOGMODE_FILE,
|
||||
LOGMODE_SYSLOG
|
||||
};
|
||||
} logmode_t;
|
||||
|
||||
extern int debug_level;
|
||||
extern void openlogger(const char *, int);
|
||||
extern debug_t debug_level;
|
||||
extern void openlogger(const char *, logmode_t);
|
||||
extern void logger(int, const char *, ...) __attribute__ ((format(printf, 2, 3)));
|
||||
extern void closelogger(void);
|
||||
|
||||
|
|
30
src/meta.c
30
src/meta.c
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: meta.c,v 1.1.2.36 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: meta.c,v 1.1.2.37 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -32,7 +32,7 @@
|
|||
#include "system.h"
|
||||
#include "utils.h"
|
||||
|
||||
int send_meta(connection_t *c, char *buffer, int length)
|
||||
bool send_meta(connection_t *c, char *buffer, int length)
|
||||
{
|
||||
char *bufp;
|
||||
int outlen;
|
||||
|
@ -58,13 +58,13 @@ int send_meta(connection_t *c, char *buffer, int length)
|
|||
continue;
|
||||
logger(LOG_ERR, _("Sending meta data to %s (%s) failed: %s"), c->name,
|
||||
c->hostname, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
bufp += result;
|
||||
length -= result;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void broadcast_meta(connection_t *from, char *buffer, int length)
|
||||
|
@ -82,13 +82,13 @@ void broadcast_meta(connection_t *from, char *buffer, int length)
|
|||
}
|
||||
}
|
||||
|
||||
int receive_meta(connection_t *c)
|
||||
bool receive_meta(connection_t *c)
|
||||
{
|
||||
int x;
|
||||
socklen_t l = sizeof(x);
|
||||
int oldlen, i;
|
||||
int lenin, reqlen;
|
||||
int decrypted = 0;
|
||||
bool decrypted = false;
|
||||
char inbuf[MAXBUFSIZE];
|
||||
|
||||
cp();
|
||||
|
@ -96,13 +96,13 @@ int receive_meta(connection_t *c)
|
|||
if(getsockopt(c->socket, SOL_SOCKET, SO_ERROR, &x, &l) < 0) {
|
||||
logger(LOG_ERR, _("This is a bug: %s:%d: %d:%s %s (%s)"), __FILE__,
|
||||
__LINE__, c->socket, strerror(errno), c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(x) {
|
||||
logger(LOG_ERR, _("Metadata socket error for %s (%s): %s"),
|
||||
c->name, c->hostname, strerror(x));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Strategy:
|
||||
|
@ -121,12 +121,12 @@ int receive_meta(connection_t *c)
|
|||
ifdebug(CONNECTIONS) logger(LOG_NOTICE, _("Connection closed by %s (%s)"),
|
||||
c->name, c->hostname);
|
||||
} else if(errno == EINTR)
|
||||
return 0;
|
||||
return true;
|
||||
else
|
||||
logger(LOG_ERR, _("Metadata socket read error for %s (%s): %s"),
|
||||
c->name, c->hostname, strerror(errno));
|
||||
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
oldlen = c->buflen;
|
||||
|
@ -138,7 +138,7 @@ int receive_meta(connection_t *c)
|
|||
if(c->status.decryptin && !decrypted) {
|
||||
EVP_DecryptUpdate(c->inctx, inbuf, &lenin, c->buffer + oldlen, lenin);
|
||||
memcpy(c->buffer + oldlen, inbuf, lenin);
|
||||
decrypted = 1;
|
||||
decrypted = true;
|
||||
}
|
||||
|
||||
/* Are we receiving a TCPpacket? */
|
||||
|
@ -172,8 +172,8 @@ int receive_meta(connection_t *c)
|
|||
|
||||
if(reqlen) {
|
||||
c->reqlen = reqlen;
|
||||
if(receive_request(c))
|
||||
return -1;
|
||||
if(!receive_request(c))
|
||||
return false;
|
||||
|
||||
c->buflen -= reqlen;
|
||||
lenin -= reqlen;
|
||||
|
@ -188,10 +188,10 @@ int receive_meta(connection_t *c)
|
|||
if(c->buflen >= MAXBUFSIZE) {
|
||||
logger(LOG_ERR, _("Metadata read buffer overflow for %s (%s)"),
|
||||
c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
c->last_ping_time = now;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: meta.h,v 1.1.2.9 2003/07/12 17:41:45 guus Exp $
|
||||
$Id: meta.h,v 1.1.2.10 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_META_H__
|
||||
|
@ -25,8 +25,8 @@
|
|||
|
||||
#include "connection.h"
|
||||
|
||||
extern int send_meta(connection_t *, const char *, int);
|
||||
extern int broadcast_meta(connection_t *, const char *, int);
|
||||
extern int receive_meta(connection_t *);
|
||||
extern bool send_meta(struct connection_t *, const char *, int);
|
||||
extern bool broadcast_meta(struct connection_t *, const char *, int);
|
||||
extern bool receive_meta(struct connection_t *);
|
||||
|
||||
#endif /* __TINC_META_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.1 2003/07/21 15:51:00 guus Exp $
|
||||
$Id: device.c,v 1.1.2.2 2003/07/22 20:55:21 guus Exp $
|
||||
*/
|
||||
|
||||
#error "Device driver for MinGW environment not written yet!"
|
||||
|
@ -85,7 +85,7 @@ HANDLE handle;
|
|||
pid_t reader_pid;
|
||||
int sp[2];
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
HKEY key, key2, adapterkey;
|
||||
int i;
|
||||
|
@ -109,7 +109,7 @@ int setup_device(void)
|
|||
|
||||
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, (OSTYPE > 4 ? NETCARD_REG_KEY_2000 : NETCARD_REG_KEY), 0, KEY_READ, &key)) {
|
||||
logger(LOG_ERR, _("Unable to read registry"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
for (i = 0; ; i++) {
|
||||
|
@ -121,7 +121,7 @@ int setup_device(void)
|
|||
|
||||
if(RegOpenKeyEx (key, adapterid, 0, KEY_READ, &adapterkey)) {
|
||||
logger(LOG_ERR, _("Unable to read registry"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
len = sizeof(productname);
|
||||
|
@ -147,7 +147,7 @@ skip:
|
|||
|
||||
if(!found) {
|
||||
logger(LOG_ERR, _("No CIPE adapters found!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get adapter name */
|
||||
|
@ -167,14 +167,14 @@ skip:
|
|||
|
||||
if(socketpair(AF_UNIX, SOCK_DGRAM, PF_UNIX, sp)) {
|
||||
logger(LOG_DEBUG, _("System call `%s' failed: %s"), "socketpair", strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
reader_pid = fork();
|
||||
|
||||
if(reader_pid == -1) {
|
||||
logger(LOG_DEBUG, _("System call `%s' failed: %s"), "fork", strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!reader_pid) {
|
||||
|
@ -214,7 +214,7 @@ skip:
|
|||
|
||||
if(handle == INVALID_HANDLE_VALUE) {
|
||||
logger(LOG_ERR, _("Could not open CIPE tap device for writing!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_fd = sp[0];
|
||||
|
@ -229,7 +229,7 @@ skip:
|
|||
read(device_fd, &gelukt, 1);
|
||||
if(gelukt != 1) {
|
||||
logger(LOG_DEBUG, "Tap reader failed!");
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!get_config_string(lookup_config(config_tree, "Interface"), &iface))
|
||||
|
@ -239,7 +239,7 @@ skip:
|
|||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -253,7 +253,7 @@ void close_device(void)
|
|||
kill(reader_pid, SIGKILL);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
|
||||
|
@ -262,7 +262,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if((lenin = read(sp[0], packet->data, MTU)) <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->len = lenin;
|
||||
|
@ -272,10 +272,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
ifdebug(TRAFFIC) logger(LOG_DEBUG, _("Read packet of %d bytes from %s"), packet->len,
|
||||
device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenout;
|
||||
|
||||
|
@ -286,12 +286,12 @@ int write_packet(vpn_packet_t *packet)
|
|||
|
||||
if(!WriteFile (handle, packet->data, packet->len, &lenout, NULL)) {
|
||||
logger(LOG_ERR, "Error while writing to %s %s", device_info, device);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
34
src/net.c
34
src/net.c
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: net.c,v 1.35.4.191 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: net.c,v 1.35.4.192 2003/07/22 20:55:19 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -40,9 +40,7 @@
|
|||
#include "route.h"
|
||||
#include "subnet.h"
|
||||
|
||||
int do_purge = 0;
|
||||
int sighup = 0;
|
||||
int sigalrm = 0;
|
||||
bool do_purge = false;
|
||||
|
||||
time_t now = 0;
|
||||
|
||||
|
@ -134,11 +132,11 @@ static int build_fdset(fd_set * fs)
|
|||
/*
|
||||
Terminate a connection:
|
||||
- Close the socket
|
||||
- Remove associated edge and tell other connections about it if report = 1
|
||||
- Remove associated edge and tell other connections about it if report = true
|
||||
- Check if we need to retry making an outgoing connection
|
||||
- Deactivate the host
|
||||
*/
|
||||
void terminate_connection(connection_t *c, int report)
|
||||
void terminate_connection(connection_t *c, bool report)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -148,8 +146,8 @@ void terminate_connection(connection_t *c, int report)
|
|||
ifdebug(CONNECTIONS) logger(LOG_NOTICE, _("Closing connection with %s (%s)"),
|
||||
c->name, c->hostname);
|
||||
|
||||
c->status.remove = 1;
|
||||
c->status.active = 0;
|
||||
c->status.remove = true;
|
||||
c->status.active = false;
|
||||
|
||||
if(c->node)
|
||||
c->node->connection = NULL;
|
||||
|
@ -200,8 +198,8 @@ static void check_dead_connections(void)
|
|||
if(c->status.pinged) {
|
||||
ifdebug(CONNECTIONS) logger(LOG_INFO, _("%s (%s) didn't respond to PING"),
|
||||
c->name, c->hostname);
|
||||
c->status.timeout = 1;
|
||||
terminate_connection(c, 1);
|
||||
c->status.timeout = true;
|
||||
terminate_connection(c, true);
|
||||
} else {
|
||||
send_ping(c);
|
||||
}
|
||||
|
@ -214,7 +212,7 @@ static void check_dead_connections(void)
|
|||
}
|
||||
ifdebug(CONNECTIONS) logger(LOG_WARNING, _("Timeout from %s (%s) during authentication"),
|
||||
c->name, c->hostname);
|
||||
terminate_connection(c, 0);
|
||||
terminate_connection(c, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -235,7 +233,7 @@ static void check_network_activity(fd_set * f)
|
|||
cp();
|
||||
|
||||
if(FD_ISSET(device_fd, f)) {
|
||||
if(!read_packet(&packet))
|
||||
if(read_packet(&packet))
|
||||
route_outgoing(&packet);
|
||||
}
|
||||
|
||||
|
@ -247,7 +245,7 @@ static void check_network_activity(fd_set * f)
|
|||
|
||||
if(FD_ISSET(c->socket, f)) {
|
||||
if(c->status.connecting) {
|
||||
c->status.connecting = 0;
|
||||
c->status.connecting = false;
|
||||
getsockopt(c->socket, SOL_SOCKET, SO_ERROR, &result, &len);
|
||||
|
||||
if(!result)
|
||||
|
@ -262,7 +260,7 @@ static void check_network_activity(fd_set * f)
|
|||
}
|
||||
}
|
||||
|
||||
if(receive_meta(c) < 0) {
|
||||
if(!receive_meta(c)) {
|
||||
terminate_connection(c, c->status.active);
|
||||
continue;
|
||||
}
|
||||
|
@ -321,7 +319,7 @@ void main_loop(void)
|
|||
|
||||
if(do_purge) {
|
||||
purge();
|
||||
do_purge = 0;
|
||||
do_purge = false;
|
||||
}
|
||||
|
||||
/* Let's check if everybody is still alive */
|
||||
|
@ -361,7 +359,7 @@ void main_loop(void)
|
|||
event->handler(event->data);
|
||||
event_del(event);
|
||||
}
|
||||
sigalrm = 0;
|
||||
sigalrm = false;
|
||||
}
|
||||
|
||||
if(sighup) {
|
||||
|
@ -370,14 +368,14 @@ void main_loop(void)
|
|||
char *fname;
|
||||
struct stat s;
|
||||
|
||||
sighup = 0;
|
||||
sighup = false;
|
||||
|
||||
/* Reread our own configuration file */
|
||||
|
||||
exit_configuration(&config_tree);
|
||||
init_configuration(&config_tree);
|
||||
|
||||
if(read_server_config()) {
|
||||
if(!read_server_config()) {
|
||||
logger(LOG_ERR, _("Unable to reread configuration file, exitting."));
|
||||
exit(1);
|
||||
}
|
||||
|
|
28
src/net.h
28
src/net.h
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: net.h,v 1.9.4.65 2003/07/18 12:16:24 guus Exp $
|
||||
$Id: net.h,v 1.9.4.66 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_NET_H__
|
||||
|
@ -54,7 +54,7 @@ typedef struct ipv6_t {
|
|||
|
||||
typedef short length_t;
|
||||
|
||||
typedef union {
|
||||
typedef union sockaddr_t {
|
||||
struct sockaddr sa;
|
||||
struct sockaddr_in in;
|
||||
struct sockaddr_in6 in6;
|
||||
|
@ -87,6 +87,12 @@ typedef struct packet_queue_t {
|
|||
queue_element_t *tail;
|
||||
} packet_queue_t;
|
||||
|
||||
typedef struct listen_socket_t {
|
||||
int tcp;
|
||||
int udp;
|
||||
sockaddr_t sa;
|
||||
} listen_socket_t;
|
||||
|
||||
#include "conf.h"
|
||||
|
||||
typedef struct outgoing_t {
|
||||
|
@ -97,12 +103,6 @@ typedef struct outgoing_t {
|
|||
struct addrinfo *aip;
|
||||
} outgoing_t;
|
||||
|
||||
typedef struct listen_socket_t {
|
||||
int tcp;
|
||||
int udp;
|
||||
sockaddr_t sa;
|
||||
} listen_socket_t;
|
||||
|
||||
extern int maxtimeout;
|
||||
extern int seconds_till_retry;
|
||||
extern int addressfamily;
|
||||
|
@ -111,8 +111,8 @@ extern listen_socket_t listen_socket[MAXSOCKETS];
|
|||
extern int listen_sockets;
|
||||
extern int keyexpires;
|
||||
extern int keylifetime;
|
||||
extern int do_prune;
|
||||
extern int do_purge;
|
||||
extern bool do_prune;
|
||||
extern bool do_purge;
|
||||
extern char *myport;
|
||||
extern time_t now;
|
||||
extern EVP_CIPHER_CTX packet_ctx;
|
||||
|
@ -125,19 +125,19 @@ extern void retry_outgoing(outgoing_t *);
|
|||
extern void handle_incoming_vpn_data(int);
|
||||
extern void finish_connecting(struct connection_t *);
|
||||
extern void do_outgoing_connection(struct connection_t *);
|
||||
extern int handle_new_meta_connection(int);
|
||||
extern bool handle_new_meta_connection(int);
|
||||
extern int setup_listen_socket(sockaddr_t *);
|
||||
extern int setup_vpn_in_socket(sockaddr_t *);
|
||||
extern void send_packet(struct node_t *, vpn_packet_t *);
|
||||
extern void receive_tcppacket(struct connection_t *, char *, int);
|
||||
extern void broadcast_packet(struct node_t *, vpn_packet_t *);
|
||||
extern int setup_network_connections(void);
|
||||
extern bool setup_network_connections(void);
|
||||
extern void setup_outgoing_connection(struct outgoing_t *);
|
||||
extern void try_outgoing_connections(void);
|
||||
extern void close_network_connections(void);
|
||||
extern void main_loop(void);
|
||||
extern void terminate_connection(struct connection_t *, int);
|
||||
extern void terminate_connection(struct connection_t *, bool);
|
||||
extern void flush_queue(struct node_t *);
|
||||
extern int read_rsa_public_key(struct connection_t *);
|
||||
extern bool read_rsa_public_key(struct connection_t *);
|
||||
|
||||
#endif /* __TINC_NET_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: net_packet.c,v 1.1.2.34 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: net_packet.c,v 1.1.2.35 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -239,7 +239,7 @@ static void send_udppacket(node_t *n, vpn_packet_t *inpkt)
|
|||
if(!n->status.waitingforkey)
|
||||
send_req_key(n->nexthop->connection, myself, n);
|
||||
|
||||
n->status.waitingforkey = 1;
|
||||
n->status.waitingforkey = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -350,8 +350,8 @@ void send_packet(node_t *n, vpn_packet_t *packet)
|
|||
n->name, via->name, n->via->hostname);
|
||||
|
||||
if((myself->options | via->options) & OPTION_TCPONLY) {
|
||||
if(send_tcppacket(via->connection, packet))
|
||||
terminate_connection(via->connection, 1);
|
||||
if(!send_tcppacket(via->connection, packet))
|
||||
terminate_connection(via->connection, true);
|
||||
} else
|
||||
send_udppacket(via, packet);
|
||||
}
|
||||
|
|
182
src/net_setup.c
182
src/net_setup.c
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: net_setup.c,v 1.1.2.36 2003/07/18 13:45:06 guus Exp $
|
||||
$Id: net_setup.c,v 1.1.2.37 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -44,7 +44,7 @@
|
|||
|
||||
char *myport;
|
||||
|
||||
int read_rsa_public_key(connection_t *c)
|
||||
bool read_rsa_public_key(connection_t *c)
|
||||
{
|
||||
FILE *fp;
|
||||
char *fname;
|
||||
|
@ -63,56 +63,50 @@ int read_rsa_public_key(connection_t *c)
|
|||
BN_hex2bn(&c->rsa_key->n, key);
|
||||
BN_hex2bn(&c->rsa_key->e, "FFFF");
|
||||
free(key);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Else, check for PublicKeyFile statement and read it */
|
||||
|
||||
if(get_config_string
|
||||
(lookup_config(c->config_tree, "PublicKeyFile"), &fname)) {
|
||||
if(is_safe_path(fname)) {
|
||||
fp = fopen(fname, "r");
|
||||
if(get_config_string(lookup_config(c->config_tree, "PublicKeyFile"), &fname)) {
|
||||
fp = fopen(fname, "r");
|
||||
|
||||
if(!fp) {
|
||||
logger(LOG_ERR, _("Error reading RSA public key file `%s': %s"),
|
||||
fname, strerror(errno));
|
||||
free(fname);
|
||||
return -1;
|
||||
}
|
||||
|
||||
free(fname);
|
||||
c->rsa_key = PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL);
|
||||
fclose(fp);
|
||||
|
||||
if(c->rsa_key)
|
||||
return 0; /* Woohoo. */
|
||||
|
||||
/* If it fails, try PEM_read_RSA_PUBKEY. */
|
||||
fp = fopen(fname, "r");
|
||||
|
||||
if(!fp) {
|
||||
logger(LOG_ERR, _("Error reading RSA public key file `%s': %s"),
|
||||
fname, strerror(errno));
|
||||
free(fname);
|
||||
return -1;
|
||||
}
|
||||
|
||||
free(fname);
|
||||
c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL);
|
||||
fclose(fp);
|
||||
|
||||
if(c->rsa_key) {
|
||||
// RSA_blinding_on(c->rsa_key, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
logger(LOG_ERR, _("Reading RSA public key file `%s' failed: %s"),
|
||||
if(!fp) {
|
||||
logger(LOG_ERR, _("Error reading RSA public key file `%s': %s"),
|
||||
fname, strerror(errno));
|
||||
return -1;
|
||||
} else {
|
||||
free(fname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
free(fname);
|
||||
c->rsa_key = PEM_read_RSAPublicKey(fp, &c->rsa_key, NULL, NULL);
|
||||
fclose(fp);
|
||||
|
||||
if(c->rsa_key)
|
||||
return true; /* Woohoo. */
|
||||
|
||||
/* If it fails, try PEM_read_RSA_PUBKEY. */
|
||||
fp = fopen(fname, "r");
|
||||
|
||||
if(!fp) {
|
||||
logger(LOG_ERR, _("Error reading RSA public key file `%s': %s"),
|
||||
fname, strerror(errno));
|
||||
free(fname);
|
||||
return false;
|
||||
}
|
||||
|
||||
free(fname);
|
||||
c->rsa_key = PEM_read_RSA_PUBKEY(fp, &c->rsa_key, NULL, NULL);
|
||||
fclose(fp);
|
||||
|
||||
if(c->rsa_key) {
|
||||
// RSA_blinding_on(c->rsa_key, NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
logger(LOG_ERR, _("Reading RSA public key file `%s' failed: %s"),
|
||||
fname, strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Else, check if a harnessed public key is in the config file */
|
||||
|
@ -128,7 +122,7 @@ int read_rsa_public_key(connection_t *c)
|
|||
free(fname);
|
||||
|
||||
if(c->rsa_key)
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
/* Try again with PEM_read_RSA_PUBKEY. */
|
||||
|
||||
|
@ -144,14 +138,14 @@ int read_rsa_public_key(connection_t *c)
|
|||
free(fname);
|
||||
|
||||
if(c->rsa_key)
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
logger(LOG_ERR, _("No public key for %s specified!"), c->name);
|
||||
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
int read_rsa_private_key(void)
|
||||
bool read_rsa_private_key(void)
|
||||
{
|
||||
FILE *fp;
|
||||
char *fname, *key;
|
||||
|
@ -164,7 +158,7 @@ int read_rsa_private_key(void)
|
|||
BN_hex2bn(&myself->connection->rsa_key->d, key);
|
||||
BN_hex2bn(&myself->connection->rsa_key->e, "FFFF");
|
||||
free(key);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!get_config_string(lookup_config(config_tree, "PrivateKeyFile"), &fname))
|
||||
|
@ -177,7 +171,7 @@ int read_rsa_private_key(void)
|
|||
logger(LOG_ERR, _("Error reading RSA private key file `%s': %s"),
|
||||
fname, strerror(errno));
|
||||
free(fname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
free(fname);
|
||||
|
@ -188,27 +182,28 @@ int read_rsa_private_key(void)
|
|||
if(!myself->connection->rsa_key) {
|
||||
logger(LOG_ERR, _("Reading RSA private key file `%s' failed: %s"),
|
||||
fname, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
free(fname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
Configure node_t myself and set up the local sockets (listen only)
|
||||
*/
|
||||
int setup_myself(void)
|
||||
bool setup_myself(void)
|
||||
{
|
||||
config_t *cfg;
|
||||
subnet_t *subnet;
|
||||
char *name, *hostname, *mode, *afname, *cipher, *digest;
|
||||
char *address = NULL;
|
||||
struct addrinfo hint, *ai, *aip;
|
||||
int choice, err;
|
||||
bool choice;
|
||||
int err;
|
||||
|
||||
cp();
|
||||
|
||||
|
@ -224,28 +219,28 @@ int setup_myself(void)
|
|||
|
||||
if(!get_config_string(lookup_config(config_tree, "Name"), &name)) { /* Not acceptable */
|
||||
logger(LOG_ERR, _("Name for tinc daemon required!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(check_id(name)) {
|
||||
if(!check_id(name)) {
|
||||
logger(LOG_ERR, _("Invalid name for myself!"));
|
||||
free(name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
myself->name = name;
|
||||
myself->connection->name = xstrdup(name);
|
||||
|
||||
if(read_rsa_private_key())
|
||||
return -1;
|
||||
if(!read_rsa_private_key())
|
||||
return false;
|
||||
|
||||
if(read_connection_config(myself->connection)) {
|
||||
if(!read_connection_config(myself->connection)) {
|
||||
logger(LOG_ERR, _("Cannot open host configuration file for myself!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(read_rsa_public_key(myself->connection))
|
||||
return -1;
|
||||
if(!read_rsa_public_key(myself->connection))
|
||||
return false;
|
||||
|
||||
if(!get_config_string
|
||||
(lookup_config(myself->connection->config_tree, "Port"), &myport))
|
||||
|
@ -257,7 +252,7 @@ int setup_myself(void)
|
|||
|
||||
while(cfg) {
|
||||
if(!get_config_subnet(cfg, &subnet))
|
||||
return -1;
|
||||
return false;
|
||||
|
||||
subnet_add(myself, subnet);
|
||||
|
||||
|
@ -274,14 +269,11 @@ int setup_myself(void)
|
|||
if(choice)
|
||||
myself->options |= OPTION_TCPONLY;
|
||||
|
||||
if(get_config_bool
|
||||
(lookup_config(myself->connection->config_tree, "IndirectData"),
|
||||
&choice))
|
||||
if(get_config_bool(lookup_config(myself->connection->config_tree, "IndirectData"), &choice))
|
||||
if(choice)
|
||||
myself->options |= OPTION_INDIRECT;
|
||||
|
||||
if(get_config_bool
|
||||
(lookup_config(myself->connection->config_tree, "TCPOnly"), &choice))
|
||||
if(get_config_bool(lookup_config(myself->connection->config_tree, "TCPOnly"), &choice))
|
||||
if(choice)
|
||||
myself->options |= OPTION_TCPONLY;
|
||||
|
||||
|
@ -297,14 +289,14 @@ int setup_myself(void)
|
|||
routing_mode = RMODE_HUB;
|
||||
else {
|
||||
logger(LOG_ERR, _("Invalid routing mode!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
free(mode);
|
||||
} else
|
||||
routing_mode = RMODE_ROUTER;
|
||||
|
||||
get_config_bool(lookup_config(config_tree, "PriorityInheritance"),
|
||||
&priorityinheritance);
|
||||
get_config_bool(lookup_config(config_tree, "PriorityInheritance"), &priorityinheritance);
|
||||
|
||||
#if !defined(SOL_IP) || !defined(IP_TOS)
|
||||
if(priorityinheritance)
|
||||
logger(LOG_WARNING, _("PriorityInheritance not supported on this platform"));
|
||||
|
@ -313,12 +305,10 @@ int setup_myself(void)
|
|||
if(!get_config_int(lookup_config(config_tree, "MACExpire"), &macexpire))
|
||||
macexpire = 600;
|
||||
|
||||
if(get_config_int
|
||||
(lookup_config(myself->connection->config_tree, "MaxTimeout"),
|
||||
&maxtimeout)) {
|
||||
if(get_config_int(lookup_config(myself->connection->config_tree, "MaxTimeout"), &maxtimeout)) {
|
||||
if(maxtimeout <= 0) {
|
||||
logger(LOG_ERR, _("Bogus maximum timeout!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
maxtimeout = 900;
|
||||
|
@ -332,7 +322,7 @@ int setup_myself(void)
|
|||
addressfamily = AF_UNSPEC;
|
||||
else {
|
||||
logger(LOG_ERR, _("Invalid address family!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
free(afname);
|
||||
}
|
||||
|
@ -350,7 +340,7 @@ int setup_myself(void)
|
|||
|
||||
if(!myself->cipher) {
|
||||
logger(LOG_ERR, _("Unrecognized cipher type!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else
|
||||
|
@ -385,7 +375,7 @@ int setup_myself(void)
|
|||
|
||||
if(!myself->digest) {
|
||||
logger(LOG_ERR, _("Unrecognized digest type!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else
|
||||
|
@ -399,10 +389,10 @@ int setup_myself(void)
|
|||
if(myself->digest) {
|
||||
if(myself->maclength > myself->digest->md_size) {
|
||||
logger(LOG_ERR, _("MAC length exceeds size of digest!"));
|
||||
return -1;
|
||||
return false;
|
||||
} else if(myself->maclength < 0) {
|
||||
logger(LOG_ERR, _("Bogus MAC length!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else
|
||||
|
@ -417,7 +407,7 @@ int setup_myself(void)
|
|||
&myself->compression)) {
|
||||
if(myself->compression < 0 || myself->compression > 11) {
|
||||
logger(LOG_ERR, _("Bogus compression level!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
myself->compression = 0;
|
||||
|
@ -428,8 +418,8 @@ int setup_myself(void)
|
|||
|
||||
myself->nexthop = myself;
|
||||
myself->via = myself;
|
||||
myself->status.active = 1;
|
||||
myself->status.reachable = 1;
|
||||
myself->status.active = true;
|
||||
myself->status.reachable = true;
|
||||
node_add(myself);
|
||||
|
||||
graph();
|
||||
|
@ -450,7 +440,7 @@ int setup_myself(void)
|
|||
if(err || !ai) {
|
||||
logger(LOG_ERR, _("System call `%s' failed: %s"), "getaddrinfo",
|
||||
gai_strerror(err));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
listen_sockets = 0;
|
||||
|
@ -484,16 +474,16 @@ int setup_myself(void)
|
|||
logger(LOG_NOTICE, _("Ready"));
|
||||
else {
|
||||
logger(LOG_ERR, _("Unable to create any listening socket!"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
setup all initial network connections
|
||||
*/
|
||||
int setup_network_connections(void)
|
||||
bool setup_network_connections(void)
|
||||
{
|
||||
char *envp[5];
|
||||
int i;
|
||||
|
@ -516,11 +506,11 @@ int setup_network_connections(void)
|
|||
} else
|
||||
pingtimeout = 60;
|
||||
|
||||
if(setup_device() < 0)
|
||||
return -1;
|
||||
if(!setup_device())
|
||||
return false;
|
||||
|
||||
if(setup_myself() < 0)
|
||||
return -1;
|
||||
if(!setup_myself())
|
||||
return false;
|
||||
|
||||
/* Run tinc-up script to further initialize the tap interface */
|
||||
asprintf(&envp[0], "NETNAME=%s", netname ? : "");
|
||||
|
@ -536,7 +526,7 @@ int setup_network_connections(void)
|
|||
|
||||
try_outgoing_connections();
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -557,11 +547,11 @@ void close_network_connections(void)
|
|||
|
||||
if(c->outgoing)
|
||||
free(c->outgoing->name), free(c->outgoing), c->outgoing = NULL;
|
||||
terminate_connection(c, 0);
|
||||
terminate_connection(c, false);
|
||||
}
|
||||
|
||||
if(myself && myself->connection)
|
||||
terminate_connection(myself->connection, 0);
|
||||
terminate_connection(myself->connection, false);
|
||||
|
||||
for(i = 0; i < listen_sockets; i++) {
|
||||
close(listen_socket[i].tcp);
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: net_socket.c,v 1.1.2.29 2003/07/18 13:45:06 guus Exp $
|
||||
$Id: net_socket.c,v 1.1.2.30 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -221,7 +221,7 @@ begin:
|
|||
if(!c->outgoing->cfg) {
|
||||
ifdebug(CONNECTIONS) logger(LOG_ERR, _("Could not set up a meta connection to %s"),
|
||||
c->name);
|
||||
c->status.remove = 1;
|
||||
c->status.remove = true;
|
||||
retry_outgoing(c->outgoing);
|
||||
return;
|
||||
}
|
||||
|
@ -292,7 +292,7 @@ begin:
|
|||
|
||||
if(result == -1) {
|
||||
if(errno == EINPROGRESS) {
|
||||
c->status.connecting = 1;
|
||||
c->status.connecting = true;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -357,7 +357,7 @@ void setup_outgoing_connection(outgoing_t *outgoing)
|
|||
accept a new tcp connect and create a
|
||||
new connection
|
||||
*/
|
||||
int handle_new_meta_connection(int sock)
|
||||
bool handle_new_meta_connection(int sock)
|
||||
{
|
||||
connection_t *c;
|
||||
sockaddr_t sa;
|
||||
|
@ -370,7 +370,7 @@ int handle_new_meta_connection(int sock)
|
|||
if(fd < 0) {
|
||||
logger(LOG_ERR, _("Accepting a new connection failed: %s"),
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
sockaddrunmap(&sa);
|
||||
|
@ -393,7 +393,7 @@ int handle_new_meta_connection(int sock)
|
|||
c->allow_request = ID;
|
||||
send_id(c);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void try_outgoing_connections(void)
|
||||
|
@ -408,7 +408,7 @@ void try_outgoing_connections(void)
|
|||
cfg = lookup_config_next(config_tree, cfg)) {
|
||||
get_config_string(cfg, &name);
|
||||
|
||||
if(check_id(name)) {
|
||||
if(!check_id(name)) {
|
||||
logger(LOG_ERR,
|
||||
_("Invalid name for outgoing connection in %s line %d"),
|
||||
cfg->file, cfg->line);
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.11 2003/07/18 13:41:36 guus Exp $
|
||||
$Id: device.c,v 1.1.2.12 2003/07/22 20:55:21 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -33,7 +33,6 @@
|
|||
#define DEVICE_TYPE_TUNTAP 1
|
||||
|
||||
int device_fd = -1;
|
||||
int device_type;
|
||||
char *device;
|
||||
char *iface;
|
||||
char *device_info;
|
||||
|
@ -41,7 +40,7 @@ char *device_info;
|
|||
int device_total_in = 0;
|
||||
int device_total_out = 0;
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -52,14 +51,14 @@ int setup_device(void)
|
|||
iface = rindex(device, '/') ? rindex(device, '/') + 1 : device;
|
||||
if((device_fd = open(device, O_RDWR | O_NONBLOCK)) < 0) {
|
||||
logger(LOG_ERR, _("Could not open %s: %s"), device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_info = _("NetBSD tun device");
|
||||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -69,7 +68,7 @@ void close_device(void)
|
|||
close(device_fd);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
|
||||
|
@ -78,7 +77,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if((lenin = read(device_fd, packet->data + 14, MTU - 14)) <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->data[12] = 0x08;
|
||||
|
@ -92,10 +91,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
device_info);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -105,10 +104,12 @@ int write_packet(vpn_packet_t *packet)
|
|||
if(write(device_fd, packet->data + 14, packet->len - 14) < 0) {
|
||||
logger(LOG_ERR, _("Can't write to %s %s: %s"), device_info, device,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
12
src/netutl.c
12
src/netutl.c
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: netutl.c,v 1.12.4.47 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: netutl.c,v 1.12.4.48 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -28,7 +28,7 @@
|
|||
#include "utils.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
int hostnames = 0;
|
||||
bool hostnames = false;
|
||||
|
||||
/*
|
||||
Turn a string into a struct addrinfo.
|
||||
|
@ -244,7 +244,7 @@ void maskcpy(void *va, void *vb, int masklen, int len)
|
|||
a[i] = 0;
|
||||
}
|
||||
|
||||
int maskcheck(void *va, int masklen, int len)
|
||||
bool maskcheck(void *va, int masklen, int len)
|
||||
{
|
||||
int i;
|
||||
char *a = va;
|
||||
|
@ -255,11 +255,11 @@ int maskcheck(void *va, int masklen, int len)
|
|||
masklen %= 8;
|
||||
|
||||
if(masklen && a[i++] & (0xff >> masklen))
|
||||
return -1;
|
||||
return false;
|
||||
|
||||
for(; i < len; i++)
|
||||
if(a[i] != 0)
|
||||
return -2;
|
||||
return false;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: netutl.h,v 1.2.4.16 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: netutl.h,v 1.2.4.17 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_NETUTL_H__
|
||||
|
@ -25,7 +25,7 @@
|
|||
|
||||
#include "net.h"
|
||||
|
||||
extern int hostnames;
|
||||
extern bool hostnames;
|
||||
|
||||
extern struct addrinfo *str2addrinfo(char *, char *, int);
|
||||
extern sockaddr_t str2sockaddr(char *, char *);
|
||||
|
@ -36,6 +36,6 @@ extern void sockaddrunmap(sockaddr_t *);
|
|||
extern int maskcmp(void *, void *, int, int);
|
||||
extern void maskcpy(void *, void *, int, int);
|
||||
extern void mask(void *, int, int);
|
||||
extern int maskcheck(void *, int, int);
|
||||
extern bool maskcheck(void *, int, int);
|
||||
|
||||
#endif /* __TINC_NETUTL_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: node.h,v 1.1.2.25 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: node.h,v 1.1.2.26 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_NODE_H__
|
||||
|
@ -45,7 +45,7 @@ typedef struct node_t {
|
|||
sockaddr_t address; /* his real (internet) ip to send UDP packets to */
|
||||
char *hostname; /* the hostname of its real ip */
|
||||
|
||||
struct node_status_t status;
|
||||
node_status_t status;
|
||||
|
||||
const EVP_CIPHER *cipher; /* Cipher type for UDP packets */
|
||||
char *key; /* Cipher key and iv */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.16 2003/07/18 13:41:36 guus Exp $
|
||||
$Id: device.c,v 1.1.2.17 2003/07/22 20:55:21 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -33,7 +33,6 @@
|
|||
#define DEVICE_TYPE_TUNTAP 1
|
||||
|
||||
int device_fd = -1;
|
||||
int device_type;
|
||||
char *device;
|
||||
char *iface;
|
||||
char *device_info;
|
||||
|
@ -41,7 +40,7 @@ char *device_info;
|
|||
int device_total_in = 0;
|
||||
int device_total_out = 0;
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -52,14 +51,14 @@ int setup_device(void)
|
|||
iface = rindex(device, '/') ? rindex(device, '/') + 1 : device;
|
||||
if((device_fd = open(device, O_RDWR | O_NONBLOCK)) < 0) {
|
||||
logger(LOG_ERR, _("Could not open %s: %s"), device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_info = _("OpenBSD tun device");
|
||||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -69,7 +68,7 @@ void close_device(void)
|
|||
close(device_fd);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
u_int32_t type;
|
||||
|
@ -80,7 +79,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if((lenin = readv(device_fd, vector, 2)) <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (ntohl(type)) {
|
||||
|
@ -98,7 +97,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
ifdebug(TRAFFIC) logger(LOG_ERR,
|
||||
_ ("Unknown address family %d while reading packet from %s %s"),
|
||||
ntohl(type), device_info, device);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->len = lenin + 10;
|
||||
|
@ -109,10 +108,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
device_info);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
u_int32_t type;
|
||||
struct iovec vector[2];
|
||||
|
@ -136,7 +135,7 @@ int write_packet(vpn_packet_t *packet)
|
|||
ifdebug(TRAFFIC) logger(LOG_ERR,
|
||||
_("Unknown address family %d while writing packet to %s %s"),
|
||||
af, device_info, device);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
vector[0].iov_base = &type;
|
||||
|
@ -147,10 +146,12 @@ int write_packet(vpn_packet_t *packet)
|
|||
if(writev(device_fd, vector, 2) < 0) {
|
||||
logger(LOG_ERR, _("Can't write to %s %s: %s"), device_info, device,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: process.c,v 1.1.2.56 2003/07/21 14:47:43 guus Exp $
|
||||
$Id: process.c,v 1.1.2.57 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -35,21 +35,19 @@
|
|||
#include "xalloc.h"
|
||||
|
||||
/* If zero, don't detach from the terminal. */
|
||||
int do_detach = 1;
|
||||
bool do_detach = true;
|
||||
bool sighup = false;
|
||||
bool sigalrm = false;
|
||||
|
||||
extern char *identname;
|
||||
extern char *pidfilename;
|
||||
extern char **g_argv;
|
||||
extern int use_logfile;
|
||||
extern bool use_logfile;
|
||||
|
||||
sigset_t emptysigset;
|
||||
|
||||
static int saved_debug_level = -1;
|
||||
|
||||
extern int sighup;
|
||||
extern int sigalrm;
|
||||
extern int do_purge;
|
||||
|
||||
static void memory_full(int size)
|
||||
{
|
||||
logger(LOG_ERR, _("Memory exhausted (couldn't allocate %d bytes), exitting."), size);
|
||||
|
@ -93,7 +91,7 @@ void cleanup_and_exit(int c)
|
|||
/*
|
||||
check for an existing tinc for this net, and write pid to pidfile
|
||||
*/
|
||||
static int write_pidfile(void)
|
||||
static bool write_pidfile(void)
|
||||
{
|
||||
int pid;
|
||||
|
||||
|
@ -107,20 +105,20 @@ static int write_pidfile(void)
|
|||
netname, pid);
|
||||
else
|
||||
fprintf(stderr, _("A tincd is already running with pid %d.\n"), pid);
|
||||
return 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* if it's locked, write-protected, or whatever */
|
||||
if(!write_pid(pidfilename))
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
kill older tincd for this net
|
||||
*/
|
||||
int kill_other(int signal)
|
||||
bool kill_other(int signal)
|
||||
{
|
||||
int pid;
|
||||
|
||||
|
@ -134,7 +132,7 @@ int kill_other(int signal)
|
|||
netname);
|
||||
else
|
||||
fprintf(stderr, _("No other tincd is running.\n"));
|
||||
return 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
errno = 0; /* No error, sometimes errno is only changed on error */
|
||||
|
@ -151,13 +149,13 @@ int kill_other(int signal)
|
|||
remove_pid(pidfilename);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
Detach from current terminal, write pidfile, kill parent
|
||||
*/
|
||||
int detach(void)
|
||||
bool detach(void)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -165,24 +163,24 @@ int detach(void)
|
|||
|
||||
/* First check if we can open a fresh new pidfile */
|
||||
|
||||
if(write_pidfile())
|
||||
return -1;
|
||||
if(!write_pidfile())
|
||||
return false;
|
||||
|
||||
/* If we succeeded in doing that, detach */
|
||||
|
||||
closelogger();
|
||||
|
||||
if(do_detach) {
|
||||
if(daemon(0, 0) < 0) {
|
||||
if(daemon(0, 0)) {
|
||||
fprintf(stderr, _("Couldn't detach from terminal: %s"),
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Now UPDATE the pid in the pidfile, because we changed it... */
|
||||
|
||||
if(!write_pid(pidfilename))
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
openlogger(identname, use_logfile?LOGMODE_FILE:(do_detach?LOGMODE_SYSLOG:LOGMODE_STDERR));
|
||||
|
@ -192,7 +190,7 @@ int detach(void)
|
|||
|
||||
xalloc_fail_func = memory_full;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -230,7 +228,7 @@ static void _execute_script(const char *scriptname, char **envp)
|
|||
/*
|
||||
Fork and execute the program pointed to by name.
|
||||
*/
|
||||
int execute_script(const char *name, char **envp)
|
||||
bool execute_script(const char *name, char **envp)
|
||||
{
|
||||
pid_t pid;
|
||||
int status;
|
||||
|
@ -244,14 +242,14 @@ int execute_script(const char *name, char **envp)
|
|||
/* First check if there is a script */
|
||||
|
||||
if(stat(scriptname, &s))
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
pid = fork();
|
||||
|
||||
if(pid < 0) {
|
||||
logger(LOG_ERR, _("System call `%s' failed: %s"), "fork",
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(pid) {
|
||||
|
@ -264,26 +262,26 @@ int execute_script(const char *name, char **envp)
|
|||
if(WEXITSTATUS(status)) {
|
||||
logger(LOG_ERR, _("Process %d (%s) exited with non-zero status %d"),
|
||||
pid, name, WEXITSTATUS(status));
|
||||
return -1;
|
||||
return false;
|
||||
} else
|
||||
return 0;
|
||||
return true;
|
||||
} else if(WIFSIGNALED(status)) { /* Child was killed by a signal */
|
||||
logger(LOG_ERR, _("Process %d (%s) was killed by signal %d (%s)"), pid,
|
||||
name, WTERMSIG(status), strsignal(WTERMSIG(status)));
|
||||
return -1;
|
||||
return false;
|
||||
} else { /* Something strange happened */
|
||||
logger(LOG_ERR, _("Process %d (%s) terminated abnormally"), pid,
|
||||
name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
} else if (errno != EINTR) {
|
||||
logger(LOG_ERR, _("System call `%s' failed: %s"), "waitpid",
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Why do we get EINTR? */
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Child here */
|
||||
|
@ -344,7 +342,7 @@ static RETSIGTYPE fatal_signal_handler(int a)
|
|||
static RETSIGTYPE sighup_handler(int a)
|
||||
{
|
||||
logger(LOG_NOTICE, _("Got HUP signal"));
|
||||
sighup = 1;
|
||||
sighup = true;
|
||||
}
|
||||
|
||||
static RETSIGTYPE sigint_handler(int a)
|
||||
|
@ -366,7 +364,7 @@ static RETSIGTYPE sigint_handler(int a)
|
|||
static RETSIGTYPE sigalrm_handler(int a)
|
||||
{
|
||||
logger(LOG_NOTICE, _("Got ALRM signal"));
|
||||
sigalrm = 1;
|
||||
sigalrm = true;
|
||||
}
|
||||
|
||||
static RETSIGTYPE sigusr1_handler(int a)
|
||||
|
@ -384,8 +382,7 @@ static RETSIGTYPE sigusr2_handler(int a)
|
|||
|
||||
static RETSIGTYPE sigwinch_handler(int a)
|
||||
{
|
||||
extern int do_purge;
|
||||
do_purge = 1;
|
||||
do_purge = true;
|
||||
}
|
||||
|
||||
static RETSIGTYPE unexpected_signal_handler(int a)
|
||||
|
@ -403,21 +400,20 @@ static struct {
|
|||
int signal;
|
||||
void (*handler)(int);
|
||||
} sighandlers[] = {
|
||||
{
|
||||
SIGHUP, sighup_handler}, {
|
||||
SIGTERM, sigterm_handler}, {
|
||||
SIGQUIT, sigquit_handler}, {
|
||||
SIGSEGV, fatal_signal_handler}, {
|
||||
SIGBUS, fatal_signal_handler}, {
|
||||
SIGILL, fatal_signal_handler}, {
|
||||
SIGPIPE, ignore_signal_handler}, {
|
||||
SIGINT, sigint_handler}, {
|
||||
SIGUSR1, sigusr1_handler}, {
|
||||
SIGUSR2, sigusr2_handler}, {
|
||||
SIGCHLD, ignore_signal_handler}, {
|
||||
SIGALRM, sigalrm_handler}, {
|
||||
SIGWINCH, sigwinch_handler}, {
|
||||
0, NULL}
|
||||
{SIGHUP, sighup_handler},
|
||||
{SIGTERM, sigterm_handler},
|
||||
{SIGQUIT, sigquit_handler},
|
||||
{SIGSEGV, fatal_signal_handler},
|
||||
{SIGBUS, fatal_signal_handler},
|
||||
{SIGILL, fatal_signal_handler},
|
||||
{SIGPIPE, ignore_signal_handler},
|
||||
{SIGINT, sigint_handler},
|
||||
{SIGUSR1, sigusr1_handler},
|
||||
{SIGUSR2, sigusr2_handler},
|
||||
{SIGCHLD, ignore_signal_handler},
|
||||
{SIGALRM, sigalrm_handler},
|
||||
{SIGWINCH, sigwinch_handler},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
void setup_signals(void)
|
||||
|
|
|
@ -17,18 +17,20 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: process.h,v 1.1.2.16 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: process.h,v 1.1.2.17 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_PROCESS_H__
|
||||
#define __TINC_PROCESS_H__
|
||||
|
||||
extern int do_detach;
|
||||
extern bool do_detach;
|
||||
extern bool sighup;
|
||||
extern bool sigalrm;
|
||||
|
||||
extern void setup_signals(void);
|
||||
extern int execute_script(const char *, char **);
|
||||
extern int detach(void);
|
||||
extern int kill_other(int);
|
||||
extern bool execute_script(const char *, char **);
|
||||
extern bool detach(void);
|
||||
extern bool kill_other(int);
|
||||
extern void cleanup_and_exit(int) __attribute__ ((noreturn));
|
||||
|
||||
#endif /* __TINC_PROCESS_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: protocol.c,v 1.28.4.141 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: protocol.c,v 1.28.4.142 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -32,7 +32,7 @@
|
|||
|
||||
/* Jumptable for the request handlers */
|
||||
|
||||
static int (*request_handlers[])(connection_t *) = {
|
||||
static bool (*request_handlers[])(connection_t *) = {
|
||||
id_h, metakey_h, challenge_h, chal_reply_h, ack_h,
|
||||
status_h, error_h, termreq_h,
|
||||
ping_h, pong_h,
|
||||
|
@ -53,21 +53,21 @@ static char (*request_name[]) = {
|
|||
|
||||
static avl_tree_t *past_request_tree;
|
||||
|
||||
int check_id(char *id)
|
||||
bool check_id(char *id)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < strlen(id); i++)
|
||||
if(!isalnum(id[i]) && id[i] != '_')
|
||||
return -1;
|
||||
return false;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Generic request routines - takes care of logging and error
|
||||
detection as well */
|
||||
|
||||
int send_request(connection_t *c, const char *format, ...)
|
||||
bool send_request(connection_t *c, const char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buffer[MAXBUFSIZE];
|
||||
|
@ -86,7 +86,7 @@ int send_request(connection_t *c, const char *format, ...)
|
|||
if(len < 0 || len > MAXBUFSIZE - 1) {
|
||||
logger(LOG_ERR, _("Output buffer overflow while sending request to %s (%s)"),
|
||||
c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
ifdebug(PROTOCOL) {
|
||||
|
@ -101,16 +101,16 @@ int send_request(connection_t *c, const char *format, ...)
|
|||
|
||||
buffer[len++] = '\n';
|
||||
|
||||
if(c == broadcast)
|
||||
return broadcast_meta(NULL, buffer, len);
|
||||
else
|
||||
if(c == broadcast) {
|
||||
broadcast_meta(NULL, buffer, len);
|
||||
return true;
|
||||
} else
|
||||
return send_meta(c, buffer, len);
|
||||
}
|
||||
|
||||
int forward_request(connection_t *from)
|
||||
void forward_request(connection_t *from)
|
||||
{
|
||||
int request;
|
||||
cp();
|
||||
|
||||
cp();
|
||||
|
||||
|
@ -127,10 +127,10 @@ int forward_request(connection_t *from)
|
|||
|
||||
from->buffer[from->reqlen - 1] = '\n';
|
||||
|
||||
return broadcast_meta(from, from->buffer, from->reqlen);
|
||||
broadcast_meta(from, from->buffer, from->reqlen);
|
||||
}
|
||||
|
||||
int receive_request(connection_t *c)
|
||||
bool receive_request(connection_t *c)
|
||||
{
|
||||
int request;
|
||||
|
||||
|
@ -145,7 +145,7 @@ int receive_request(connection_t *c)
|
|||
logger(LOG_ERR, _("Unknown request from %s (%s)"),
|
||||
c->name, c->hostname);
|
||||
|
||||
return -1;
|
||||
return false;
|
||||
} else {
|
||||
ifdebug(PROTOCOL) {
|
||||
ifdebug(META)
|
||||
|
@ -161,23 +161,23 @@ int receive_request(connection_t *c)
|
|||
if((c->allow_request != ALL) && (c->allow_request != request)) {
|
||||
logger(LOG_ERR, _("Unauthorized request from %s (%s)"), c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(request_handlers[request] (c))
|
||||
if(!request_handlers[request](c)) {
|
||||
/* Something went wrong. Probably scriptkiddies. Terminate. */
|
||||
{
|
||||
|
||||
logger(LOG_ERR, _("Error while processing %s from %s (%s)"),
|
||||
request_name[request], c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
logger(LOG_ERR, _("Bogus data received from %s (%s)"),
|
||||
c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int past_request_compare(past_request_t *a, past_request_t *b)
|
||||
|
@ -209,7 +209,7 @@ void exit_requests(void)
|
|||
avl_delete_tree(past_request_tree);
|
||||
}
|
||||
|
||||
int seen_request(char *request)
|
||||
bool seen_request(char *request)
|
||||
{
|
||||
past_request_t p, *new;
|
||||
|
||||
|
@ -219,13 +219,13 @@ int seen_request(char *request)
|
|||
|
||||
if(avl_search(past_request_tree, &p)) {
|
||||
ifdebug(SCARY_THINGS) logger(LOG_DEBUG, _("Already seen request"));
|
||||
return 1;
|
||||
return true;
|
||||
} else {
|
||||
new = (past_request_t *) xmalloc(sizeof(*new));
|
||||
new->request = xstrdup(request);
|
||||
new->firstseen = now;
|
||||
avl_insert(past_request_tree, new);
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,17 +17,12 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: protocol.h,v 1.5.4.39 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: protocol.h,v 1.5.4.40 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_PROTOCOL_H__
|
||||
#define __TINC_PROTOCOL_H__
|
||||
|
||||
#include "edge.h"
|
||||
#include "net.h"
|
||||
#include "node.h"
|
||||
#include "subnet.h"
|
||||
|
||||
/* Protocol version. Different versions are incompatible,
|
||||
incompatible version have different protocols.
|
||||
*/
|
||||
|
@ -36,7 +31,7 @@
|
|||
|
||||
/* Request numbers */
|
||||
|
||||
enum {
|
||||
typedef enum request_t {
|
||||
ALL = -1, /* Guardian for allow_request */
|
||||
ID = 0, METAKEY, CHALLENGE, CHAL_REPLY, ACK,
|
||||
STATUS, ERROR, TERMREQ,
|
||||
|
@ -46,7 +41,7 @@ enum {
|
|||
KEY_CHANGED, REQ_KEY, ANS_KEY,
|
||||
PACKET,
|
||||
LAST /* Guardian for the highest request number */
|
||||
};
|
||||
} request_t;
|
||||
|
||||
typedef struct past_request_t {
|
||||
char *request;
|
||||
|
@ -58,58 +53,63 @@ typedef struct past_request_t {
|
|||
#define MAX_STRING_SIZE 2048
|
||||
#define MAX_STRING "%2048s"
|
||||
|
||||
#include "edge.h"
|
||||
#include "net.h"
|
||||
#include "node.h"
|
||||
#include "subnet.h"
|
||||
|
||||
/* Basic functions */
|
||||
|
||||
extern int send_request(connection_t *, const char *, ...) __attribute__ ((format(printf, 2, 3)));
|
||||
extern int forward_request(connection_t *);
|
||||
extern int receive_request(connection_t *);
|
||||
extern int check_id(char *);
|
||||
extern bool send_request(struct connection_t *, const char *, ...) __attribute__ ((format(printf, 2, 3)));
|
||||
extern void forward_request(struct connection_t *);
|
||||
extern bool receive_request(struct connection_t *);
|
||||
extern bool check_id(char *);
|
||||
|
||||
extern void init_requests(void);
|
||||
extern void exit_requests(void);
|
||||
extern int seen_request(char *);
|
||||
extern bool seen_request(char *);
|
||||
extern void age_past_requests(void);
|
||||
|
||||
/* Requests */
|
||||
|
||||
extern int send_id(connection_t *);
|
||||
extern int send_metakey(connection_t *);
|
||||
extern int send_challenge(connection_t *);
|
||||
extern int send_chal_reply(connection_t *);
|
||||
extern int send_ack(connection_t *);
|
||||
extern int send_status(connection_t *, int, char *);
|
||||
extern int send_error(connection_t *, int, char *);
|
||||
extern int send_termreq(connection_t *);
|
||||
extern int send_ping(connection_t *);
|
||||
extern int send_pong(connection_t *);
|
||||
extern int send_add_subnet(connection_t *, subnet_t *);
|
||||
extern int send_del_subnet(connection_t *, subnet_t *);
|
||||
extern int send_add_edge(connection_t *, edge_t *);
|
||||
extern int send_del_edge(connection_t *, edge_t *);
|
||||
extern int send_key_changed(connection_t *, node_t *);
|
||||
extern int send_req_key(connection_t *, node_t *, node_t *);
|
||||
extern int send_ans_key(connection_t *, node_t *, node_t *);
|
||||
extern int send_tcppacket(connection_t *, vpn_packet_t *);
|
||||
extern bool send_id(struct connection_t *);
|
||||
extern bool send_metakey(struct connection_t *);
|
||||
extern bool send_challenge(struct connection_t *);
|
||||
extern bool send_chal_reply(struct connection_t *);
|
||||
extern bool send_ack(struct connection_t *);
|
||||
extern bool send_status(struct connection_t *, int, char *);
|
||||
extern bool send_error(struct connection_t *, int, char *);
|
||||
extern bool send_termreq(struct connection_t *);
|
||||
extern bool send_ping(struct connection_t *);
|
||||
extern bool send_pong(struct connection_t *);
|
||||
extern bool send_add_subnet(struct connection_t *, struct subnet_t *);
|
||||
extern bool send_del_subnet(struct connection_t *, struct subnet_t *);
|
||||
extern bool send_add_edge(struct connection_t *, struct edge_t *);
|
||||
extern bool send_del_edge(struct connection_t *, struct edge_t *);
|
||||
extern bool send_key_changed(struct connection_t *, struct node_t *);
|
||||
extern bool send_req_key(struct connection_t *, struct node_t *, struct node_t *);
|
||||
extern bool send_ans_key(struct connection_t *, struct node_t *, struct node_t *);
|
||||
extern bool send_tcppacket(struct connection_t *, struct vpn_packet_t *);
|
||||
|
||||
/* Request handlers */
|
||||
|
||||
extern int id_h(connection_t *);
|
||||
extern int metakey_h(connection_t *);
|
||||
extern int challenge_h(connection_t *);
|
||||
extern int chal_reply_h(connection_t *);
|
||||
extern int ack_h(connection_t *);
|
||||
extern int status_h(connection_t *);
|
||||
extern int error_h(connection_t *);
|
||||
extern int termreq_h(connection_t *);
|
||||
extern int ping_h(connection_t *);
|
||||
extern int pong_h(connection_t *);
|
||||
extern int add_subnet_h(connection_t *);
|
||||
extern int del_subnet_h(connection_t *);
|
||||
extern int add_edge_h(connection_t *);
|
||||
extern int del_edge_h(connection_t *);
|
||||
extern int key_changed_h(connection_t *);
|
||||
extern int req_key_h(connection_t *);
|
||||
extern int ans_key_h(connection_t *);
|
||||
extern int tcppacket_h(connection_t *);
|
||||
extern bool id_h(struct connection_t *);
|
||||
extern bool metakey_h(struct connection_t *);
|
||||
extern bool challenge_h(struct connection_t *);
|
||||
extern bool chal_reply_h(struct connection_t *);
|
||||
extern bool ack_h(struct connection_t *);
|
||||
extern bool status_h(struct connection_t *);
|
||||
extern bool error_h(struct connection_t *);
|
||||
extern bool termreq_h(struct connection_t *);
|
||||
extern bool ping_h(struct connection_t *);
|
||||
extern bool pong_h(struct connection_t *);
|
||||
extern bool add_subnet_h(struct connection_t *);
|
||||
extern bool del_subnet_h(struct connection_t *);
|
||||
extern bool add_edge_h(struct connection_t *);
|
||||
extern bool del_edge_h(struct connection_t *);
|
||||
extern bool key_changed_h(struct connection_t *);
|
||||
extern bool req_key_h(struct connection_t *);
|
||||
extern bool ans_key_h(struct connection_t *);
|
||||
extern bool tcppacket_h(struct connection_t *);
|
||||
|
||||
#endif /* __TINC_PROTOCOL_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: protocol_auth.c,v 1.1.4.24 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: protocol_auth.c,v 1.1.4.25 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -39,7 +39,7 @@
|
|||
#include "utils.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
int send_id(connection_t *c)
|
||||
bool send_id(connection_t *c)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -47,25 +47,25 @@ int send_id(connection_t *c)
|
|||
myself->connection->protocol_version);
|
||||
}
|
||||
|
||||
int id_h(connection_t *c)
|
||||
bool id_h(connection_t *c)
|
||||
{
|
||||
char name[MAX_STRING_SIZE];
|
||||
int bla;
|
||||
bool choice;
|
||||
|
||||
cp();
|
||||
|
||||
if(sscanf(c->buffer, "%*d " MAX_STRING " %d", name, &c->protocol_version) != 2) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "ID", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if identity is a valid name */
|
||||
|
||||
if(check_id(name)) {
|
||||
if(!check_id(name)) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "ID", c->name,
|
||||
c->hostname, "invalid name");
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* If we set c->name in advance, make sure we are connected to the right host */
|
||||
|
@ -74,7 +74,7 @@ int id_h(connection_t *c)
|
|||
if(strcmp(c->name, name)) {
|
||||
logger(LOG_ERR, _("Peer %s is %s instead of %s"), c->hostname, name,
|
||||
c->name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
c->name = xstrdup(name);
|
||||
|
@ -84,7 +84,7 @@ int id_h(connection_t *c)
|
|||
if(c->protocol_version != myself->connection->protocol_version) {
|
||||
logger(LOG_ERR, _("Peer %s (%s) uses incompatible version %d"),
|
||||
c->name, c->hostname, c->protocol_version);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(bypass_security) {
|
||||
|
@ -97,25 +97,23 @@ int id_h(connection_t *c)
|
|||
if(!c->config_tree) {
|
||||
init_configuration(&c->config_tree);
|
||||
|
||||
bla = read_connection_config(c);
|
||||
|
||||
if(bla) {
|
||||
if(!read_connection_config(c)) {
|
||||
logger(LOG_ERR, _("Peer %s had unknown identity (%s)"), c->hostname,
|
||||
c->name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(read_rsa_public_key(c)) {
|
||||
return -1;
|
||||
if(!read_rsa_public_key(c)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check some options */
|
||||
|
||||
if((get_config_bool(lookup_config(c->config_tree, "IndirectData"), &bla) && bla) || myself->options & OPTION_INDIRECT)
|
||||
if((get_config_bool(lookup_config(c->config_tree, "IndirectData"), &choice) && choice) || myself->options & OPTION_INDIRECT)
|
||||
c->options |= OPTION_INDIRECT;
|
||||
|
||||
if((get_config_bool(lookup_config(c->config_tree, "TCPOnly"), &bla) && bla) || myself->options & OPTION_TCPONLY)
|
||||
if((get_config_bool(lookup_config(c->config_tree, "TCPOnly"), &choice) && choice) || myself->options & OPTION_TCPONLY)
|
||||
c->options |= OPTION_TCPONLY | OPTION_INDIRECT;
|
||||
|
||||
c->allow_request = METAKEY;
|
||||
|
@ -123,10 +121,11 @@ int id_h(connection_t *c)
|
|||
return send_metakey(c);
|
||||
}
|
||||
|
||||
int send_metakey(connection_t *c)
|
||||
bool send_metakey(connection_t *c)
|
||||
{
|
||||
char buffer[MAX_STRING_SIZE];
|
||||
int len, x;
|
||||
int len;
|
||||
bool x;
|
||||
|
||||
cp();
|
||||
|
||||
|
@ -173,7 +172,7 @@ int send_metakey(connection_t *c)
|
|||
if(RSA_public_encrypt(len, c->outkey, buffer, c->rsa_key, RSA_NO_PADDING) != len) {
|
||||
logger(LOG_ERR, _("Error during encryption of meta key for %s (%s)"),
|
||||
c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Convert the encrypted random data to a hexadecimal formatted string */
|
||||
|
@ -196,13 +195,13 @@ int send_metakey(connection_t *c)
|
|||
c->outkey + len - c->outcipher->key_len -
|
||||
c->outcipher->iv_len);
|
||||
|
||||
c->status.encryptout = 1;
|
||||
c->status.encryptout = true;
|
||||
}
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
int metakey_h(connection_t *c)
|
||||
bool metakey_h(connection_t *c)
|
||||
{
|
||||
char buffer[MAX_STRING_SIZE];
|
||||
int cipher, digest, maclength, compression;
|
||||
|
@ -213,7 +212,7 @@ int metakey_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d %d %d %d %d " MAX_STRING, &cipher, &digest, &maclength, &compression, buffer) != 5) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "METAKEY", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
len = RSA_size(myself->connection->rsa_key);
|
||||
|
@ -222,7 +221,7 @@ int metakey_h(connection_t *c)
|
|||
|
||||
if(strlen(buffer) != len * 2) {
|
||||
logger(LOG_ERR, _("Possible intruder %s (%s): %s"), c->name, c->hostname, "wrong keylength");
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Allocate buffers for the meta key */
|
||||
|
@ -242,7 +241,7 @@ int metakey_h(connection_t *c)
|
|||
if(RSA_private_decrypt(len, buffer, c->inkey, myself->connection->rsa_key, RSA_NO_PADDING) != len) { /* See challenge() */
|
||||
logger(LOG_ERR, _("Error during encryption of meta key for %s (%s)"),
|
||||
c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
ifdebug(SCARY_THINGS) {
|
||||
|
@ -260,7 +259,7 @@ int metakey_h(connection_t *c)
|
|||
|
||||
if(!c->incipher) {
|
||||
logger(LOG_ERR, _("%s (%s) uses unknown cipher!"), c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
EVP_DecryptInit(c->inctx, c->incipher,
|
||||
|
@ -268,7 +267,7 @@ int metakey_h(connection_t *c)
|
|||
c->inkey + len - c->incipher->key_len -
|
||||
c->incipher->iv_len);
|
||||
|
||||
c->status.decryptin = 1;
|
||||
c->status.decryptin = true;
|
||||
} else {
|
||||
c->incipher = NULL;
|
||||
}
|
||||
|
@ -280,12 +279,12 @@ int metakey_h(connection_t *c)
|
|||
|
||||
if(!c->indigest) {
|
||||
logger(LOG_ERR, _("Node %s (%s) uses unknown digest!"), c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(c->inmaclength > c->indigest->md_size || c->inmaclength < 0) {
|
||||
logger(LOG_ERR, _("%s (%s) uses bogus MAC length!"), c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
c->indigest = NULL;
|
||||
|
@ -298,10 +297,10 @@ int metakey_h(connection_t *c)
|
|||
return send_challenge(c);
|
||||
}
|
||||
|
||||
int send_challenge(connection_t *c)
|
||||
bool send_challenge(connection_t *c)
|
||||
{
|
||||
char buffer[MAX_STRING_SIZE];
|
||||
int len, x;
|
||||
int len;
|
||||
|
||||
cp();
|
||||
|
||||
|
@ -325,12 +324,10 @@ int send_challenge(connection_t *c)
|
|||
|
||||
/* Send the challenge */
|
||||
|
||||
x = send_request(c, "%d %s", CHALLENGE, buffer);
|
||||
|
||||
return x;
|
||||
return send_request(c, "%d %s", CHALLENGE, buffer);
|
||||
}
|
||||
|
||||
int challenge_h(connection_t *c)
|
||||
bool challenge_h(connection_t *c)
|
||||
{
|
||||
char buffer[MAX_STRING_SIZE];
|
||||
int len;
|
||||
|
@ -340,7 +337,7 @@ int challenge_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d " MAX_STRING, buffer) != 1) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "CHALLENGE", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
len = RSA_size(myself->connection->rsa_key);
|
||||
|
@ -350,7 +347,7 @@ int challenge_h(connection_t *c)
|
|||
if(strlen(buffer) != len * 2) {
|
||||
logger(LOG_ERR, _("Possible intruder %s (%s): %s"), c->name,
|
||||
c->hostname, "wrong challenge length");
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Allocate buffers for the challenge */
|
||||
|
@ -369,7 +366,7 @@ int challenge_h(connection_t *c)
|
|||
return send_chal_reply(c);
|
||||
}
|
||||
|
||||
int send_chal_reply(connection_t *c)
|
||||
bool send_chal_reply(connection_t *c)
|
||||
{
|
||||
char hash[EVP_MAX_MD_SIZE * 2 + 1];
|
||||
EVP_MD_CTX ctx;
|
||||
|
@ -393,7 +390,7 @@ int send_chal_reply(connection_t *c)
|
|||
return send_request(c, "%d %s", CHAL_REPLY, hash);
|
||||
}
|
||||
|
||||
int chal_reply_h(connection_t *c)
|
||||
bool chal_reply_h(connection_t *c)
|
||||
{
|
||||
char hishash[MAX_STRING_SIZE];
|
||||
char myhash[EVP_MAX_MD_SIZE];
|
||||
|
@ -404,7 +401,7 @@ int chal_reply_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d " MAX_STRING, hishash) != 1) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "CHAL_REPLY", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if the length of the hash is all right */
|
||||
|
@ -412,7 +409,7 @@ int chal_reply_h(connection_t *c)
|
|||
if(strlen(hishash) != c->outdigest->md_size * 2) {
|
||||
logger(LOG_ERR, _("Possible intruder %s (%s): %s"), c->name,
|
||||
c->hostname, _("wrong challenge reply length"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Convert the hash to binary format */
|
||||
|
@ -437,7 +434,7 @@ int chal_reply_h(connection_t *c)
|
|||
logger(LOG_DEBUG, _("Expected challenge reply: %s"), hishash);
|
||||
}
|
||||
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Identity has now been positively verified.
|
||||
|
@ -449,12 +446,11 @@ int chal_reply_h(connection_t *c)
|
|||
return send_ack(c);
|
||||
}
|
||||
|
||||
int send_ack(connection_t *c)
|
||||
bool send_ack(connection_t *c)
|
||||
{
|
||||
/* ACK message contains rest of the information the other end needs
|
||||
to create node_t and edge_t structures. */
|
||||
|
||||
int x;
|
||||
struct timeval now;
|
||||
|
||||
cp();
|
||||
|
@ -462,13 +458,9 @@ int send_ack(connection_t *c)
|
|||
/* Estimate weight */
|
||||
|
||||
gettimeofday(&now, NULL);
|
||||
c->estimated_weight =
|
||||
(now.tv_sec - c->start.tv_sec) * 1000 + (now.tv_usec -
|
||||
c->start.tv_usec) / 1000;
|
||||
x = send_request(c, "%d %s %d %lx", ACK, myport, c->estimated_weight,
|
||||
c->options);
|
||||
c->estimated_weight = (now.tv_sec - c->start.tv_sec) * 1000 + (now.tv_usec - c->start.tv_usec) / 1000;
|
||||
|
||||
return x;
|
||||
return send_request(c, "%d %s %d %lx", ACK, myport, c->estimated_weight, c->options);
|
||||
}
|
||||
|
||||
static void send_everything(connection_t *c)
|
||||
|
@ -495,7 +487,7 @@ static void send_everything(connection_t *c)
|
|||
}
|
||||
}
|
||||
|
||||
int ack_h(connection_t *c)
|
||||
bool ack_h(connection_t *c)
|
||||
{
|
||||
char hisport[MAX_STRING_SIZE];
|
||||
char *hisaddress, *dummy;
|
||||
|
@ -508,7 +500,7 @@ int ack_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d " MAX_STRING " %d %lx", hisport, &weight, &options) != 3) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "ACK", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if we already have a node_t for him */
|
||||
|
@ -524,7 +516,7 @@ int ack_h(connection_t *c)
|
|||
/* Oh dear, we already have a connection to this node. */
|
||||
ifdebug(CONNECTIONS) logger(LOG_DEBUG, _("Established a second connection with %s (%s), closing old connection"),
|
||||
n->name, n->hostname);
|
||||
terminate_connection(n->connection, 0);
|
||||
terminate_connection(n->connection, false);
|
||||
/* Run graph algorithm to purge key and make sure up/down scripts are rerun with new IP addresses and stuff */
|
||||
graph();
|
||||
}
|
||||
|
@ -537,7 +529,7 @@ int ack_h(connection_t *c)
|
|||
/* Activate this connection */
|
||||
|
||||
c->allow_request = ALL;
|
||||
c->status.active = 1;
|
||||
c->status.active = true;
|
||||
|
||||
ifdebug(CONNECTIONS) logger(LOG_NOTICE, _("Connection with %s (%s) activated"), c->name,
|
||||
c->hostname);
|
||||
|
@ -570,5 +562,5 @@ int ack_h(connection_t *c)
|
|||
|
||||
graph();
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: protocol_edge.c,v 1.1.4.18 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: protocol_edge.c,v 1.1.4.19 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -36,9 +36,9 @@
|
|||
#include "utils.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
int send_add_edge(connection_t *c, edge_t *e)
|
||||
bool send_add_edge(connection_t *c, edge_t *e)
|
||||
{
|
||||
int x;
|
||||
bool x;
|
||||
char *address, *port;
|
||||
|
||||
cp();
|
||||
|
@ -54,7 +54,7 @@ int send_add_edge(connection_t *c, edge_t *e)
|
|||
return x;
|
||||
}
|
||||
|
||||
int add_edge_h(connection_t *c)
|
||||
bool add_edge_h(connection_t *c)
|
||||
{
|
||||
edge_t *e;
|
||||
node_t *from, *to;
|
||||
|
@ -72,25 +72,25 @@ int add_edge_h(connection_t *c)
|
|||
from_name, to_name, to_address, to_port, &options, &weight) != 6) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "ADD_EDGE", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if names are valid */
|
||||
|
||||
if(check_id(from_name)) {
|
||||
if(!check_id(from_name)) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "ADD_EDGE", c->name,
|
||||
c->hostname, _("invalid name"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(check_id(to_name)) {
|
||||
if(!check_id(to_name)) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "ADD_EDGE", c->name,
|
||||
c->hostname, _("invalid name"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(seen_request(c->buffer))
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
/* Lookup nodes */
|
||||
|
||||
|
@ -124,7 +124,7 @@ int add_edge_h(connection_t *c)
|
|||
ifdebug(PROTOCOL) logger(LOG_WARNING, _("Got %s from %s (%s) for ourself which does not match existing entry"),
|
||||
"ADD_EDGE", c->name, c->hostname);
|
||||
send_add_edge(c, e);
|
||||
return 0;
|
||||
return true;
|
||||
} else {
|
||||
ifdebug(PROTOCOL) logger(LOG_WARNING, _("Got %s from %s (%s) which does not match existing entry"),
|
||||
"ADD_EDGE", c->name, c->hostname);
|
||||
|
@ -132,7 +132,7 @@ int add_edge_h(connection_t *c)
|
|||
graph();
|
||||
}
|
||||
} else
|
||||
return 0;
|
||||
return true;
|
||||
} else if(from == myself) {
|
||||
ifdebug(PROTOCOL) logger(LOG_WARNING, _("Got %s from %s (%s) for ourself which does not exist"),
|
||||
"ADD_EDGE", c->name, c->hostname);
|
||||
|
@ -141,7 +141,7 @@ int add_edge_h(connection_t *c)
|
|||
e->to = to;
|
||||
send_del_edge(c, e);
|
||||
free_edge(e);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
e = new_edge();
|
||||
|
@ -160,10 +160,10 @@ int add_edge_h(connection_t *c)
|
|||
|
||||
graph();
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int send_del_edge(connection_t *c, edge_t *e)
|
||||
bool send_del_edge(connection_t *c, edge_t *e)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -171,7 +171,7 @@ int send_del_edge(connection_t *c, edge_t *e)
|
|||
e->from->name, e->to->name);
|
||||
}
|
||||
|
||||
int del_edge_h(connection_t *c)
|
||||
bool del_edge_h(connection_t *c)
|
||||
{
|
||||
edge_t *e;
|
||||
char from_name[MAX_STRING_SIZE];
|
||||
|
@ -183,25 +183,25 @@ int del_edge_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d %*x "MAX_STRING" "MAX_STRING, from_name, to_name) != 2) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "DEL_EDGE", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if names are valid */
|
||||
|
||||
if(check_id(from_name)) {
|
||||
if(!check_id(from_name)) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "DEL_EDGE", c->name,
|
||||
c->hostname, _("invalid name"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(check_id(to_name)) {
|
||||
if(!check_id(to_name)) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "DEL_EDGE", c->name,
|
||||
c->hostname, _("invalid name"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(seen_request(c->buffer))
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
/* Lookup nodes */
|
||||
|
||||
|
@ -210,7 +210,7 @@ int del_edge_h(connection_t *c)
|
|||
if(!from) {
|
||||
ifdebug(PROTOCOL) logger(LOG_ERR, _("Got %s from %s (%s) which does not appear in the edge tree"),
|
||||
"DEL_EDGE", c->name, c->hostname);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
to = lookup_node(to_name);
|
||||
|
@ -218,7 +218,7 @@ int del_edge_h(connection_t *c)
|
|||
if(!to) {
|
||||
ifdebug(PROTOCOL) logger(LOG_ERR, _("Got %s from %s (%s) which does not appear in the edge tree"),
|
||||
"DEL_EDGE", c->name, c->hostname);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Check if edge exists */
|
||||
|
@ -228,14 +228,14 @@ int del_edge_h(connection_t *c)
|
|||
if(!e) {
|
||||
ifdebug(PROTOCOL) logger(LOG_WARNING, _("Got %s from %s (%s) which does not appear in the edge tree"),
|
||||
"DEL_EDGE", c->name, c->hostname);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
if(e->from == myself) {
|
||||
ifdebug(PROTOCOL) logger(LOG_WARNING, _("Got %s from %s (%s) for ourself"),
|
||||
"DEL_EDGE", c->name, c->hostname);
|
||||
send_add_edge(c, e); /* Send back a correction */
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Tell the rest about the deleted edge */
|
||||
|
@ -250,5 +250,5 @@ int del_edge_h(connection_t *c)
|
|||
|
||||
graph();
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: protocol_key.c,v 1.1.4.19 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: protocol_key.c,v 1.1.4.20 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -32,9 +32,9 @@
|
|||
#include "utils.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
int mykeyused = 0;
|
||||
bool mykeyused = false;
|
||||
|
||||
int send_key_changed(connection_t *c, node_t *n)
|
||||
bool send_key_changed(connection_t *c, node_t *n)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -43,12 +43,12 @@ int send_key_changed(connection_t *c, node_t *n)
|
|||
*/
|
||||
|
||||
if(n == myself && !mykeyused)
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
return send_request(c, "%d %lx %s", KEY_CHANGED, random(), n->name);
|
||||
}
|
||||
|
||||
int key_changed_h(connection_t *c)
|
||||
bool key_changed_h(connection_t *c)
|
||||
{
|
||||
char name[MAX_STRING_SIZE];
|
||||
node_t *n;
|
||||
|
@ -58,38 +58,38 @@ int key_changed_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d %*x " MAX_STRING, name) != 1) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "KEY_CHANGED",
|
||||
c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(seen_request(c->buffer))
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
n = lookup_node(name);
|
||||
|
||||
if(!n) {
|
||||
logger(LOG_ERR, _("Got %s from %s (%s) origin %s which does not exist"),
|
||||
"KEY_CHANGED", c->name, c->hostname, name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
n->status.validkey = 0;
|
||||
n->status.waitingforkey = 0;
|
||||
n->status.validkey = false;
|
||||
n->status.waitingforkey = false;
|
||||
|
||||
/* Tell the others */
|
||||
|
||||
forward_request(c);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int send_req_key(connection_t *c, node_t *from, node_t *to)
|
||||
bool send_req_key(connection_t *c, node_t *from, node_t *to)
|
||||
{
|
||||
cp();
|
||||
|
||||
return send_request(c, "%d %s %s", REQ_KEY, from->name, to->name);
|
||||
}
|
||||
|
||||
int req_key_h(connection_t *c)
|
||||
bool req_key_h(connection_t *c)
|
||||
{
|
||||
char from_name[MAX_STRING_SIZE];
|
||||
char to_name[MAX_STRING_SIZE];
|
||||
|
@ -100,7 +100,7 @@ int req_key_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d " MAX_STRING " " MAX_STRING, from_name, to_name) != 2) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "REQ_KEY", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
from = lookup_node(from_name);
|
||||
|
@ -108,7 +108,7 @@ int req_key_h(connection_t *c)
|
|||
if(!from) {
|
||||
logger(LOG_ERR, _("Got %s from %s (%s) origin %s which does not exist in our connection list"),
|
||||
"REQ_KEY", c->name, c->hostname, from_name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
to = lookup_node(to_name);
|
||||
|
@ -116,13 +116,13 @@ int req_key_h(connection_t *c)
|
|||
if(!to) {
|
||||
logger(LOG_ERR, _("Got %s from %s (%s) destination %s which does not exist in our connection list"),
|
||||
"REQ_KEY", c->name, c->hostname, to_name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if this key request is for us */
|
||||
|
||||
if(to == myself) { /* Yes, send our own key back */
|
||||
mykeyused = 1;
|
||||
mykeyused = true;
|
||||
from->received_seqno = 0;
|
||||
memset(from->late, 0, sizeof(from->late));
|
||||
send_ans_key(c, myself, from);
|
||||
|
@ -130,10 +130,10 @@ int req_key_h(connection_t *c)
|
|||
send_req_key(to->nexthop->connection, from, to);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int send_ans_key(connection_t *c, node_t *from, node_t *to)
|
||||
bool send_ans_key(connection_t *c, node_t *from, node_t *to)
|
||||
{
|
||||
char key[MAX_STRING_SIZE];
|
||||
|
||||
|
@ -149,7 +149,7 @@ int send_ans_key(connection_t *c, node_t *from, node_t *to)
|
|||
from->compression);
|
||||
}
|
||||
|
||||
int ans_key_h(connection_t *c)
|
||||
bool ans_key_h(connection_t *c)
|
||||
{
|
||||
char from_name[MAX_STRING_SIZE];
|
||||
char to_name[MAX_STRING_SIZE];
|
||||
|
@ -164,7 +164,7 @@ int ans_key_h(connection_t *c)
|
|||
&compression) != 7) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "ANS_KEY", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
from = lookup_node(from_name);
|
||||
|
@ -172,7 +172,7 @@ int ans_key_h(connection_t *c)
|
|||
if(!from) {
|
||||
logger(LOG_ERR, _("Got %s from %s (%s) origin %s which does not exist in our connection list"),
|
||||
"ANS_KEY", c->name, c->hostname, from_name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
to = lookup_node(to_name);
|
||||
|
@ -180,7 +180,7 @@ int ans_key_h(connection_t *c)
|
|||
if(!to) {
|
||||
logger(LOG_ERR, _("Got %s from %s (%s) destination %s which does not exist in our connection list"),
|
||||
"ANS_KEY", c->name, c->hostname, to_name);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Forward it if necessary */
|
||||
|
@ -199,8 +199,8 @@ int ans_key_h(connection_t *c)
|
|||
hex2bin(from->key, from->key, from->keylength);
|
||||
from->key[from->keylength] = '\0';
|
||||
|
||||
from->status.validkey = 1;
|
||||
from->status.waitingforkey = 0;
|
||||
from->status.validkey = true;
|
||||
from->status.waitingforkey = false;
|
||||
from->sent_seqno = 0;
|
||||
|
||||
/* Check and lookup cipher and digest algorithms */
|
||||
|
@ -211,13 +211,13 @@ int ans_key_h(connection_t *c)
|
|||
if(!from->cipher) {
|
||||
logger(LOG_ERR, _("Node %s (%s) uses unknown cipher!"), from->name,
|
||||
from->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(from->keylength != from->cipher->key_len + from->cipher->iv_len) {
|
||||
logger(LOG_ERR, _("Node %s (%s) uses wrong keylength!"), from->name,
|
||||
from->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
from->cipher = NULL;
|
||||
|
@ -231,13 +231,13 @@ int ans_key_h(connection_t *c)
|
|||
if(!from->digest) {
|
||||
logger(LOG_ERR, _("Node %s (%s) uses unknown digest!"), from->name,
|
||||
from->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(from->maclength > from->digest->md_size || from->maclength < 0) {
|
||||
logger(LOG_ERR, _("Node %s (%s) uses bogus MAC length!"),
|
||||
from->name, from->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
from->digest = NULL;
|
||||
|
@ -245,7 +245,7 @@ int ans_key_h(connection_t *c)
|
|||
|
||||
if(compression < 0 || compression > 11) {
|
||||
logger(LOG_ERR, _("Node %s (%s) uses bogus compression level!"), from->name, from->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
from->compression = compression;
|
||||
|
@ -254,5 +254,5 @@ int ans_key_h(connection_t *c)
|
|||
|
||||
flush_queue(from);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: protocol_misc.c,v 1.1.4.11 2003/07/17 15:06:26 guus Exp $
|
||||
$Id: protocol_misc.c,v 1.1.4.12 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -33,7 +33,7 @@
|
|||
|
||||
/* Status and error notification routines */
|
||||
|
||||
int send_status(connection_t *c, int statusno, char *statusstring)
|
||||
bool send_status(connection_t *c, int statusno, char *statusstring)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -43,7 +43,7 @@ int send_status(connection_t *c, int statusno, char *statusstring)
|
|||
return send_request(c, "%d %d %s", STATUS, statusno, statusstring);
|
||||
}
|
||||
|
||||
int status_h(connection_t *c)
|
||||
bool status_h(connection_t *c)
|
||||
{
|
||||
int statusno;
|
||||
char statusstring[MAX_STRING_SIZE];
|
||||
|
@ -53,16 +53,16 @@ int status_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d %d " MAX_STRING, &statusno, statusstring) != 2) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "STATUS",
|
||||
c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
ifdebug(STATUS) logger(LOG_NOTICE, _("Status message from %s (%s): %d: %s"),
|
||||
c->name, c->hostname, statusno, statusstring);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int send_error(connection_t *c, int err, char *errstring)
|
||||
bool send_error(connection_t *c, int err, char *errstring)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -72,7 +72,7 @@ int send_error(connection_t *c, int err, char *errstring)
|
|||
return send_request(c, "%d %d %s", ERROR, err, errstring);
|
||||
}
|
||||
|
||||
int error_h(connection_t *c)
|
||||
bool error_h(connection_t *c)
|
||||
{
|
||||
int err;
|
||||
char errorstring[MAX_STRING_SIZE];
|
||||
|
@ -82,7 +82,7 @@ int error_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d %d " MAX_STRING, &err, errorstring) != 2) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "ERROR",
|
||||
c->name, c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
ifdebug(ERROR) logger(LOG_NOTICE, _("Error message from %s (%s): %d: %s"),
|
||||
|
@ -90,82 +90,78 @@ int error_h(connection_t *c)
|
|||
|
||||
terminate_connection(c, c->status.active);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int send_termreq(connection_t *c)
|
||||
bool send_termreq(connection_t *c)
|
||||
{
|
||||
cp();
|
||||
|
||||
return send_request(c, "%d", TERMREQ);
|
||||
}
|
||||
|
||||
int termreq_h(connection_t *c)
|
||||
bool termreq_h(connection_t *c)
|
||||
{
|
||||
cp();
|
||||
|
||||
terminate_connection(c, c->status.active);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int send_ping(connection_t *c)
|
||||
bool send_ping(connection_t *c)
|
||||
{
|
||||
cp();
|
||||
|
||||
c->status.pinged = 1;
|
||||
c->status.pinged = true;
|
||||
c->last_ping_time = now;
|
||||
|
||||
return send_request(c, "%d", PING);
|
||||
}
|
||||
|
||||
int ping_h(connection_t *c)
|
||||
bool ping_h(connection_t *c)
|
||||
{
|
||||
cp();
|
||||
|
||||
return send_pong(c);
|
||||
}
|
||||
|
||||
int send_pong(connection_t *c)
|
||||
bool send_pong(connection_t *c)
|
||||
{
|
||||
cp();
|
||||
|
||||
return send_request(c, "%d", PONG);
|
||||
}
|
||||
|
||||
int pong_h(connection_t *c)
|
||||
bool pong_h(connection_t *c)
|
||||
{
|
||||
cp();
|
||||
|
||||
c->status.pinged = 0;
|
||||
c->status.pinged = false;
|
||||
|
||||
/* Succesful connection, reset timeout if this is an outgoing connection. */
|
||||
|
||||
if(c->outgoing)
|
||||
c->outgoing->timeout = 0;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Sending and receiving packets via TCP */
|
||||
|
||||
int send_tcppacket(connection_t *c, vpn_packet_t *packet)
|
||||
bool send_tcppacket(connection_t *c, vpn_packet_t *packet)
|
||||
{
|
||||
int x;
|
||||
|
||||
cp();
|
||||
|
||||
/* Evil hack. */
|
||||
|
||||
x = send_request(c, "%d %hd", PACKET, packet->len);
|
||||
|
||||
if(x)
|
||||
return x;
|
||||
if(!send_request(c, "%d %hd", PACKET, packet->len))
|
||||
return false;
|
||||
|
||||
return send_meta(c, packet->data, packet->len);
|
||||
}
|
||||
|
||||
int tcppacket_h(connection_t *c)
|
||||
bool tcppacket_h(connection_t *c)
|
||||
{
|
||||
short int len;
|
||||
|
||||
|
@ -174,12 +170,12 @@ int tcppacket_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d %hd", &len) != 1) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "PACKET", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Set reqlen to len, this will tell receive_meta() that a tcppacket is coming. */
|
||||
|
||||
c->tcplen = len;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: protocol_subnet.c,v 1.1.4.13 2003/07/21 14:47:43 guus Exp $
|
||||
$Id: protocol_subnet.c,v 1.1.4.14 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -33,9 +33,9 @@
|
|||
#include "utils.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
int send_add_subnet(connection_t *c, subnet_t *subnet)
|
||||
bool send_add_subnet(connection_t *c, subnet_t *subnet)
|
||||
{
|
||||
int x;
|
||||
bool x;
|
||||
char *netstr;
|
||||
|
||||
cp();
|
||||
|
@ -48,7 +48,7 @@ int send_add_subnet(connection_t *c, subnet_t *subnet)
|
|||
return x;
|
||||
}
|
||||
|
||||
int add_subnet_h(connection_t *c)
|
||||
bool add_subnet_h(connection_t *c)
|
||||
{
|
||||
char subnetstr[MAX_STRING_SIZE];
|
||||
char name[MAX_STRING_SIZE];
|
||||
|
@ -60,15 +60,15 @@ int add_subnet_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "ADD_SUBNET", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if owner name is a valid */
|
||||
|
||||
if(check_id(name)) {
|
||||
if(!check_id(name)) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "ADD_SUBNET", c->name,
|
||||
c->hostname, _("invalid name"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if subnet string is valid */
|
||||
|
@ -78,11 +78,11 @@ int add_subnet_h(connection_t *c)
|
|||
if(!s) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "ADD_SUBNET", c->name,
|
||||
c->hostname, _("invalid subnet string"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(seen_request(c->buffer))
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
/* Check if the owner of the new subnet is in the connection list */
|
||||
|
||||
|
@ -98,7 +98,7 @@ int add_subnet_h(connection_t *c)
|
|||
|
||||
if(lookup_subnet(owner, s)) {
|
||||
free_subnet(s);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* If we don't know this subnet, but we are the owner, retaliate with a DEL_SUBNET */
|
||||
|
@ -108,7 +108,7 @@ int add_subnet_h(connection_t *c)
|
|||
"ADD_SUBNET", c->name, c->hostname);
|
||||
s->owner = myself;
|
||||
send_del_subnet(c, s);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* If everything is correct, add the subnet to the list of the owner */
|
||||
|
@ -119,12 +119,12 @@ int add_subnet_h(connection_t *c)
|
|||
|
||||
forward_request(c);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int send_del_subnet(connection_t *c, subnet_t *s)
|
||||
bool send_del_subnet(connection_t *c, subnet_t *s)
|
||||
{
|
||||
int x;
|
||||
bool x;
|
||||
char *netstr;
|
||||
|
||||
cp();
|
||||
|
@ -138,7 +138,7 @@ int send_del_subnet(connection_t *c, subnet_t *s)
|
|||
return x;
|
||||
}
|
||||
|
||||
int del_subnet_h(connection_t *c)
|
||||
bool del_subnet_h(connection_t *c)
|
||||
{
|
||||
char subnetstr[MAX_STRING_SIZE];
|
||||
char name[MAX_STRING_SIZE];
|
||||
|
@ -150,15 +150,15 @@ int del_subnet_h(connection_t *c)
|
|||
if(sscanf(c->buffer, "%*d %*x " MAX_STRING " " MAX_STRING, name, subnetstr) != 2) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s)"), "DEL_SUBNET", c->name,
|
||||
c->hostname);
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if owner name is a valid */
|
||||
|
||||
if(check_id(name)) {
|
||||
if(!check_id(name)) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "DEL_SUBNET", c->name,
|
||||
c->hostname, _("invalid name"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check if the owner of the new subnet is in the connection list */
|
||||
|
@ -168,7 +168,7 @@ int del_subnet_h(connection_t *c)
|
|||
if(!owner) {
|
||||
ifdebug(PROTOCOL) logger(LOG_WARNING, _("Got %s from %s (%s) for %s which is not in our node tree"),
|
||||
"DEL_SUBNET", c->name, c->hostname, name);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Check if subnet string is valid */
|
||||
|
@ -178,11 +178,11 @@ int del_subnet_h(connection_t *c)
|
|||
if(!s) {
|
||||
logger(LOG_ERR, _("Got bad %s from %s (%s): %s"), "DEL_SUBNET", c->name,
|
||||
c->hostname, _("invalid subnet string"));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(seen_request(c->buffer))
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
/* If everything is correct, delete the subnet from the list of the owner */
|
||||
|
||||
|
@ -195,7 +195,7 @@ int del_subnet_h(connection_t *c)
|
|||
if(!find) {
|
||||
ifdebug(PROTOCOL) logger(LOG_WARNING, _("Got %s from %s (%s) for %s which does not appear in his subnet tree"),
|
||||
"DEL_SUBNET", c->name, c->hostname, name);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* If we are the owner of this subnet, retaliate with an ADD_SUBNET */
|
||||
|
@ -204,7 +204,7 @@ int del_subnet_h(connection_t *c)
|
|||
ifdebug(PROTOCOL) logger(LOG_WARNING, _("Got %s from %s (%s) for ourself"),
|
||||
"DEL_SUBNET", c->name, c->hostname);
|
||||
send_add_subnet(c, find);
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Tell the rest */
|
||||
|
@ -215,5 +215,5 @@ int del_subnet_h(connection_t *c)
|
|||
|
||||
subnet_del(owner, find);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.7 2003/07/12 17:41:48 guus Exp $
|
||||
$Id: device.c,v 1.1.2.8 2003/07/22 20:55:21 guus Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
@ -43,7 +43,6 @@
|
|||
#include "system.h"
|
||||
|
||||
int device_fd = -1;
|
||||
int device_type;
|
||||
char *device;
|
||||
char *interface;
|
||||
char ifrname[IFNAMSIZ];
|
||||
|
@ -52,7 +51,7 @@ char *device_info;
|
|||
int device_total_in = 0;
|
||||
int device_total_out = 0;
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
struct sockaddr_ll sa;
|
||||
|
@ -71,7 +70,7 @@ int setup_device(void)
|
|||
if((device_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) {
|
||||
logger(LOG_ERR, _("Could not open %s: %s"), device_info,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
|
@ -80,7 +79,7 @@ int setup_device(void)
|
|||
close(device_fd);
|
||||
logger(LOG_ERR, _("Can't find interface %s: %s"), interface,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
memset(&sa, '0', sizeof(sa));
|
||||
|
@ -90,12 +89,12 @@ int setup_device(void)
|
|||
|
||||
if(bind(device_fd, (struct sockaddr *) &sa, (socklen_t) sizeof(sa))) {
|
||||
logger(LOG_ERR, _("Could not bind to %s: %s"), device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -105,7 +104,7 @@ void close_device(void)
|
|||
close(device_fd);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
|
||||
|
@ -114,7 +113,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if((lenin = read(device_fd, packet->data, MTU)) <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->len = lenin;
|
||||
|
@ -125,10 +124,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
device_info);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -138,12 +137,12 @@ int write_packet(vpn_packet_t *packet)
|
|||
if(write(device_fd, packet->data, packet->len) < 0) {
|
||||
logger(LOG_ERR, _("Can't write to %s %s: %s"), device_info, device,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
14
src/route.c
14
src/route.c
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: route.c,v 1.1.2.61 2003/07/18 12:21:03 guus Exp $
|
||||
$Id: route.c,v 1.1.2.62 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -54,10 +54,10 @@
|
|||
#include "subnet.h"
|
||||
#include "utils.h"
|
||||
|
||||
int routing_mode = RMODE_ROUTER;
|
||||
int priorityinheritance = 0;
|
||||
rmode_t routing_mode = RMODE_ROUTER;
|
||||
bool priorityinheritance = false;
|
||||
int macexpire = 600;
|
||||
int overwrite_mac = 0;
|
||||
bool overwrite_mac = false;
|
||||
mac_t mymac = {{0xFE, 0xFD, 0, 0, 0, 0}};
|
||||
|
||||
/* RFC 1071 */
|
||||
|
@ -81,14 +81,14 @@ static uint16_t inet_checksum(void *data, int len, uint16_t prevsum)
|
|||
return ~checksum;
|
||||
}
|
||||
|
||||
static int ratelimit(void) {
|
||||
static bool ratelimit(void) {
|
||||
static time_t lasttime = 0;
|
||||
|
||||
if(lasttime == now)
|
||||
return 1;
|
||||
return true;
|
||||
|
||||
lasttime = now;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void learn_mac(mac_t *address)
|
||||
|
|
19
src/route.h
19
src/route.h
|
@ -17,27 +17,30 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: route.h,v 1.1.2.12 2003/07/15 16:26:18 guus Exp $
|
||||
$Id: route.h,v 1.1.2.13 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_ROUTE_H__
|
||||
#define __TINC_ROUTE_H__
|
||||
|
||||
enum {
|
||||
#include "net.h"
|
||||
#include "node.h"
|
||||
|
||||
typedef enum rmode_t {
|
||||
RMODE_HUB = 0,
|
||||
RMODE_SWITCH,
|
||||
RMODE_ROUTER,
|
||||
};
|
||||
} rmode_t;
|
||||
|
||||
extern int routing_mode;
|
||||
extern int overwrite_mac;
|
||||
extern int priorityinheritance;
|
||||
extern rmode_t routing_mode;
|
||||
extern bool overwrite_mac;
|
||||
extern bool priorityinheritance;
|
||||
extern int macexpire;
|
||||
|
||||
extern mac_t mymac;
|
||||
|
||||
extern void age_mac(void);
|
||||
extern void route_incoming(node_t *, vpn_packet_t *);
|
||||
extern void route_outgoing(vpn_packet_t *);
|
||||
extern void route_incoming(struct node_t *, struct vpn_packet_t *);
|
||||
extern void route_outgoing(struct vpn_packet_t *);
|
||||
|
||||
#endif /* __TINC_ROUTE_H__ */
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: device.c,v 1.1.2.15 2003/07/18 13:41:37 guus Exp $
|
||||
$Id: device.c,v 1.1.2.16 2003/07/22 20:55:21 guus Exp $
|
||||
*/
|
||||
|
||||
|
||||
|
@ -35,7 +35,6 @@
|
|||
#define DEFAULT_DEVICE "/dev/tun"
|
||||
|
||||
int device_fd = -1;
|
||||
int device_type;
|
||||
char *device = NULL;
|
||||
char *iface = NULL;
|
||||
char ifrname[IFNAMSIZ];
|
||||
|
@ -44,7 +43,7 @@ char *device_info = NULL;
|
|||
int device_total_in = 0;
|
||||
int device_total_out = 0;
|
||||
|
||||
int setup_device(void)
|
||||
bool setup_device(void)
|
||||
{
|
||||
int ip_fd = -1, if_fd = -1;
|
||||
int ppa;
|
||||
|
@ -57,7 +56,7 @@ int setup_device(void)
|
|||
|
||||
if((device_fd = open(device, O_RDWR | O_NONBLOCK)) < 0) {
|
||||
logger(LOG_ERR, _("Could not open %s: %s"), device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
ppa = 0;
|
||||
|
@ -69,35 +68,35 @@ int setup_device(void)
|
|||
|
||||
if((ip_fd = open("/dev/ip", O_RDWR, 0)) < 0) {
|
||||
logger(LOG_ERR, _("Could not open /dev/ip: %s"), strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Assign a new PPA and get its unit number. */
|
||||
if((ppa = ioctl(device_fd, TUNNEWPPA, ppa)) < 0) {
|
||||
logger(LOG_ERR, _("Can't assign new interface: %s"), strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if((if_fd = open(device, O_RDWR, 0)) < 0) {
|
||||
logger(LOG_ERR, _("Could not open %s twice: %s"), device,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(ioctl(if_fd, I_PUSH, "ip") < 0) {
|
||||
logger(LOG_ERR, _("Can't push IP module: %s"), strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Assign ppa according to the unit number returned by tun device */
|
||||
if(ioctl(if_fd, IF_UNITSEL, (char *) &ppa) < 0) {
|
||||
logger(LOG_ERR, _("Can't set PPA %d: %s"), ppa, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(ioctl(ip_fd, I_LINK, if_fd) < 0) {
|
||||
logger(LOG_ERR, _("Can't link TUN device to IP: %s"), strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!get_config_string(lookup_config(config_tree, "Interface"), &iface))
|
||||
|
@ -107,7 +106,7 @@ int setup_device(void)
|
|||
|
||||
logger(LOG_INFO, _("%s is a %s"), device, device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void close_device(void)
|
||||
|
@ -117,7 +116,7 @@ void close_device(void)
|
|||
close(device_fd);
|
||||
}
|
||||
|
||||
int read_packet(vpn_packet_t *packet)
|
||||
bool read_packet(vpn_packet_t *packet)
|
||||
{
|
||||
int lenin;
|
||||
|
||||
|
@ -126,7 +125,7 @@ int read_packet(vpn_packet_t *packet)
|
|||
if((lenin = read(device_fd, packet->data + 14, MTU - 14)) <= 0) {
|
||||
logger(LOG_ERR, _("Error while reading from %s %s: %s"), device_info,
|
||||
device, strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
packet->data[12] = 0x08;
|
||||
|
@ -139,10 +138,10 @@ int read_packet(vpn_packet_t *packet)
|
|||
ifdebug(TRAFFIC) logger(LOG_DEBUG, _("Read packet of %d bytes from %s"), packet->len,
|
||||
device_info);
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
int write_packet(vpn_packet_t *packet)
|
||||
bool write_packet(vpn_packet_t *packet)
|
||||
{
|
||||
cp();
|
||||
|
||||
|
@ -152,12 +151,12 @@ int write_packet(vpn_packet_t *packet)
|
|||
if(write(device_fd, packet->data + 14, packet->len - 14) < 0) {
|
||||
logger(LOG_ERR, _("Can't write to %s %s: %s"), device_info, packet->len,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
device_total_out += packet->len;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void dump_device_stats(void)
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: subnet.h,v 1.1.2.21 2003/07/06 23:16:29 guus Exp $
|
||||
$Id: subnet.h,v 1.1.2.22 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_SUBNET_H__
|
||||
|
@ -25,12 +25,12 @@
|
|||
|
||||
#include "net.h"
|
||||
|
||||
enum {
|
||||
typedef enum subnet_type_t {
|
||||
SUBNET_MAC = 0,
|
||||
SUBNET_IPV4,
|
||||
SUBNET_IPV6,
|
||||
SUBNET_TYPES /* Guardian */
|
||||
};
|
||||
} subnet_type_t;
|
||||
|
||||
typedef struct subnet_mac_t {
|
||||
mac_t address;
|
||||
|
@ -53,7 +53,7 @@ typedef struct subnet_t {
|
|||
struct node_t *owner; /* the owner of this subnet */
|
||||
struct node_t *uplink; /* the uplink which we should send packets to for this subnet */
|
||||
|
||||
int type; /* subnet type (IPv4? IPv6? MAC? something even weirder?) */
|
||||
subnet_type_t type; /* subnet type (IPv4? IPv6? MAC? something even weirder?) */
|
||||
|
||||
/* And now for the actual subnet: */
|
||||
|
||||
|
|
123
src/tincd.c
123
src/tincd.c
|
@ -17,7 +17,7 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: tincd.c,v 1.10.4.75 2003/07/22 12:58:34 guus Exp $
|
||||
$Id: tincd.c,v 1.10.4.76 2003/07/22 20:55:20 guus Exp $
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
|
@ -51,10 +51,10 @@
|
|||
char *program_name = NULL;
|
||||
|
||||
/* If nonzero, display usage information and exit. */
|
||||
int show_help = 0;
|
||||
bool show_help = false;
|
||||
|
||||
/* If nonzero, print the version on standard output and exit. */
|
||||
int show_version = 0;
|
||||
bool show_version = false;
|
||||
|
||||
/* If nonzero, it will attempt to kill a running tincd and exit. */
|
||||
int kill_tincd = 0;
|
||||
|
@ -63,40 +63,39 @@ int kill_tincd = 0;
|
|||
int generate_keys = 0;
|
||||
|
||||
/* If nonzero, use null ciphers and skip all key exchanges. */
|
||||
int bypass_security = 0;
|
||||
bool bypass_security = false;
|
||||
|
||||
/* If nonzero, disable swapping for this process. */
|
||||
int do_mlock = 0;
|
||||
bool do_mlock = false;
|
||||
|
||||
/* If nonzero, write log entries to a separate file. */
|
||||
int use_logfile = 0;
|
||||
bool use_logfile = false;
|
||||
|
||||
char *identname = NULL; /* program name for syslog */
|
||||
char *pidfilename = NULL; /* pid file location */
|
||||
char *logfilename = NULL; /* log file location */
|
||||
char **g_argv; /* a copy of the cmdline arguments */
|
||||
char **environment; /* A pointer to the environment on
|
||||
startup */
|
||||
char **environment; /* A pointer to the environment on startup */
|
||||
|
||||
static struct option const long_options[] = {
|
||||
{"config", required_argument, NULL, 'c'},
|
||||
{"kill", optional_argument, NULL, 'k'},
|
||||
{"net", required_argument, NULL, 'n'},
|
||||
{"help", no_argument, &show_help, 1},
|
||||
{"version", no_argument, &show_version, 1},
|
||||
{"no-detach", no_argument, &do_detach, 0},
|
||||
{"help", no_argument, NULL, 1},
|
||||
{"version", no_argument, NULL, 2},
|
||||
{"no-detach", no_argument, NULL, 'D'},
|
||||
{"generate-keys", optional_argument, NULL, 'K'},
|
||||
{"debug", optional_argument, NULL, 'd'},
|
||||
{"bypass-security", no_argument, &bypass_security, 1},
|
||||
{"mlock", no_argument, &do_mlock, 1},
|
||||
{"logfile", optional_argument, NULL, 'F'},
|
||||
{"pidfile", required_argument, NULL, 'P'},
|
||||
{"bypass-security", no_argument, NULL, 3},
|
||||
{"mlock", no_argument, NULL, 'L'},
|
||||
{"logfile", optional_argument, NULL, 4},
|
||||
{"pidfile", required_argument, NULL, 5},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
static void usage(int status)
|
||||
static void usage(bool status)
|
||||
{
|
||||
if(status != 0)
|
||||
if(status)
|
||||
fprintf(stderr, _("Try `%s --help\' for more information.\n"),
|
||||
program_name);
|
||||
else {
|
||||
|
@ -133,11 +132,11 @@ static void parse_options(int argc, char **argv, char **envp)
|
|||
break;
|
||||
|
||||
case 'D': /* no detach */
|
||||
do_detach = 0;
|
||||
do_detach = false;
|
||||
break;
|
||||
|
||||
case 'L': /* no detach */
|
||||
do_mlock = 1;
|
||||
do_mlock = true;
|
||||
break;
|
||||
|
||||
case 'd': /* inc debug level */
|
||||
|
@ -171,7 +170,7 @@ static void parse_options(int argc, char **argv, char **envp)
|
|||
if(!kill_tincd) {
|
||||
fprintf(stderr, _("Invalid argument `%s'; SIGNAL must be a number or one of HUP, TERM, KILL, USR1, USR2, WINCH, INT or ALRM.\n"),
|
||||
optarg);
|
||||
usage(1);
|
||||
usage(true);
|
||||
}
|
||||
}
|
||||
} else
|
||||
|
@ -189,7 +188,7 @@ static void parse_options(int argc, char **argv, char **envp)
|
|||
if(generate_keys < 512) {
|
||||
fprintf(stderr, _("Invalid argument `%s'; BITS must be a number equal to or greater than 512.\n"),
|
||||
optarg);
|
||||
usage(1);
|
||||
usage(true);
|
||||
}
|
||||
|
||||
generate_keys &= ~7; /* Round it to bytes */
|
||||
|
@ -197,18 +196,30 @@ static void parse_options(int argc, char **argv, char **envp)
|
|||
generate_keys = 1024;
|
||||
break;
|
||||
|
||||
case 'F': /* write log entries to a file */
|
||||
use_logfile = 1;
|
||||
case 1: /* show help */
|
||||
show_help = true;
|
||||
break;
|
||||
|
||||
case 2: /* show version */
|
||||
show_version = true;
|
||||
break;
|
||||
|
||||
case 3: /* bypass security */
|
||||
bypass_security = true;
|
||||
break;
|
||||
|
||||
case 4: /* write log entries to a file */
|
||||
use_logfile = true;
|
||||
if(optarg)
|
||||
logfilename = xstrdup(optarg);
|
||||
break;
|
||||
|
||||
case 'P': /* write PID to a file */
|
||||
case 5: /* write PID to a file */
|
||||
pidfilename = xstrdup(optarg);
|
||||
break;
|
||||
|
||||
case '?':
|
||||
usage(1);
|
||||
usage(true);
|
||||
|
||||
default:
|
||||
break;
|
||||
|
@ -257,7 +268,7 @@ static void indicator(int a, int b, void *p)
|
|||
Generate a public/private RSA keypair, and ask for a file to store
|
||||
them in.
|
||||
*/
|
||||
static int keygen(int bits)
|
||||
static bool keygen(int bits)
|
||||
{
|
||||
RSA *rsa_key;
|
||||
FILE *f;
|
||||
|
@ -269,34 +280,15 @@ static int keygen(int bits)
|
|||
|
||||
if(!rsa_key) {
|
||||
fprintf(stderr, _("Error during key generation!\n"));
|
||||
return -1;
|
||||
return false;
|
||||
} else
|
||||
fprintf(stderr, _("Done.\n"));
|
||||
|
||||
get_config_string(lookup_config(config_tree, "Name"), &name);
|
||||
|
||||
if(name)
|
||||
asprintf(&filename, "%s/hosts/%s", confbase, name);
|
||||
else
|
||||
asprintf(&filename, "%s/rsa_key.pub", confbase);
|
||||
|
||||
f = ask_and_safe_open(filename, _("public RSA key"), "a");
|
||||
|
||||
if(!f)
|
||||
return -1;
|
||||
|
||||
if(ftell(f))
|
||||
fprintf(stderr, _("Appending key to existing contents.\nMake sure only one key is stored in the file.\n"));
|
||||
|
||||
PEM_write_RSAPublicKey(f, rsa_key);
|
||||
fclose(f);
|
||||
free(filename);
|
||||
|
||||
asprintf(&filename, "%s/rsa_key.priv", confbase);
|
||||
f = ask_and_safe_open(filename, _("private RSA key"), "a");
|
||||
f = ask_and_safe_open(filename, _("private RSA key"), true, "a");
|
||||
|
||||
if(!f)
|
||||
return -1;
|
||||
return false;
|
||||
|
||||
if(ftell(f))
|
||||
fprintf(stderr, _("Appending key to existing contents.\nMake sure only one key is stored in the file.\n"));
|
||||
|
@ -305,7 +297,26 @@ static int keygen(int bits)
|
|||
fclose(f);
|
||||
free(filename);
|
||||
|
||||
return 0;
|
||||
get_config_string(lookup_config(config_tree, "Name"), &name);
|
||||
|
||||
if(name)
|
||||
asprintf(&filename, "%s/hosts/%s", confbase, name);
|
||||
else
|
||||
asprintf(&filename, "%s/rsa_key.pub", confbase);
|
||||
|
||||
f = ask_and_safe_open(filename, _("public RSA key"), false, "a");
|
||||
|
||||
if(!f)
|
||||
return false;
|
||||
|
||||
if(ftell(f))
|
||||
fprintf(stderr, _("Appending key to existing contents.\nMake sure only one key is stored in the file.\n"));
|
||||
|
||||
PEM_write_RSAPublicKey(f, rsa_key);
|
||||
fclose(f);
|
||||
free(filename);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -360,10 +371,10 @@ int main(int argc, char **argv, char **envp)
|
|||
}
|
||||
|
||||
if(show_help)
|
||||
usage(0);
|
||||
usage(false);
|
||||
|
||||
if(kill_tincd)
|
||||
exit(kill_other(kill_tincd));
|
||||
exit(!kill_other(kill_tincd));
|
||||
|
||||
openlogger("tinc", LOGMODE_STDERR);
|
||||
|
||||
|
@ -393,10 +404,10 @@ int main(int argc, char **argv, char **envp)
|
|||
|
||||
if(generate_keys) {
|
||||
read_server_config();
|
||||
exit(keygen(generate_keys));
|
||||
exit(!keygen(generate_keys));
|
||||
}
|
||||
|
||||
if(read_server_config())
|
||||
if(!read_server_config())
|
||||
exit(1);
|
||||
|
||||
if(lzo_init() != LZO_E_OK) {
|
||||
|
@ -404,11 +415,11 @@ int main(int argc, char **argv, char **envp)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
if(detach())
|
||||
exit(0);
|
||||
if(!detach())
|
||||
exit(1);
|
||||
|
||||
for(;;) {
|
||||
if(!setup_network_connections()) {
|
||||
if(setup_network_connections()) {
|
||||
main_loop();
|
||||
cleanup_and_exit(1);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue