summaryrefslogtreecommitdiff
path: root/readconf.c
diff options
context:
space:
mode:
authordjm <djm>2014-02-24 04:57:55 +0000
committerdjm <djm>2014-02-24 04:57:55 +0000
commit2e6f216b46791a87b84e98d0f15a2714b56aed7c (patch)
tree9128ee2b5ade9741882139d6685a74884d64c726 /readconf.c
parentb183f2a84fde1e407c95723eaf0f0d4dcb698bde (diff)
downloadopenssh-2e6f216b46791a87b84e98d0f15a2714b56aed7c.tar.gz
- djm@cvs.openbsd.org 2014/02/23 20:11:36
[readconf.c readconf.h ssh.c ssh_config.5] reparse ssh_config and ~/.ssh/config if hostname canonicalisation changes the hostname. This allows users to write configurations that always refer to canonical hostnames, e.g. CanonicalizeHostname yes CanonicalDomains int.example.org example.org CanonicalizeFallbackLocal no Host *.int.example.org Compression off Host *.example.org User djm ok markus@
Diffstat (limited to 'readconf.c')
-rw-r--r--readconf.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/readconf.c b/readconf.c
index 94e64590..dc884c9b 100644
--- a/readconf.c
+++ b/readconf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: readconf.c,v 1.217 2014/02/22 01:32:19 djm Exp $ */
+/* $OpenBSD: readconf.c,v 1.218 2014/02/23 20:11:36 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1467,6 +1467,13 @@ read_config_file(const char *filename, struct passwd *pw, const char *host,
return 1;
}
+/* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */
+int
+option_clear_or_none(const char *o)
+{
+ return o == NULL || strcasecmp(o, "none") == 0;
+}
+
/*
* Initializes options to special values that indicate that they have not yet
* been set. Read_config_file will only set options with this value. Options
@@ -1564,10 +1571,24 @@ initialize_options(Options * options)
}
/*
+ * A petite version of fill_default_options() that just fills the options
+ * needed for hostname canonicalization to proceed.
+ */
+void
+fill_default_options_for_canonicalization(Options *options)
+{
+ if (options->canonicalize_max_dots == -1)
+ options->canonicalize_max_dots = 1;
+ if (options->canonicalize_fallback_local == -1)
+ options->canonicalize_fallback_local = 1;
+ if (options->canonicalize_hostname == -1)
+ options->canonicalize_hostname = SSH_CANONICALISE_NO;
+}
+
+/*
* Called after processing other sources of option data, this fills those
* options for which no value has been specified with their default values.
*/
-
void
fill_default_options(Options * options)
{
@@ -1722,7 +1743,7 @@ fill_default_options(Options * options)
options->canonicalize_hostname = SSH_CANONICALISE_NO;
#define CLEAR_ON_NONE(v) \
do { \
- if (v != NULL && strcasecmp(v, "none") == 0) { \
+ if (option_clear_or_none(v)) { \
free(v); \
v = NULL; \
} \