projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update copyright notices.
[tinc]
/
src
/
tincd.c
diff --git
a/src/tincd.c
b/src/tincd.c
index
53f91e8
..
205d099
100644
(file)
--- a/
src/tincd.c
+++ b/
src/tincd.c
@@
-1,7
+1,7
@@
/*
tincd.c -- the main file for tincd
Copyright (C) 1998-2005 Ivo Timmermans
/*
tincd.c -- the main file for tincd
Copyright (C) 1998-2005 Ivo Timmermans
- 2000-201
2
Guus Sliepen <guus@tinc-vpn.org>
+ 2000-201
6
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>
2008 Max Rijevski <maksuf@gmail.com>
2009 Michael Tokarev <mjt@tls.msk.ru>
2010 Julien Muchembled <jm@jmuchemb.eu>
@@
-49,7
+49,12
@@
#include <time.h>
#endif
#include <time.h>
#endif
+#ifdef HAVE_GETOPT_LONG
#include <getopt.h>
#include <getopt.h>
+#else
+#include "getopt.h"
+#endif
+
#include "pidfile.h"
#include "conf.h"
#include "pidfile.h"
#include "conf.h"
@@
-97,7
+102,7
@@
char *pidfilename = NULL; /* pid file location */
char *logfilename = NULL; /* log file location */
char **g_argv; /* a copy of the cmdline arguments */
char *logfilename = NULL; /* log file location */
char **g_argv; /* a copy of the cmdline arguments */
-static int status;
+static int status
= 1
;
static struct option const long_options[] = {
{"config", required_argument, NULL, 'c'},
static struct option const long_options[] = {
{"config", required_argument, NULL, 'c'},
@@
-162,6
+167,11
@@
static bool parse_options(int argc, char **argv) {
break;
case 'c': /* config file */
break;
case 'c': /* config file */
+ if(confbase) {
+ fprintf(stderr, "Only one configuration directory can be given.\n");
+ usage(true);
+ return false;
+ }
confbase = xstrdup(optarg);
break;
confbase = xstrdup(optarg);
break;
@@
-178,7
+188,9
@@
static bool parse_options(int argc, char **argv) {
break;
#endif
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
if(optarg)
debug_level = atoi(optarg);
else
@@
-187,6
+199,8
@@
static bool parse_options(int argc, char **argv) {
case 'k': /* kill old tincds */
#ifndef HAVE_MINGW
case 'k': /* kill old tincds */
#ifndef HAVE_MINGW
+ if(!optarg && optind < argc && *argv[optind] != '-')
+ optarg = argv[optind++];
if(optarg) {
if(!strcasecmp(optarg, "HUP"))
kill_tincd = SIGHUP;
if(optarg) {
if(!strcasecmp(optarg, "HUP"))
kill_tincd = SIGHUP;
@@
-225,8
+239,13
@@
static bool parse_options(int argc, char **argv) {
case 'n': /* net name given */
/* netname "." is special: a "top-level name" */
case 'n': /* net name given */
/* netname "." is special: a "top-level name" */
- netname = strcmp(optarg, ".") != 0 ?
- xstrdup(optarg) : NULL;
+ if(netname) {
+ fprintf(stderr, "Only one netname can be given.\n");
+ usage(true);
+ return false;
+ }
+ if(optarg && strcmp(optarg, "."))
+ netname = xstrdup(optarg);
break;
case 'o': /* option */
break;
case 'o': /* option */
@@
-237,6
+256,8
@@
static bool parse_options(int argc, char **argv) {
break;
case 'K': /* generate public/private keypair */
break;
case 'K': /* generate public/private keypair */
+ if(!optarg && optind < argc && *argv[optind] != '-')
+ optarg = argv[optind++];
if(optarg) {
generate_keys = atoi(optarg);
if(optarg) {
generate_keys = atoi(optarg);
@@
-274,11
+295,24
@@
static bool parse_options(int argc, char **argv) {
case 4: /* write log entries to a file */
use_logfile = true;
case 4: /* write log entries to a file */
use_logfile = true;
- if(optarg)
+ if(!optarg && optind < argc && *argv[optind] != '-')
+ optarg = argv[optind++];
+ if(optarg) {
+ if(logfilename) {
+ fprintf(stderr, "Only one logfile can be given.\n");
+ usage(true);
+ return false;
+ }
logfilename = xstrdup(optarg);
logfilename = xstrdup(optarg);
+ }
break;
case 5: /* write PID to a file */
break;
case 5: /* write PID to a file */
+ if(pidfilename) {
+ fprintf(stderr, "Only one pidfile can be given.\n");
+ usage(true);
+ return false;
+ }
pidfilename = xstrdup(optarg);
break;
pidfilename = xstrdup(optarg);
break;
@@
-291,6
+325,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;
+ }
+
return true;
}
return true;
}
@@
-337,7
+377,6
@@
static void indicator(int a, int b, void *p) {
static bool keygen(int bits) {
RSA *rsa_key;
FILE *f;
static bool keygen(int bits) {
RSA *rsa_key;
FILE *f;
- char *name = get_name();
char *pubname, *privname;
fprintf(stderr, "Generating %d bits keys:\n", bits);
char *pubname, *privname;
fprintf(stderr, "Generating %d bits keys:\n", bits);
@@
-365,10
+404,14
@@
static bool keygen(int bits) {
PEM_write_RSAPrivateKey(f, rsa_key, NULL, NULL, 0, NULL, NULL);
fclose(f);
PEM_write_RSAPrivateKey(f, rsa_key, NULL, NULL, 0, NULL, NULL);
fclose(f);
- if(name)
+ char *name = get_name();
+
+ if(name) {
xasprintf(&pubname, "%s/hosts/%s", confbase, name);
xasprintf(&pubname, "%s/hosts/%s", confbase, name);
- else
+ free(name);
+ } else {
xasprintf(&pubname, "%s/rsa_key.pub", confbase);
xasprintf(&pubname, "%s/rsa_key.pub", confbase);
+ }
f = ask_and_open(pubname, "public RSA key");
free(pubname);
f = ask_and_open(pubname, "public RSA key");
free(pubname);
@@
-379,7
+422,6
@@
static bool keygen(int bits) {
fputc('\n', f);
PEM_write_RSAPublicKey(f, rsa_key);
fclose(f);
fputc('\n', f);
PEM_write_RSAPublicKey(f, rsa_key);
fclose(f);
- free(name);
return true;
}
return true;
}
@@
-391,7
+433,7
@@
static void make_names(void) {
#ifdef HAVE_MINGW
HKEY key;
char installdir[1024] = "";
#ifdef HAVE_MINGW
HKEY key;
char installdir[1024] = "";
-
long
len = sizeof(installdir);
+
DWORD
len = sizeof(installdir);
#endif
if(netname)
#endif
if(netname)
@@
-401,15
+443,15
@@
static void make_names(void) {
#ifdef HAVE_MINGW
if(!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\tinc", 0, KEY_READ, &key)) {
#ifdef HAVE_MINGW
if(!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\tinc", 0, KEY_READ, &key)) {
- if(!RegQueryValueEx(key, NULL, 0, 0, installdir, &len)) {
- if(!logfilename)
- xasprintf(&logfilename, "%s/log/%s.log", identname);
+ if(!RegQueryValueEx(key, NULL, 0, 0, (LPBYTE)installdir, &len)) {
if(!confbase) {
if(netname)
xasprintf(&confbase, "%s/%s", installdir, netname);
else
xasprintf(&confbase, "%s", installdir);
}
if(!confbase) {
if(netname)
xasprintf(&confbase, "%s/%s", installdir, netname);
else
xasprintf(&confbase, "%s", installdir);
}
+ if(!logfilename)
+ xasprintf(&logfilename, "%s/tinc.log", confbase);
}
RegCloseKey(key);
if(*installdir)
}
RegCloseKey(key);
if(*installdir)
@@
-513,7
+555,7
@@
int main(int argc, char **argv) {
if(show_version) {
printf("%s version %s (built %s %s, protocol %d)\n", PACKAGE,
VERSION, __DATE__, __TIME__, PROT_CURRENT);
if(show_version) {
printf("%s version %s (built %s %s, protocol %d)\n", PACKAGE,
VERSION, __DATE__, __TIME__, PROT_CURRENT);
- printf("Copyright (C) 1998-201
2
Ivo Timmermans, Guus Sliepen and others.\n"
+ printf("Copyright (C) 1998-201
6
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"
"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"