# HG changeset patch # User Matt Johnston # Date 1149695224 0 # Node ID d965110e3f5c36400152db6299ac5a3452edea18 # Parent 0e4f225b7e07e75a48cf1de4402c0461e90618d6 add -f background option to dbclient diff -r 0e4f225b7e07 -r d965110e3f5c cli-runopts.c --- a/cli-runopts.c Wed Jun 07 15:01:20 2006 +0000 +++ b/cli-runopts.c Wed Jun 07 15:47:04 2006 +0000 @@ -51,6 +51,7 @@ "-t Allocate a pty\n" "-T Don't allocate a pty\n" "-N Don't run a remote command\n" + "-f Run in background after auth\n" #ifdef ENABLE_CLI_PUBKEY_AUTH "-i (multiple allowed)\n" #endif @@ -90,6 +91,7 @@ cli_opts.username = NULL; cli_opts.cmd = NULL; cli_opts.no_cmd = 0; + cli_opts.backgrounded = 0; cli_opts.wantpty = 9; /* 9 means "it hasn't been touched", gets set later */ #ifdef ENABLE_CLI_PUBKEY_AUTH cli_opts.privkeys = NULL; @@ -168,6 +170,9 @@ case 'N': cli_opts.no_cmd = 1; break; + case 'f': + cli_opts.backgrounded = 1; + break; #ifdef ENABLE_CLI_LOCALTCPFWD case 'L': nextislocal = 1; @@ -274,6 +279,11 @@ cli_opts.wantpty = 0; } } + + if (cli_opts.backgrounded && cli_opts.cmd == NULL + && cli_opts.no_cmd == 0) { + dropbear_exit("command required for -f"); + } } #ifdef ENABLE_CLI_PUBKEY_AUTH diff -r 0e4f225b7e07 -r d965110e3f5c cli-session.c --- a/cli-session.c Wed Jun 07 15:01:20 2006 +0000 +++ b/cli-session.c Wed Jun 07 15:47:04 2006 +0000 @@ -212,6 +212,23 @@ */ case USERAUTH_SUCCESS_RCVD: + + if (cli_opts.backgrounded) { + int devnull; + // keeping stdin open steals input from the terminal and + // is confusing, though stdout/stderr could be useful. + devnull = open(_PATH_DEVNULL, O_RDONLY); + if (devnull < 0) { + dropbear_exit("opening /dev/null: %d %s", + errno, strerror(errno)); + } + dup2(devnull, STDIN_FILENO); + if (daemon(0, 1) < 0) { + dropbear_exit("Backgrounding failed: %d %s", + errno, strerror(errno)); + } + } + #ifdef ENABLE_CLI_LOCALTCPFWD setup_localtcp(); #endif diff -r 0e4f225b7e07 -r d965110e3f5c dbclient.1 --- a/dbclient.1 Wed Jun 07 15:01:20 2006 +0000 +++ b/dbclient.1 Wed Jun 07 15:47:04 2006 +0000 @@ -63,6 +63,10 @@ .B \-N Don't request a remote shell or run any commands. Any command arguments are ignored. .TP +.B \-f +Fork into the background after authentication. A command argument (or -N) is required. +This is useful when using password authentication. +.TP .B \-g Allow non-local hosts to connect to forwarded ports. Applies to -L and -R forwarded ports, though remote connections to -R forwarded ports may be limited diff -r 0e4f225b7e07 -r d965110e3f5c runopts.h --- a/runopts.h Wed Jun 07 15:01:20 2006 +0000 +++ b/runopts.h Wed Jun 07 15:47:04 2006 +0000 @@ -103,6 +103,7 @@ char *cmd; int wantpty; int no_cmd; + int backgrounded; #ifdef ENABLE_CLI_PUBKEY_AUTH struct SignKeyList *privkeys; /* Keys to use for public-key auth */ #endif