]> git.meshlink.io Git - meshlink/blobdiff - src/tincd.c
Remove files not used by MeshLink.
[meshlink] / src / tincd.c
index 7336a5f0ae07e1ede61ba956e844dbab722a6377..82b5550661d99a4788cd784c5029507be2425c1a 100644 (file)
@@ -1,7 +1,7 @@
 /*
     tincd.c -- the main file for tincd
     Copyright (C) 1998-2005 Ivo Timmermans
-                  2000-2013 Guus Sliepen <guus@tinc-vpn.org>
+                  2000-2014 Guus Sliepen <guus@tinc-vpn.org>
                   2008      Max Rijevski <maksuf@gmail.com>
                   2009      Michael Tokarev <mjt@tls.msk.ru>
                   2010      Julien Muchembled <jm@jmuchemb.eu>
@@ -48,7 +48,6 @@
 #include "conf.h"
 #include "control.h"
 #include "crypto.h"
-#include "device.h"
 #include "logger.h"
 #include "names.h"
 #include "net.h"
@@ -67,14 +66,18 @@ static bool show_version = false;
 /* If nonzero, use null ciphers and skip all key exchanges. */
 bool bypass_security = false;
 
+#ifdef HAVE_MLOCKALL
 /* If nonzero, disable swapping for this process. */
 static bool do_mlock = false;
+#endif
 
+#ifndef HAVE_MINGW
 /* If nonzero, chroot to netdir after startup. */
 static bool do_chroot = false;
 
 /* If !NULL, do setuid to given user after startup */
 static const char *switchuser = NULL;
+#endif
 
 /* If nonzero, write log entries to a separate file. */
 bool use_logfile = false;
@@ -163,7 +166,9 @@ static bool parse_options(int argc, char **argv) {
                                break;
 #endif
 
-                       case 'd': /* inc debug level */
+                       case 'd': /* increase debug level */
+                               if(!optarg && optind < argc && *argv[optind] != '-')
+                                       optarg = argv[optind++];
                                if(optarg)
                                        debug_level = atoi(optarg);
                                else
@@ -210,6 +215,8 @@ static bool parse_options(int argc, char **argv) {
 
                        case 4:   /* write log entries to a file */
                                use_logfile = true;
+                               if(!optarg && optind < argc && *argv[optind] != '-')
+                                       optarg = argv[optind++];
                                if(optarg)
                                        logfilename = xstrdup(optarg);
                                break;
@@ -227,6 +234,12 @@ static bool parse_options(int argc, char **argv) {
                }
        }
 
+       if(optind < argc) {
+               fprintf(stderr, "%s: unrecognized argument '%s'\n", argv[0], argv[optind]);
+               usage(true);
+               return false;
+       }
+
        if(!netname && (netname = getenv("NETNAME")))
                netname = xstrdup(netname);
 
@@ -246,9 +259,7 @@ static bool parse_options(int argc, char **argv) {
 }
 
 static bool drop_privs(void) {
-#ifdef HAVE_MINGW
-       return false;
-#else
+#ifndef HAVE_MINGW
        uid_t uid = 0;
        if (switchuser) {
                struct passwd *pw = getpwnam(switchuser);
@@ -309,7 +320,7 @@ int main(int argc, char **argv) {
        if(show_version) {
                printf("%s version %s (built %s %s, protocol %d.%d)\n", PACKAGE,
                           VERSION, __DATE__, __TIME__, PROT_MAJOR, PROT_MINOR);
-               printf("Copyright (C) 1998-2012 Ivo Timmermans, Guus Sliepen and others.\n"
+               printf("Copyright (C) 1998-2014 Ivo Timmermans, Guus Sliepen and others.\n"
                                "See the AUTHORS file for a complete list.\n\n"
                                "tinc comes with ABSOLUTELY NO WARRANTY.  This is free software,\n"
                                "and you are welcome to redistribute it under certain conditions;\n"
@@ -344,7 +355,8 @@ int main(int argc, char **argv) {
 
        /* Slllluuuuuuurrrrp! */
 
-       srand(time(NULL));
+       gettimeofday(&now, NULL);
+       srand(now.tv_sec + now.tv_usec);
        crypto_init();
 
        if(!read_server_config())
@@ -384,17 +396,10 @@ int main2(int argc, char **argv) {
        }
 #endif
 
-       /* Setup sockets and open device. */
+       /* Setup sockets. */
 
        if(!setup_network())
-               goto end_nonet;
-
-       if(!init_control())
-               goto end_nonet;
-
-       /* Initiate all outgoing connections. */
-
-       try_outgoing_connections();
+               goto end;
 
        /* Change process priority */
 
@@ -426,19 +431,17 @@ int main2(int argc, char **argv) {
 
        /* Start main loop. It only exits when tinc is killed. */
 
-       status = main_loop();
+       logger(DEBUG_ALWAYS, LOG_NOTICE, "Ready");
 
-       /* Shutdown properly. */
+       try_outgoing_connections();
 
-       if(debug_level >= DEBUG_CONNECTIONS)
-               devops.dump_stats();
+       status = main_loop();
 
-       close_network_connections();
+       /* Shutdown properly. */
 
 end:
-       exit_control();
+       close_network_connections();
 
-end_nonet:
        logger(DEBUG_ALWAYS, LOG_NOTICE, "Terminating");
 
        free(priority);