Removed lots of compiler warnings.
This commit is contained in:
parent
173d606514
commit
4fa12eb85d
5 changed files with 95 additions and 161 deletions
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
$Id: conf.h,v 1.6.4.22 2001/01/13 16:36:21 guus Exp $
|
$Id: conf.h,v 1.6.4.23 2001/02/27 16:37:24 guus Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TINC_CONF_H__
|
#ifndef __TINC_CONF_H__
|
||||||
|
@ -100,5 +100,6 @@ extern const config_t *get_config_val(config_t *, which_t type);
|
||||||
extern void clear_config();
|
extern void clear_config();
|
||||||
extern int read_server_config(void);
|
extern int read_server_config(void);
|
||||||
extern FILE *ask_and_safe_open(const char*, const char*, const char *);
|
extern FILE *ask_and_safe_open(const char*, const char*, const char *);
|
||||||
|
extern int is_safe_path(const char *);
|
||||||
|
|
||||||
#endif /* __TINC_CONF_H__ */
|
#endif /* __TINC_CONF_H__ */
|
||||||
|
|
72
src/net.c
72
src/net.c
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
$Id: net.c,v 1.35.4.99 2001/02/27 16:17:04 guus Exp $
|
$Id: net.c,v 1.35.4.100 2001/02/27 16:37:25 guus Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -971,76 +971,6 @@ cp
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
create a data (udp) socket
|
|
||||||
OBSOLETED: use only one listening socket for compatibility with non-Linux operating systems
|
|
||||||
*/
|
|
||||||
int setup_vpn_connection(connection_t *cl)
|
|
||||||
{
|
|
||||||
int nfd, flags;
|
|
||||||
struct sockaddr_in a;
|
|
||||||
const int one = 1;
|
|
||||||
cp
|
|
||||||
if(debug_lvl >= DEBUG_TRAFFIC)
|
|
||||||
syslog(LOG_DEBUG, _("Opening UDP socket to %s"), cl->hostname);
|
|
||||||
|
|
||||||
nfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
|
||||||
if(nfd == -1)
|
|
||||||
{
|
|
||||||
syslog(LOG_ERR, _("Creating UDP socket failed: %m"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
setsockopt(nfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
|
|
||||||
|
|
||||||
flags = fcntl(nfd, F_GETFL);
|
|
||||||
if(fcntl(nfd, F_SETFL, flags | O_NONBLOCK) < 0)
|
|
||||||
{
|
|
||||||
close(nfd);
|
|
||||||
syslog(LOG_ERR, _("System call `%s' failed: %m"),
|
|
||||||
"fcntl");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&a, 0, sizeof(a));
|
|
||||||
a.sin_family = AF_INET;
|
|
||||||
a.sin_port = htons(myself->port);
|
|
||||||
a.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
||||||
|
|
||||||
if(bind(nfd, (struct sockaddr *)&a, sizeof(struct sockaddr)))
|
|
||||||
{
|
|
||||||
close(nfd);
|
|
||||||
syslog(LOG_ERR, _("Can't bind to port %hd/udp: %m"), myself->port);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.sin_family = AF_INET;
|
|
||||||
a.sin_port = htons(cl->port);
|
|
||||||
a.sin_addr.s_addr = htonl(cl->address);
|
|
||||||
|
|
||||||
if(connect(nfd, (struct sockaddr *)&a, sizeof(a)) == -1)
|
|
||||||
{
|
|
||||||
close(nfd);
|
|
||||||
syslog(LOG_ERR, _("Connecting to %s port %d failed: %m"),
|
|
||||||
cl->hostname, cl->port);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
flags = fcntl(nfd, F_GETFL);
|
|
||||||
if(fcntl(nfd, F_SETFL, flags | O_NONBLOCK) < 0)
|
|
||||||
{
|
|
||||||
close(nfd);
|
|
||||||
syslog(LOG_ERR, _("This is a bug: %s:%d: %d:%m %s (%s)"), __FILE__, __LINE__, nfd,
|
|
||||||
cl->name, cl->hostname);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
cl->socket = nfd;
|
|
||||||
cl->status.dataopen = 1;
|
|
||||||
cp
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
handle an incoming tcp connect call and open
|
handle an incoming tcp connect call and open
|
||||||
a connection to it.
|
a connection to it.
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
$Id: net.h,v 1.9.4.27 2001/01/07 20:19:31 guus Exp $
|
$Id: net.h,v 1.9.4.28 2001/02/27 16:37:28 guus Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TINC_NET_H__
|
#ifndef __TINC_NET_H__
|
||||||
|
@ -117,7 +117,6 @@ extern int receive_packet(connection_t *, vpn_packet_t *);
|
||||||
extern int setup_network_connections(void);
|
extern int setup_network_connections(void);
|
||||||
extern void close_network_connections(void);
|
extern void close_network_connections(void);
|
||||||
extern void main_loop(void);
|
extern void main_loop(void);
|
||||||
extern int setup_vpn_connection(connection_t *);
|
|
||||||
extern void terminate_connection(connection_t *);
|
extern void terminate_connection(connection_t *);
|
||||||
extern void flush_queue(connection_t *);
|
extern void flush_queue(connection_t *);
|
||||||
|
|
||||||
|
|
174
src/protocol.c
174
src/protocol.c
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
$Id: protocol.c,v 1.28.4.82 2001/02/26 11:37:20 guus Exp $
|
$Id: protocol.c,v 1.28.4.83 2001/02/27 16:37:28 guus Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -271,6 +271,88 @@ cp
|
||||||
return send_metakey(cl);
|
return send_metakey(cl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ack_h(connection_t *cl)
|
||||||
|
{
|
||||||
|
config_t const *cfg;
|
||||||
|
connection_t *old, *p;
|
||||||
|
subnet_t *subnet;
|
||||||
|
avl_node_t *node, *node2;
|
||||||
|
cp
|
||||||
|
/* Okay, before we active the connection, we check if there is another entry
|
||||||
|
in the connection list with the same name. If so, it presumably is an
|
||||||
|
old connection that has timed out but we don't know it yet.
|
||||||
|
*/
|
||||||
|
|
||||||
|
while((old = lookup_id(cl->name)))
|
||||||
|
{
|
||||||
|
if(debug_lvl >= DEBUG_CONNECTIONS)
|
||||||
|
syslog(LOG_NOTICE, _("Removing old entry for %s at %s in favour of new connection from %s"),
|
||||||
|
cl->name, old->hostname, cl->hostname);
|
||||||
|
|
||||||
|
terminate_connection(old);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Activate this connection */
|
||||||
|
|
||||||
|
cl->allow_request = ALL;
|
||||||
|
cl->status.active = 1;
|
||||||
|
cl->nexthop = cl;
|
||||||
|
cl->cipher_pkttype = EVP_bf_cbc();
|
||||||
|
cl->cipher_pktkeylength = cl->cipher_pkttype->key_len + cl->cipher_pkttype->iv_len;
|
||||||
|
|
||||||
|
if(debug_lvl >= DEBUG_CONNECTIONS)
|
||||||
|
syslog(LOG_NOTICE, _("Connection with %s (%s) activated"), cl->name, cl->hostname);
|
||||||
|
|
||||||
|
cp
|
||||||
|
/* Check some options */
|
||||||
|
|
||||||
|
if((cfg = get_config_val(cl->config, config_indirectdata)))
|
||||||
|
{
|
||||||
|
if(cfg->data.val == stupid_true)
|
||||||
|
cl->options |= OPTION_INDIRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((cfg = get_config_val(cl->config, config_tcponly)))
|
||||||
|
{
|
||||||
|
if(cfg->data.val == stupid_true)
|
||||||
|
cl->options |= OPTION_TCPONLY;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send him our subnets */
|
||||||
|
|
||||||
|
for(node = myself->subnet_tree->head; node; node = node->next)
|
||||||
|
{
|
||||||
|
subnet = (subnet_t *)node->data;
|
||||||
|
send_add_subnet(cl, subnet);
|
||||||
|
}
|
||||||
|
/* And send him all the hosts and their subnets we know... */
|
||||||
|
|
||||||
|
for(node = connection_tree->head; node; node = node->next)
|
||||||
|
{
|
||||||
|
p = (connection_t *)node->data;
|
||||||
|
|
||||||
|
if(p != cl && p->status.active)
|
||||||
|
{
|
||||||
|
/* Notify others of this connection */
|
||||||
|
|
||||||
|
if(p->status.meta)
|
||||||
|
send_add_host(p, cl);
|
||||||
|
|
||||||
|
/* Notify new connection of everything we know */
|
||||||
|
|
||||||
|
send_add_host(cl, p);
|
||||||
|
|
||||||
|
for(node2 = p->subnet_tree->head; node2; node2 = node2->next)
|
||||||
|
{
|
||||||
|
subnet = (subnet_t *)node2->data;
|
||||||
|
send_add_subnet(cl, subnet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cp
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int send_challenge(connection_t *cl)
|
int send_challenge(connection_t *cl)
|
||||||
{
|
{
|
||||||
char *buffer;
|
char *buffer;
|
||||||
|
@ -539,88 +621,6 @@ cp
|
||||||
return send_challenge(cl);
|
return send_challenge(cl);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ack_h(connection_t *cl)
|
|
||||||
{
|
|
||||||
config_t const *cfg;
|
|
||||||
connection_t *old, *p;
|
|
||||||
subnet_t *subnet;
|
|
||||||
avl_node_t *node, *node2;
|
|
||||||
cp
|
|
||||||
/* Okay, before we active the connection, we check if there is another entry
|
|
||||||
in the connection list with the same name. If so, it presumably is an
|
|
||||||
old connection that has timed out but we don't know it yet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
while((old = lookup_id(cl->name)))
|
|
||||||
{
|
|
||||||
if(debug_lvl >= DEBUG_CONNECTIONS)
|
|
||||||
syslog(LOG_NOTICE, _("Removing old entry for %s at %s in favour of new connection from %s"),
|
|
||||||
cl->name, old->hostname, cl->hostname);
|
|
||||||
|
|
||||||
terminate_connection(old);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Activate this connection */
|
|
||||||
|
|
||||||
cl->allow_request = ALL;
|
|
||||||
cl->status.active = 1;
|
|
||||||
cl->nexthop = cl;
|
|
||||||
cl->cipher_pkttype = EVP_bf_cbc();
|
|
||||||
cl->cipher_pktkeylength = cl->cipher_pkttype->key_len + cl->cipher_pkttype->iv_len;
|
|
||||||
|
|
||||||
if(debug_lvl >= DEBUG_CONNECTIONS)
|
|
||||||
syslog(LOG_NOTICE, _("Connection with %s (%s) activated"), cl->name, cl->hostname);
|
|
||||||
|
|
||||||
cp
|
|
||||||
/* Check some options */
|
|
||||||
|
|
||||||
if((cfg = get_config_val(cl->config, config_indirectdata)))
|
|
||||||
{
|
|
||||||
if(cfg->data.val == stupid_true)
|
|
||||||
cl->options |= OPTION_INDIRECT;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((cfg = get_config_val(cl->config, config_tcponly)))
|
|
||||||
{
|
|
||||||
if(cfg->data.val == stupid_true)
|
|
||||||
cl->options |= OPTION_TCPONLY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Send him our subnets */
|
|
||||||
|
|
||||||
for(node = myself->subnet_tree->head; node; node = node->next)
|
|
||||||
{
|
|
||||||
subnet = (subnet_t *)node->data;
|
|
||||||
send_add_subnet(cl, subnet);
|
|
||||||
}
|
|
||||||
/* And send him all the hosts and their subnets we know... */
|
|
||||||
|
|
||||||
for(node = connection_tree->head; node; node = node->next)
|
|
||||||
{
|
|
||||||
p = (connection_t *)node->data;
|
|
||||||
|
|
||||||
if(p != cl && p->status.active)
|
|
||||||
{
|
|
||||||
/* Notify others of this connection */
|
|
||||||
|
|
||||||
if(p->status.meta)
|
|
||||||
send_add_host(p, cl);
|
|
||||||
|
|
||||||
/* Notify new connection of everything we know */
|
|
||||||
|
|
||||||
send_add_host(cl, p);
|
|
||||||
|
|
||||||
for(node2 = p->subnet_tree->head; node2; node2 = node2->next)
|
|
||||||
{
|
|
||||||
subnet = (subnet_t *)node2->data;
|
|
||||||
send_add_subnet(cl, subnet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cp
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Address and subnet information exchange */
|
/* Address and subnet information exchange */
|
||||||
|
|
||||||
int send_add_subnet(connection_t *cl, subnet_t *subnet)
|
int send_add_subnet(connection_t *cl, subnet_t *subnet)
|
||||||
|
@ -798,6 +798,8 @@ cp
|
||||||
if(!(cl->options & OPTION_INDIRECT))
|
if(!(cl->options & OPTION_INDIRECT))
|
||||||
return send_request(cl, "%d %s %lx:%d %lx", ADD_HOST,
|
return send_request(cl, "%d %s %lx:%d %lx", ADD_HOST,
|
||||||
other->name, other->address, other->port, other->options);
|
other->name, other->address, other->port, other->options);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int add_host_h(connection_t *cl)
|
int add_host_h(connection_t *cl)
|
||||||
|
@ -808,7 +810,7 @@ int add_host_h(connection_t *cl)
|
||||||
cp
|
cp
|
||||||
new = new_connection();
|
new = new_connection();
|
||||||
|
|
||||||
if(sscanf(cl->buffer, "%*d "MAX_STRING" %lx:%d %lx", name, &new->address, &new->port, &new->options) != 4)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" %lx:%hd %lx", name, &new->address, &new->port, &new->options) != 4)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad ADD_HOST from %s (%s)"), cl->name, cl->hostname);
|
syslog(LOG_ERR, _("Got bad ADD_HOST from %s (%s)"), cl->name, cl->hostname);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -890,6 +892,8 @@ cp
|
||||||
if(!(cl->options & OPTION_INDIRECT))
|
if(!(cl->options & OPTION_INDIRECT))
|
||||||
return send_request(cl, "%d %s %lx:%d %lx", DEL_HOST,
|
return send_request(cl, "%d %s %lx:%d %lx", DEL_HOST,
|
||||||
other->name, other->address, other->port, other->options);
|
other->name, other->address, other->port, other->options);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int del_host_h(connection_t *cl)
|
int del_host_h(connection_t *cl)
|
||||||
|
@ -901,7 +905,7 @@ int del_host_h(connection_t *cl)
|
||||||
connection_t *old, *p;
|
connection_t *old, *p;
|
||||||
avl_node_t *node;
|
avl_node_t *node;
|
||||||
cp
|
cp
|
||||||
if(sscanf(cl->buffer, "%*d "MAX_STRING" %lx:%d %lx", name, &address, &port, &options) != 4)
|
if(sscanf(cl->buffer, "%*d "MAX_STRING" %lx:%hd %lx", name, &address, &port, &options) != 4)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, _("Got bad DEL_HOST from %s (%s)"),
|
syslog(LOG_ERR, _("Got bad DEL_HOST from %s (%s)"),
|
||||||
cl->name, cl->hostname);
|
cl->name, cl->hostname);
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
$Id: tincd.c,v 1.10.4.43 2001/02/25 14:51:42 guus Exp $
|
$Id: tincd.c,v 1.10.4.44 2001/02/27 16:37:31 guus Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -246,7 +246,7 @@ int keygen(int bits)
|
||||||
if(config && (cfg = get_config_val(config, config_name)))
|
if(config && (cfg = get_config_val(config, config_name)))
|
||||||
asprintf(&filename, "%s/hosts/%s", confbase, cfg->data.ptr);
|
asprintf(&filename, "%s/hosts/%s", confbase, cfg->data.ptr);
|
||||||
else
|
else
|
||||||
asprintf(&filename, "%s/rsa_key.priv");
|
asprintf(&filename, "%s/rsa_key.priv", confbase);
|
||||||
|
|
||||||
if((f = ask_and_safe_open(filename, _("public RSA key"), "a")) == NULL)
|
if((f = ask_and_safe_open(filename, _("public RSA key"), "a")) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in a new issue