- markus@cvs.openbsd.org 2001/08/28 15:39:48
     [ssh.1 ssh.c]
     allow: ssh -F configfile host
diff --git a/ChangeLog b/ChangeLog
index 6679cb9..46bb468 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 4fef3d5..02c6ce6 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 @@
 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 09e4ee5..e207587 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 <openssl/evp.h>
 #include <openssl/err.h>
@@ -118,6 +118,9 @@
  */
 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 @@
 	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 @@
 
 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 @@
 		case 'b':
 			options.bind_address = optarg;
 			break;
+		case 'F':
+			config = optarg;
+			break;
 		default:
 			usage();
 		}
@@ -609,12 +617,20 @@
 	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);