- Second fixing-things pass: it even links now.
- Lots of FIXME comments added to the source code.
This commit is contained in:
parent
6a8c2e346e
commit
e9635ae38e
10 changed files with 159 additions and 84 deletions
29
lib/utils.c
29
lib/utils.c
|
@ -17,6 +17,9 @@
|
|||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <utils.h>
|
||||
|
@ -24,3 +27,29 @@
|
|||
volatile int cp_line;
|
||||
volatile char *cp_file;
|
||||
|
||||
char *charbin2hex = "0123456789ABCDEF";
|
||||
|
||||
int charhex2bin(char c)
|
||||
{
|
||||
if(isdigit(c))
|
||||
return c - '0';
|
||||
else
|
||||
return tolower(c) - 'a' + 10;
|
||||
}
|
||||
|
||||
void hex2bin(char *src, char *dst, size_t length)
|
||||
{
|
||||
size_t i;
|
||||
for(i=0; i<length; i++)
|
||||
dst[i] = charhex2bin(src[i*2])<<4 || charhex2bin(src[i*2+1]);
|
||||
}
|
||||
|
||||
void bin2hex(char *src, char *dst, size_t length)
|
||||
{
|
||||
size_t i;
|
||||
for(i=length-1; i>=0; i--)
|
||||
{
|
||||
dst[i*2+1] = charbin2hex[src[i] & 15];
|
||||
dst[i*2] = charbin2hex[src[i]>>4];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
#ifndef __TINC_UTILS_H__
|
||||
#define __TINC_UTILS_H__
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
enum {
|
||||
DEBUG_CONNECTIONS = 0,
|
||||
DEBUG_PROTOCOL,
|
||||
|
@ -35,4 +37,7 @@ enum {
|
|||
extern volatile int cp_line;
|
||||
extern volatile char *cp_file;
|
||||
|
||||
extern void hex2bin(char *src, char *dst, size_t length);
|
||||
extern void bin2hex(char *src, char *dst, size_t length);
|
||||
|
||||
#endif /* __TINC_UTILS_H__ */
|
||||
|
|
18
src/conf.c
18
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.12 2000/10/11 22:00:57 guus Exp $
|
||||
$Id: conf.c,v 1.9.4.13 2000/10/14 17:04:12 guus Exp $
|
||||
*/
|
||||
|
||||
|
||||
|
@ -38,13 +38,13 @@
|
|||
#include <utils.h> /* for cp */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "connlist.h"
|
||||
#include "system.h"
|
||||
|
||||
config_t *config;
|
||||
int debug_lvl = 0;
|
||||
int timeout = 0; /* seconds before timeout */
|
||||
char *configfilename = NULL;
|
||||
char *confbase = NULL; /* directory in which all config files are */
|
||||
|
||||
/* Will be set if HUP signal is received. It will be processed when it is safe. */
|
||||
int sighup = 0;
|
||||
|
@ -210,6 +210,18 @@ cp
|
|||
return err;
|
||||
}
|
||||
|
||||
int read_server_config()
|
||||
{
|
||||
char *fname;
|
||||
int x;
|
||||
cp
|
||||
asprintf(fname, "%s/tinc.conf", confbase);
|
||||
x = read_config_file(&config, fname);
|
||||
free(fname);
|
||||
cp
|
||||
return x;
|
||||
}
|
||||
|
||||
/*
|
||||
Look up the value of the config option type
|
||||
*/
|
||||
|
|
|
@ -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: conf.h,v 1.6.4.11 2000/10/11 22:00:58 guus Exp $
|
||||
$Id: conf.h,v 1.6.4.12 2000/10/14 17:04:13 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_CONF_H__
|
||||
|
@ -87,12 +87,13 @@ extern int debug_lvl;
|
|||
extern int timeout;
|
||||
extern int upstreamindex;
|
||||
extern int sighup;
|
||||
extern char *configfilename;
|
||||
extern char *confbase;
|
||||
|
||||
extern config_t *add_config_val(config_t **, int, char *);
|
||||
extern int read_config_file(config_t **, const char *);
|
||||
extern const config_t *get_config_val(config_t *, which_t type);
|
||||
extern const config_t *get_next_config_val(config_t *, which_t type, int);
|
||||
extern void clear_config();
|
||||
extern int read_server_config(void);
|
||||
|
||||
#endif /* __TINC_CONF_H__ */
|
||||
|
|
|
@ -17,15 +17,17 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: connlist.c,v 1.1.2.2 2000/10/11 22:00:58 guus Exp $
|
||||
$Id: connlist.c,v 1.1.2.3 2000/10/14 17:04:13 guus Exp $
|
||||
*/
|
||||
|
||||
#include <syslog.h>
|
||||
|
||||
#include "net.h" /* Don't ask. */
|
||||
#include "config.h"
|
||||
#include "conf.h"
|
||||
#include <utils.h>
|
||||
|
||||
#include "net.h" /* Don't ask. */
|
||||
#include "system.h"
|
||||
|
||||
/* Root of the connection list */
|
||||
|
||||
|
@ -55,8 +57,10 @@ cp
|
|||
free(p->name);
|
||||
if(p->hostname)
|
||||
free(p->hostname);
|
||||
free_key(p->public_key);
|
||||
free_key(p->datakey);
|
||||
if(p->public_key)
|
||||
RSA_free(p->public_key);
|
||||
if(p->cipher_pktkey)
|
||||
free(p->cipher_pktkey);
|
||||
free(p);
|
||||
cp
|
||||
}
|
||||
|
@ -79,7 +83,7 @@ cp
|
|||
else
|
||||
conn_list = next;
|
||||
|
||||
free_conn_element(p);
|
||||
free_conn_list(p);
|
||||
}
|
||||
else
|
||||
prev = p;
|
||||
|
@ -99,7 +103,7 @@ cp
|
|||
for(p = conn_list; p != NULL; )
|
||||
{
|
||||
next = p->next;
|
||||
free_conn_element(p);
|
||||
free_conn_list(p);
|
||||
p = next;
|
||||
}
|
||||
|
||||
|
@ -204,3 +208,15 @@ cp
|
|||
syslog(LOG_DEBUG, _("End of connection list."));
|
||||
cp
|
||||
}
|
||||
|
||||
int read_host_config(conn_list_t *cl)
|
||||
{
|
||||
char *fname;
|
||||
int x;
|
||||
cp
|
||||
asprintf(fname, "%s/hosts/%s", confbase, cl->name);
|
||||
x = read_config_file(&cl->config, fname);
|
||||
free(fname);
|
||||
cp
|
||||
return x;
|
||||
}
|
||||
|
|
|
@ -17,13 +17,14 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: connlist.h,v 1.1.2.2 2000/10/11 22:00:58 guus Exp $
|
||||
$Id: connlist.h,v 1.1.2.3 2000/10/14 17:04:13 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_CONNLIST_H__
|
||||
#define __TINC_CONNLIST_H__
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/rsa.h>
|
||||
|
||||
#include "net.h"
|
||||
#include "conf.h"
|
||||
|
@ -43,9 +44,7 @@ typedef struct conn_list_t {
|
|||
packet_queue_t *sq; /* pending outgoing packets */
|
||||
packet_queue_t *rq; /* pending incoming packets (they have no
|
||||
valid key to be decrypted with) */
|
||||
enc_key_t *public_key; /* the other party's public key */
|
||||
enc_key_t *datakey; /* encrypt data packets with this key */
|
||||
enc_key_t *rsakey;
|
||||
RSA *public_key; /* the other party's public key */
|
||||
|
||||
EVP_CIPHER_CTX *cipher_inctx; /* Context of encrypted meta data that will come from him to us */
|
||||
EVP_CIPHER_CTX *cipher_outctx; /* Context of encrypted meta data that will be sent from us to him */
|
||||
|
@ -53,7 +52,6 @@ typedef struct conn_list_t {
|
|||
EVP_CIPHER_CTX *cipher_pktctx; /* Context of encrypted vpn packets that will be sent to him */
|
||||
EVP_CIPHER *cipher_pkttype; /* Cipher type for encrypted vpn packets */
|
||||
char *cipher_pktkey; /* Cipher key */
|
||||
char *cipher_pktiv; /* Cipher input vector */
|
||||
|
||||
char *buffer; /* metadata input buffer */
|
||||
int buflen; /* bytes read into buffer */
|
||||
|
@ -92,5 +90,6 @@ extern conn_list_t *lookup_conn_list_mac(mac_t);
|
|||
extern conn_list_t *lookup_conn_list_ipv4(ipv4_t);
|
||||
extern conn_list_t *lookup_conn_list_ipv6(ipv6_t);
|
||||
extern void dump_conn_list(void);
|
||||
extern int read_host_config(conn_list_t *);
|
||||
|
||||
#endif /* __TINC_CONNLIST_H__ */
|
||||
|
|
52
src/net.c
52
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.34 2000/10/11 22:00:58 guus Exp $
|
||||
$Id: net.c,v 1.35.4.35 2000/10/14 17:04:13 guus Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
@ -59,10 +59,6 @@ int total_socket_out = 0;
|
|||
int upstreamindex = 0;
|
||||
static int seconds_till_retry;
|
||||
|
||||
/* The global list of existing connections */
|
||||
conn_list_t *conn_list = NULL;
|
||||
conn_list_t *myself = NULL;
|
||||
|
||||
/*
|
||||
strip off the MAC adresses of an ethernet frame
|
||||
*/
|
||||
|
@ -95,7 +91,7 @@ int xsend(conn_list_t *cl, vpn_packet_t *inpkt)
|
|||
int outlen, outpad;
|
||||
cp
|
||||
outpkt.len = inpkt->len;
|
||||
EVP_EncryptInit(cl->cipher_pktctx, cl->cipher_pkttype, cl->cipher_pktkey, cl->cipher_pktiv);
|
||||
EVP_EncryptInit(cl->cipher_pktctx, cl->cipher_pkttype, cl->cipher_pktkey, NULL);
|
||||
EVP_EncryptUpdate(cl->cipher_pktctx, outpkt.data, &outlen, inpkt->data, inpkt->len);
|
||||
EVP_EncryptFinal(cl->cipher_pktctx, outpkt.data + outlen, &outpad);
|
||||
outlen += outpad;
|
||||
|
@ -128,7 +124,7 @@ cp
|
|||
inpkt->len);
|
||||
|
||||
outpkt.len = inpkt->len;
|
||||
EVP_DecryptInit(myself->cipher_pktctx, myself->cipher_pkttype, myself->cipher_pktkey, myself->cipher_pktiv);
|
||||
EVP_DecryptInit(myself->cipher_pktctx, myself->cipher_pkttype, myself->cipher_pktkey, NULL);
|
||||
EVP_DecryptUpdate(myself->cipher_pktctx, outpkt.data, &outlen, inpkt->data, inpkt->len);
|
||||
/* FIXME: grok DecryptFinal
|
||||
EVP_DecryptFinal(myself->cipher_pktctx, outpkt.data + outlen, &outpad);
|
||||
|
@ -289,9 +285,6 @@ cp
|
|||
|
||||
/* FIXME - check for indirection and reprogram it The Right Way(tm) this time. */
|
||||
|
||||
if(my_key_expiry <= time(NULL))
|
||||
regenerate_keys();
|
||||
|
||||
if(!cl->status.dataopen)
|
||||
if(setup_vpn_connection(cl) < 0)
|
||||
{
|
||||
|
@ -538,7 +531,7 @@ cp
|
|||
{
|
||||
syslog(LOG_ERR, _("Could not set up a meta connection to %s"),
|
||||
ncn->hostname);
|
||||
free_conn_element(ncn);
|
||||
free_conn_list(ncn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -559,7 +552,7 @@ int setup_myself(void)
|
|||
cp
|
||||
myself = new_conn_list();
|
||||
|
||||
myself->hostname = "MYSELF"; /* FIXME? */
|
||||
asprintf(&myself->hostname, "MYSELF"); /* FIXME? Do hostlookup on ourselves? */
|
||||
myself->flags = 0;
|
||||
|
||||
if(!(cfg = get_config_val(config, tincname))) /* Not acceptable */
|
||||
|
@ -569,17 +562,29 @@ cp
|
|||
}
|
||||
else
|
||||
myself->name = (char*)cfg->data.val;
|
||||
|
||||
if(check_id(myself->name))
|
||||
{
|
||||
syslog(LOG_ERR, _("Invalid name for myself!"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(read_host_config(myself))
|
||||
{
|
||||
syslog(LOG_ERR, _("Cannot open host configuration file for myself!"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(!(cfg = get_config_val(myself, port)))
|
||||
if(!(cfg = get_config_val(myself->config, port)))
|
||||
myself->port = 655;
|
||||
else
|
||||
myself->port = cfg->data.val;
|
||||
|
||||
if((cfg = get_config_val(config, indirectdata)))
|
||||
if((cfg = get_config_val(myself->config, indirectdata)))
|
||||
if(cfg->data.val == stupid_true)
|
||||
myself->flags |= EXPORTINDIRECTDATA;
|
||||
|
||||
if((cfg = get_config_val(config, tcponly)))
|
||||
if((cfg = get_config_val(myself->config, tcponly)))
|
||||
if(cfg->data.val == stupid_true)
|
||||
myself->flags |= TCPONLY;
|
||||
|
||||
|
@ -780,9 +785,9 @@ cp
|
|||
syslog(LOG_NOTICE, _("Connection from %s port %d"),
|
||||
p->hostname, htons(ci.sin_port));
|
||||
|
||||
if(send_basic_info(p) < 0)
|
||||
if(send_id(p) < 0)
|
||||
{
|
||||
free_conn_element(p);
|
||||
free_conn_list(p);
|
||||
return NULL;
|
||||
}
|
||||
cp
|
||||
|
@ -860,12 +865,6 @@ cp
|
|||
if(debug_lvl > 0)
|
||||
syslog(LOG_NOTICE, _("Closing connection with %s (%s)"),
|
||||
cl->name, cl->hostname);
|
||||
|
||||
if(cl->status.timeout)
|
||||
send_timeout(cl);
|
||||
/* else if(!cl->status.termreq)
|
||||
send_termreq(cl);
|
||||
*/
|
||||
|
||||
if(cl->socket)
|
||||
close(cl->socket);
|
||||
|
@ -875,8 +874,11 @@ cp
|
|||
cl->status.remove = 1;
|
||||
|
||||
/* If this cl isn't active, don't send any DEL_HOSTs. */
|
||||
|
||||
/* FIXME: reprogram this.
|
||||
if(cl->status.active)
|
||||
notify_others(cl,NULL,send_del_host);
|
||||
*/
|
||||
|
||||
cp
|
||||
/* Find all connections that were lost because they were behind cl
|
||||
|
@ -887,7 +889,9 @@ cp
|
|||
if((p->nexthop == cl) && (p != cl))
|
||||
{
|
||||
if(cl->status.active && p->status.active)
|
||||
/* FIXME: reprogram this
|
||||
notify_others(p,cl,send_del_host);
|
||||
*/;
|
||||
if(cl->socket)
|
||||
close(cl->socket);
|
||||
p->status.active = 0;
|
||||
|
@ -1106,6 +1110,7 @@ cp
|
|||
if(sighup)
|
||||
{
|
||||
sighup = 0;
|
||||
/* FIXME: reprogram this.
|
||||
if(debug_lvl > 1)
|
||||
syslog(LOG_INFO, _("Rereading configuration file"));
|
||||
close_network_connections();
|
||||
|
@ -1117,6 +1122,7 @@ cp
|
|||
}
|
||||
sleep(5);
|
||||
setup_network_connections();
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,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.15 2000/10/11 22:01:00 guus Exp $
|
||||
$Id: net.h,v 1.9.4.16 2000/10/14 17:04:15 guus Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TINC_NET_H__
|
||||
|
@ -25,7 +25,6 @@
|
|||
#include <sys/time.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "conf.h"
|
||||
|
||||
#define MAXSIZE 1700 /* should be a bit more than the MTU for the tapdevice */
|
||||
#define MTU 1600
|
||||
|
|
|
@ -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.38 2000/10/11 22:01:00 guus Exp $
|
||||
$Id: protocol.c,v 1.28.4.39 2000/10/14 17:04:15 guus Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
@ -399,9 +399,10 @@ cp
|
|||
|
||||
/* Exchange information about other tinc daemons */
|
||||
|
||||
/* FIXME: reprogram this.
|
||||
notify_others(cl, NULL, send_add_host);
|
||||
notify_one(cl);
|
||||
|
||||
*/
|
||||
upstreamindex = 0;
|
||||
|
||||
cp
|
||||
|
@ -653,9 +654,9 @@ cp
|
|||
conn_list_add(conn_list, new);
|
||||
|
||||
/* Tell the rest about the new host */
|
||||
|
||||
/* FIXME: reprogram this.
|
||||
notify_others(new, cl, send_add_host);
|
||||
|
||||
*/
|
||||
cp
|
||||
return 0;
|
||||
}
|
||||
|
@ -942,7 +943,7 @@ cp
|
|||
|
||||
if(!strcmp(to_id, myself->name))
|
||||
{
|
||||
send_ans_key(myself, from, myself->datakey->key);
|
||||
send_ans_key(myself, from, myself->cipher_pktkey);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -961,20 +962,20 @@ cp
|
|||
return 0;
|
||||
}
|
||||
|
||||
int send_ans_key(conn_list_t *from, conn_list_t *to, char *datakey)
|
||||
int send_ans_key(conn_list_t *from, conn_list_t *to, char *pktkey)
|
||||
{
|
||||
cp
|
||||
return send_request(to->nexthop, "%d %s %s %s", ANS_KEY,
|
||||
from->name, to->name, datakey);
|
||||
from->name, to->name, pktkey);
|
||||
}
|
||||
|
||||
int ans_key_h(conn_list_t *cl)
|
||||
{
|
||||
char *from_id, *to_id, *datakey;
|
||||
char *from_id, *to_id, *pktkey;
|
||||
int keylength;
|
||||
conn_list_t *from, *to;
|
||||
cp
|
||||
if(sscanf(cl->buffer, "%*d %as %as %as", &from_id, &to_id, &datakey) != 3)
|
||||
if(sscanf(cl->buffer, "%*d %as %as %as", &from_id, &to_id, &pktkey) != 3)
|
||||
{
|
||||
syslog(LOG_ERR, _("Got bad ANS_KEY from %s (%s)"),
|
||||
cl->name, cl->hostname);
|
||||
|
@ -985,7 +986,7 @@ cp
|
|||
{
|
||||
syslog(LOG_ERR, _("Got ANS_KEY from %s (%s) origin %s which does not exist in our connection list"),
|
||||
cl->name, cl->hostname, from_id);
|
||||
free(from_id); free(to_id); free(datakey);
|
||||
free(from_id); free(to_id); free(pktkey);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -995,18 +996,18 @@ cp
|
|||
{
|
||||
/* It is for us, convert it to binary and set the key with it. */
|
||||
|
||||
keylength = strlen(datakey);
|
||||
keylength = strlen(pktkey);
|
||||
|
||||
if((keylength%2) || (keylength <= 0))
|
||||
{
|
||||
syslog(LOG_ERR, _("Got bad ANS_KEY from %s (%s) origin %s: invalid key"),
|
||||
cl->name, cl->hostname, from->name);
|
||||
free(from_id); free(to_id); free(datakey);
|
||||
free(from_id); free(to_id); free(pktkey);
|
||||
return -1;
|
||||
}
|
||||
keylength /= 2;
|
||||
hex2bin(datakey, datakey, keylength);
|
||||
BF_set_key(cl->datakey, keylength, datakey);
|
||||
hex2bin(pktkey, pktkey, keylength);
|
||||
BF_set_key(cl->cipher_pktkey, keylength, pktkey);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1014,13 +1015,13 @@ cp
|
|||
{
|
||||
syslog(LOG_ERR, _("Got ANS_KEY from %s (%s) destination %s which does not exist in our connection list"),
|
||||
cl->name, cl->hostname, to_id);
|
||||
free(from_id); free(to_id); free(datakey);
|
||||
free(from_id); free(to_id); free(pktkey);
|
||||
return -1;
|
||||
}
|
||||
send_ans_key(from, to, datakey);
|
||||
send_ans_key(from, to, pktkey);
|
||||
}
|
||||
|
||||
free(from_id); free(to_id); free(datakey);
|
||||
free(from_id); free(to_id); free(pktkey);
|
||||
cp
|
||||
return 0;
|
||||
}
|
||||
|
@ -1046,3 +1047,15 @@ char (*request_name[]) = {
|
|||
"ADD_SUBNET", "DEL_SUBNET",
|
||||
"KEY_CHANGED", "REQ_KEY", "ANS_KEY",
|
||||
};
|
||||
|
||||
/* Status strings */
|
||||
|
||||
char (*status_text[]) = {
|
||||
"FIXME: status text",
|
||||
};
|
||||
|
||||
/* Error strings */
|
||||
|
||||
char (*error_text[]) = {
|
||||
"FIXME: error text",
|
||||
};
|
||||
|
|
47
src/tincd.c
47
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.10 2000/10/11 22:01:02 guus Exp $
|
||||
$Id: tincd.c,v 1.10.4.11 2000/10/14 17:04:16 guus Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
@ -63,8 +63,6 @@ static int kill_tincd = 0;
|
|||
/* If zero, don't detach from the terminal. */
|
||||
static int do_detach = 1;
|
||||
|
||||
char *confbase = NULL; /* directory in which all config files are */
|
||||
/* char *configfilename = NULL; /* configuration file name, moved to config.c */
|
||||
char *identname; /* program name for syslog */
|
||||
char *netname = NULL; /* name of the vpn network */
|
||||
char *pidfilename; /* pid file location */
|
||||
|
@ -98,7 +96,7 @@ usage(int status)
|
|||
else
|
||||
{
|
||||
printf(_("Usage: %s [option]...\n\n"), program_name);
|
||||
printf(_(" -c, --config=FILE Read configuration options from FILE.\n"
|
||||
printf(_(" -c, --config=DIR Read configuration options from DIR.\n"
|
||||
" -D, --no-detach Don't fork and detach.\n"
|
||||
" -d Increase debug level.\n"
|
||||
" -k, --kill Attempt to kill a running tincd and exit.\n"
|
||||
|
@ -125,8 +123,8 @@ parse_options(int argc, char **argv, char **envp)
|
|||
case 0: /* long option */
|
||||
break;
|
||||
case 'c': /* config file */
|
||||
configfilename = xmalloc(strlen(optarg)+1);
|
||||
strcpy(configfilename, optarg);
|
||||
confbase = xmalloc(strlen(optarg)+1);
|
||||
strcpy(confbase, optarg);
|
||||
break;
|
||||
case 'D': /* no detach */
|
||||
do_detach = 0;
|
||||
|
@ -293,29 +291,23 @@ int kill_other(void)
|
|||
*/
|
||||
void make_names(void)
|
||||
{
|
||||
if(!configfilename)
|
||||
{
|
||||
if(netname)
|
||||
{
|
||||
asprintf(&configfilename, "%s/tinc/%s/tinc.conf", CONFDIR, netname);
|
||||
}
|
||||
else
|
||||
{
|
||||
asprintf(&configfilename, "%s/tinc/tinc.conf", CONFDIR);
|
||||
}
|
||||
}
|
||||
|
||||
if(netname)
|
||||
{
|
||||
asprintf(&pidfilename, "/var/run/tinc.%s.pid", netname);
|
||||
asprintf(&confbase, "%s/tinc/%s/", CONFDIR, netname);
|
||||
asprintf(&identname, "tinc.%s", netname);
|
||||
if(!pidfilename)
|
||||
asprintf(&pidfilename, "/var/run/tinc.%s.pid", netname);
|
||||
if(!confbase)
|
||||
asprintf(&confbase, "%s/tinc/%s", CONFDIR, netname);
|
||||
if(!identname)
|
||||
asprintf(&identname, "tinc.%s", netname);
|
||||
}
|
||||
else
|
||||
{
|
||||
pidfilename = "/var/run/tinc.pid";
|
||||
asprintf(&confbase, "%s/tinc/", CONFDIR);
|
||||
identname = "tinc";
|
||||
if(!pidfilename)
|
||||
pidfilename = "/var/run/tinc.pid";
|
||||
if(!confbase)
|
||||
asprintf(&confbase, "%s/tinc", CONFDIR);
|
||||
if(!identname)
|
||||
identname = "tinc";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -359,7 +351,7 @@ main(int argc, char **argv, char **envp)
|
|||
if(kill_tincd)
|
||||
exit(kill_other());
|
||||
|
||||
if(read_config_file(&config, configfilename))
|
||||
if(read_server_config())
|
||||
return 1;
|
||||
|
||||
setup_signals();
|
||||
|
@ -367,9 +359,10 @@ main(int argc, char **argv, char **envp)
|
|||
if(detach())
|
||||
exit(0);
|
||||
|
||||
/* FIXME: wt* is this suppose to do?
|
||||
if(security_init())
|
||||
return 1;
|
||||
|
||||
*/
|
||||
for(;;)
|
||||
{
|
||||
setup_network_connections();
|
||||
|
@ -448,7 +441,9 @@ sigusr2_handler(int a)
|
|||
{
|
||||
if(debug_lvl > 1)
|
||||
syslog(LOG_NOTICE, _("Got USR2 signal, forcing new key generation"));
|
||||
/* FIXME: reprogram this.
|
||||
regenerate_keys();
|
||||
*/
|
||||
}
|
||||
|
||||
RETSIGTYPE
|
||||
|
|
Loading…
Reference in a new issue