From: Etienne Dechamps Date: Sun, 13 Jul 2014 14:54:34 +0000 (+0100) Subject: Add a non-interactive mode to tinc commands. X-Git-Tag: release-1.1pre11~58 X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=cc9203ee75c49360dd29710ac12bb67fe503f97b Add a non-interactive mode to tinc commands. Some tinc commands, such as "tinc generate-keys", use the terminal to ask the user for information. This can be bypassed by making sure there is no terminal, which is trivial on *nix but might require jumping through some hoops on Windows depending on how the command is invoked. This commit adds a --batch option that ensures tinc will never ask the user for input, even if it is attached to a terminal. --- diff --git a/src/tincctl.c b/src/tincctl.c index 799da0aa..c0c8a256 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -75,6 +75,7 @@ char *scriptextension = ""; static char *prompt; static struct option const long_options[] = { + {"batch", no_argument, NULL, 'b'}, {"config", required_argument, NULL, 'c'}, {"net", required_argument, NULL, 'n'}, {"help", no_argument, NULL, 1}, @@ -100,6 +101,7 @@ static void usage(bool status) { } else { printf("Usage: %s [options] command\n\n", program_name); printf("Valid options are:\n" + " -b, --batch Don't ask for anything (non-interactive mode).\n" " -c, --config=DIR Read configuration options from DIR.\n" " -n, --net=NETNAME Connect to net NETNAME.\n" " --pidfile=FILENAME Read control cookie from FILENAME.\n" @@ -158,6 +160,10 @@ static bool parse_options(int argc, char **argv) { case 0: /* long option */ break; + case 'b': + tty = false; + break; + case 'c': /* config file */ confbase = xstrdup(optarg); confbasegiven = true; @@ -2439,6 +2445,7 @@ int main(int argc, char *argv[]) { program_name = argv[0]; orig_argv = argv; orig_argc = argc; + tty = isatty(0) && isatty(1); if(!parse_options(argc, argv)) return 1; @@ -2469,8 +2476,6 @@ int main(int argc, char *argv[]) { srand(time(NULL)); crypto_init(); - tty = isatty(0) && isatty(1); - if(optind >= argc) return cmd_shell(argc, argv);