X-Git-Url: https://git.syn-net.org/?p=debian%2Fuanytun.git;a=blobdiff_plain;f=src%2Foptions.c;h=8f75b8de61849325d4b893cc217b2b2b5613cdde;hp=f5010bf44b6dc79c49afbc76c39862e5767f9bf8;hb=cdb24b629ee2962b8d02cd7d0cf5d11a9b9bd59f;hpb=649939bc87adab5f6ba0d052036b37f70804dfa1 diff --git a/src/options.c b/src/options.c index f5010bf..8f75b8d 100644 --- a/src/options.c +++ b/src/options.c @@ -10,12 +10,12 @@ * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel * mode and allows tunneling of every ETHER TYPE protocol (e.g. * ethernet, ip, arp ...). satp directly includes cryptography and - * message authentication based on the methodes used by SRTP. It is + * message authentication based on the methods used by SRTP. It is * intended to deliver a generic, scaleable and secure solution for * tunneling and relaying of packets of any protocol. - * * - * Copyright (C) 2007-2008 Christian Pointner + * + * Copyright (C) 2007-2014 Christian Pointner * * This file is part of uAnytun. * @@ -31,9 +31,23 @@ * * You should have received a copy of the GNU General Public License * along with uAnytun. If not, see . + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. */ #include "datatypes.h" +#include "version.h" #include "options.h" @@ -151,9 +165,9 @@ int options_parse_hex_string(const char* hex, buffer_t* buffer) if(hex_len%2) return 1; - if(buffer->buf_) + if(buffer->buf_) free(buffer->buf_); - + buffer->length_ = hex_len/2; buffer->buf_ = malloc(buffer->length_); if(!buffer->buf_) { @@ -188,7 +202,7 @@ int options_parse_ifconfig(const char* arg, ifconfig_param_t* ifcfg) free(str); return 1; } - + ifcfg->prefix_length_ = atoi(ptr); ifcfg->net_addr_ = strdup(str); free(str); @@ -208,7 +222,6 @@ int options_parse_ifconfig(const char* arg, ifconfig_param_t* ifcfg) return 1; } - int options_parse(options_t* opt, int argc, char* argv[]) { if(!opt) @@ -224,7 +237,9 @@ int options_parse(options_t* opt, int argc, char* argv[]) argc--; +#ifndef NO_CRYPT char* role = NULL; +#endif int i, ipv4_only = 0, ipv6_only = 0; for(i=1; argc > 0; ++i) { @@ -233,6 +248,8 @@ int options_parse(options_t* opt, int argc, char* argv[]) if(!strcmp(str,"-h") || !strcmp(str,"--help")) return -1; + else if(!strcmp(str,"-v") || !strcmp(str,"--version")) + return -5; PARSE_INVERSE_BOOL_PARAM("-D","--nodaemonize", opt->daemonize_) PARSE_STRING_PARAM("-u","--username", opt->username_) PARSE_STRING_PARAM("-g","--groupname", opt->groupname_) @@ -242,6 +259,7 @@ int options_parse(options_t* opt, int argc, char* argv[]) PARSE_STRING_PARAM("-p","--port", opt->local_port_) PARSE_INT_PARAM("-s","--sender-id", opt->sender_id_) PARSE_STRING_LIST("-L","--log", opt->log_targets_) + PARSE_BOOL_PARAM("-U", "--debug", opt->debug_) PARSE_STRING_PARAM("-r","--remote-host", opt->remote_addr_) PARSE_STRING_PARAM("-o","--remote-port", opt->remote_port_) PARSE_BOOL_PARAM("-4","--ipv4-only", ipv4_only) @@ -264,7 +282,7 @@ int options_parse(options_t* opt, int argc, char* argv[]) PARSE_STRING_PARAM("-a","--auth-algo", opt->auth_algo_) PARSE_INT_PARAM("-b","--auth-tag-length", opt->auth_tag_length_) #endif - else + else return i; } if(ipv4_only && ipv6_only) @@ -274,6 +292,14 @@ int options_parse(options_t* opt, int argc, char* argv[]) if(ipv6_only) opt->resolv_addr_type_ = IPV6_ONLY; + if(opt->debug_) { + string_list_add(&opt->log_targets_, "stdout:5"); + opt->daemonize_ = 0; + } + + if(!opt->log_targets_.first_) + string_list_add(&opt->log_targets_, "syslog:3,uanytun,daemon"); + #ifndef NO_CRYPT if(role) { if(!strcmp(role, "alice") || !strcmp(role, "server") || !strcmp(role, "left")) @@ -295,21 +321,14 @@ void options_parse_post(options_t* opt) if(!opt) return; -#ifdef NO_V4MAPPED - if(opt->resolv_addr_type_ == ANY) { - opt->resolv_addr_type_ = IPV4_ONLY; - log_printf(WARNING, "No support for V4-mapped Adresses on this platform, defaulting to only use IPv4 addresses"); - } -#endif - #ifndef NO_CRYPT - if(!strcmp(opt->cipher_, "null") && !strcmp(opt->auth_algo_, "null") && + if(!strcmp(opt->cipher_, "null") && !strcmp(opt->auth_algo_, "null") && strcmp(opt->kd_prf_, "null")) { if(opt->kd_prf_) free(opt->kd_prf_); opt->kd_prf_ = strdup("null"); } - if((strcmp(opt->cipher_, "null") || strcmp(opt->auth_algo_, "null")) && + if((strcmp(opt->cipher_, "null") || strcmp(opt->auth_algo_, "null")) && !strcmp(opt->kd_prf_, "null")) { log_printf(WARNING, "using NULL key derivation with encryption and or authentication enabled!"); } @@ -338,6 +357,7 @@ void options_default(options_t* opt) opt->chroot_dir_ = NULL; opt->pid_file_ = NULL; string_list_init(&opt->log_targets_); + opt->debug_ = 0; opt->local_addr_ = NULL; opt->local_port_ = strdup("4444"); opt->sender_id_ = 0; @@ -420,6 +440,7 @@ void options_print_usage() { printf("USAGE:\n"); printf("uanytun [-h|--help] prints this...\n"); + printf(" [-v|--version] print version info and exit\n"); printf(" [-D|--nodaemonize] don't run in background\n"); printf(" [-u|--username] change to this user\n"); printf(" [-g|--groupname] change to this group\n"); @@ -430,6 +451,7 @@ void options_print_usage() printf(" [-s|--sender-id ] the sender id to use\n"); printf(" [-L|--log] :[,[,..]]\n"); printf(" add a log target, can be invoked several times\n"); + printf(" [-U|--debug] don't daemonize and log to stdout with maximum log level\n"); printf(" [-r|--remote-host] remote host\n"); printf(" [-o|--remote-port] remote port\n"); @@ -456,6 +478,18 @@ void options_print_usage() #endif } +void options_print_version() +{ + printf("%s\n", VERSION_STRING); +#if defined(__clang__) + printf("built using CLANG %s with %s crypto library.\n", __clang_version__, CRYPTO_LIB_NAME); +#elif defined(__GNUC__) + printf("built using GCC %d.%d.%d with %s crypto library\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__, CRYPTO_LIB_NAME); +#else + printf("built using an unknown compiler with %s crypto library\n", CRYPTO_LIB_NAME, CRYPTO_LIB_NAME); +#endif +} + void options_print(options_t* opt) { if(!opt) @@ -469,6 +503,7 @@ void options_print(options_t* opt) printf("pid_file: '%s'\n", opt->pid_file_); printf("log_targets: \n"); string_list_print(&opt->log_targets_, " '", "'\n"); + printf("debug: %s\n", !opt->debug_ ? "false" : "true"); printf("local_addr: '%s'\n", opt->local_addr_); printf("local_port: '%s'\n", opt->local_port_); printf("sender_id: %d\n", opt->sender_id_);