tincd.c -- the main file for tincd
Copyright (C) 1998-2005 Ivo Timmermans
2000-2009 Guus Sliepen <guus@tinc-vpn.org>
+ 2009 Michael Tokarev <mjt@tls.msk.ru>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- $Id$
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "system.h"
#ifdef HAVE_MINGW
static struct WSAData wsa_state;
+CRITICAL_SECTION mutex;
#endif
-static void usage(bool status)
-{
+static void usage(bool status) {
if(status)
fprintf(stderr, _("Try `%s --help\' for more information.\n"),
program_name);
}
}
-static bool parse_options(int argc, char **argv)
-{
+static bool parse_options(int argc, char **argv) {
int r;
int option_index = 0;
generate_keys &= ~7; /* Round it to bytes */
} else
- generate_keys = 1024;
+ generate_keys = 2048;
break;
case 'R': /* chroot to NETNAME dir */
/* This function prettyprints the key generation process */
-static void indicator(int a, int b, void *p)
-{
+static void indicator(int a, int b, void *p) {
switch (a) {
case 0:
fprintf(stderr, ".");
Generate a public/private RSA keypair, and ask for a file to store
them in.
*/
-static bool keygen(int bits)
-{
+static bool keygen(int bits) {
RSA *rsa_key;
FILE *f;
char *name = NULL;
} else
fprintf(stderr, _("Done.\n"));
- asprintf(&filename, "%s/rsa_key.priv", confbase);
+ xasprintf(&filename, "%s/rsa_key.priv", confbase);
f = ask_and_open(filename, _("private RSA key"));
if(!f)
free(filename);
if(name)
- asprintf(&filename, "%s/hosts/%s", confbase, name);
+ xasprintf(&filename, "%s/hosts/%s", confbase, name);
else
- asprintf(&filename, "%s/rsa_key.pub", confbase);
+ xasprintf(&filename, "%s/rsa_key.pub", confbase);
f = ask_and_open(filename, _("public RSA key"));
/*
Set all files and paths according to netname
*/
-static void make_names(void)
-{
+static void make_names(void) {
#ifdef HAVE_MINGW
HKEY key;
char installdir[1024] = "";
#endif
if(netname)
- asprintf(&identname, "tinc.%s", netname);
+ xasprintf(&identname, "tinc.%s", netname);
else
identname = xstrdup("tinc");
if(!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\tinc", 0, KEY_READ, &key)) {
if(!RegQueryValueEx(key, NULL, 0, 0, installdir, &len)) {
if(!logfilename)
- asprintf(&logfilename, "%s/log/%s.log", identname);
+ xasprintf(&logfilename, "%s/log/%s.log", identname);
if(!confbase) {
if(netname)
- asprintf(&confbase, "%s/%s", installdir, netname);
+ xasprintf(&confbase, "%s/%s", installdir, netname);
else
- asprintf(&confbase, "%s", installdir);
+ xasprintf(&confbase, "%s", installdir);
}
}
RegCloseKey(key);
#endif
if(!pidfilename)
- asprintf(&pidfilename, LOCALSTATEDIR "/run/%s.pid", identname);
+ xasprintf(&pidfilename, LOCALSTATEDIR "/run/%s.pid", identname);
if(!logfilename)
- asprintf(&logfilename, LOCALSTATEDIR "/log/%s.log", identname);
+ xasprintf(&logfilename, LOCALSTATEDIR "/log/%s.log", identname);
if(netname) {
if(!confbase)
- asprintf(&confbase, CONFDIR "/tinc/%s", netname);
+ xasprintf(&confbase, CONFDIR "/tinc/%s", netname);
else
logger(LOG_INFO, _("Both netname and configuration directory given, using the latter..."));
} else {
if(!confbase)
- asprintf(&confbase, CONFDIR "/tinc");
+ xasprintf(&confbase, CONFDIR "/tinc");
}
}
}
#ifdef HAVE_MINGW
-# define setpriority(level) SetPriorityClass(GetCurrentProcess(), level);
+# define setpriority(level) SetPriorityClass(GetCurrentProcess(), level)
#else
# define NORMAL_PRIORITY_CLASS 0
# define BELOW_NORMAL_PRIORITY_CLASS 10
# define setpriority(level) nice(level)
#endif
-int main(int argc, char **argv)
-{
+int main(int argc, char **argv) {
program_name = argv[0];
setlocale(LC_ALL, "");
return 1;
}
-int main2(int argc, char **argv)
-{
+int main2(int argc, char **argv) {
+ InitializeCriticalSection(&mutex);
+ EnterCriticalSection(&mutex);
#endif
if(!detach())
if(!setup_network())
goto end;
- /* Change process priority */
+ /* Initiate all outgoing connections. */
+
+ try_outgoing_connections();
+
+ /* Change process priority */
char *priority = 0;
if (!drop_privs())
goto end;
- /* Initiate all outgoing connections. */
-
- try_outgoing_connections();
-
/* Start main loop. It only exits when tinc is killed. */
status = main_loop();