From 14f31ab947acd4c0b1698195782b904e0d6c7686 Mon Sep 17 00:00:00 2001 From: Ben Lindstrom Date: Wed, 12 Sep 2001 17:48:04 +0000 Subject: [PATCH] - markus@cvs.openbsd.org 2001/08/28 15:39:48 [ssh.1 ssh.c] allow: ssh -F configfile host --- ChangeLog | 5 ++++- ssh.1 | 11 ++++++++++- ssh.c | 30 +++++++++++++++++++++++------- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6679cb961..46bb468e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -39,6 +39,9 @@ - markus@cvs.openbsd.org 2001/08/28 09:51:26 [readconf.c] don't set DynamicForward unless Host matches + - markus@cvs.openbsd.org 2001/08/28 15:39:48 + [ssh.1 ssh.c] + allow: ssh -F configfile host 20010815 - (bal) Fixed stray code in readconf.c that went in by mistake. @@ -6362,4 +6365,4 @@ - Wrote replacements for strlcpy and mkdtemp - Released 1.0pre1 -$Id: ChangeLog,v 1.1496 2001/09/12 17:35:27 mouring Exp $ +$Id: ChangeLog,v 1.1497 2001/09/12 17:48:04 mouring Exp $ diff --git a/ssh.1 b/ssh.1 index 4fef3d587..02c6ce6f9 100644 --- a/ssh.1 +++ b/ssh.1 @@ -34,7 +34,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh.1,v 1.131 2001/08/22 17:45:16 stevesk Exp $ +.\" $OpenBSD: ssh.1,v 1.132 2001/08/28 15:39:48 markus Exp $ .Dd September 25, 1999 .Dt SSH 1 .Os @@ -57,6 +57,7 @@ .Op Fl m Ar mac_spec .Op Fl o Ar option .Op Fl p Ar port +.Op Fl F Ar configfile .Oo Fl L Xo .Sm off .Ar port : @@ -564,6 +565,14 @@ The default value can be set on a host-by-host basis in the configuration files; see the .Cm Compression option below. +.It Fl F Ar configfile +Specifies an alternative per-user configuration file. +If a configuration file is given on the command line, +the system-wide configuration file +.Pq Pa /etc/ssh_config +will be ignored. +The default for the per-user configuration file is +.Pa $HOME/.ssh/config . .It Fl L Ar port:host:hostport Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side. diff --git a/ssh.c b/ssh.c index 09e4ee540..e20758785 100644 --- a/ssh.c +++ b/ssh.c @@ -39,7 +39,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh.c,v 1.138 2001/08/11 22:51:27 jakob Exp $"); +RCSID("$OpenBSD: ssh.c,v 1.139 2001/08/28 15:39:48 markus Exp $"); #include #include @@ -118,6 +118,9 @@ int fork_after_authentication_flag = 0; */ Options options; +/* optional user configfile */ +char *config = NULL; + /* * Name of the host we are connecting to. This is the name given on the * command line, or the HostName specified for the user-supplied name in a @@ -160,6 +163,8 @@ usage(void) fprintf(stderr, "Options:\n"); fprintf(stderr, " -l user Log in using this user name.\n"); fprintf(stderr, " -n Redirect input from " _PATH_DEVNULL ".\n"); + fprintf(stderr, " -F config Config file (default: ~/%s).\n", + _PATH_SSH_USER_CONFFILE); fprintf(stderr, " -A Enable authentication agent forwarding.\n"); fprintf(stderr, " -a Disable authentication agent forwarding (default).\n"); #ifdef AFS @@ -315,7 +320,7 @@ main(int ac, char **av) again: while ((opt = getopt(ac, av, - "1246ab:c:e:fgi:kl:m:no:p:qstvxACD:I:L:NPR:TVX")) != -1) { + "1246ab:c:e:fgi:kl:m:no:p:qstvxACD:F:I:L:NPR:TVX")) != -1) { switch (opt) { case '1': options.protocol = SSH_PROTO_1; @@ -525,6 +530,9 @@ again: case 'b': options.bind_address = optarg; break; + case 'F': + config = optarg; + break; default: usage(); } @@ -609,12 +617,20 @@ again: log_init(av[0], options.log_level == -1 ? SYSLOG_LEVEL_INFO : options.log_level, SYSLOG_FACILITY_USER, 1); - /* Read per-user configuration file. */ - snprintf(buf, sizeof buf, "%.100s/%.100s", pw->pw_dir, _PATH_SSH_USER_CONFFILE); - read_config_file(buf, host, &options); + /* + * Read per-user configuration file. Ignore the system wide config + * file if the user specifies a config file on the command line. + */ + if (config != NULL) { + read_config_file(config, host, &options); + } else { + snprintf(buf, sizeof buf, "%.100s/%.100s", pw->pw_dir, + _PATH_SSH_USER_CONFFILE); - /* Read systemwide configuration file. */ - read_config_file(_PATH_HOST_CONFIG_FILE, host, &options); + /* Read systemwide configuration file. */ + read_config_file(_PATH_HOST_CONFIG_FILE, host, &options); + read_config_file(buf, host, &options); + } /* Fill configuration defaults. */ fill_default_options(&options);