- markus@cvs.openbsd.org 2001/08/28 15:39:48
[ssh.1 ssh.c]
allow: ssh -F configfile host
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);