[PATCH RESEND 1/2] Permit %L and %l percent escapes in Include
rsbecker at nexbridge.com
rsbecker at nexbridge.com
Tue Jul 2 07:47:16 AEST 2024
On Monday, July 1, 2024 4:50 PM, Ronan Pigott wrote:
>This allows the localhost percent-style escapes in arguments to the Include
>directive. These are useful for including host-specific ssh configuration.
>---
> readconf.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
>diff --git a/readconf.c b/readconf.c
>index 4e3791cb7cc6..6d99d2efae92 100644
>--- a/readconf.c
>+++ b/readconf.c
>@@ -1044,7 +1044,8 @@ process_config_line_depth(Options *options, struct
>passwd *pw, const char *host,
> const char *original_host, char *line, const char *filename,
> int linenum, int *activep, int flags, int *want_final_pass, int depth)
{
>- char *str, **charptr, *endofnumber, *keyword, *arg, *arg2, *p;
>+ char *str, **charptr, *endofnumber, *keyword, *arg, *arg2, *arg_pre,
*p;
>+ char thishost[NI_MAXHOST], shorthost[NI_MAXHOST];
> char **cpptr, ***cppptr, fwdarg[256];
> u_int i, *uintptr, max_entries = 0;
> int r, oactive, negated, opcode, *intptr, value, value2, cmdline =
0; @@ -
>1983,6 +1984,12 @@ parse_pubkey_algos:
> "command-line option");
> goto out;
> }
>+
>+ if (gethostname(thishost, sizeof(thishost)) == -1)
>+ fatal("gethostname: %s", strerror(errno));
>+ strlcpy(shorthost, thishost, sizeof(shorthost));
>+ shorthost[strcspn(thishost, ".")] = '\0';
>+
> value = 0; g> while ((arg = argv_next(&ac,
&av)) != NULL) {
> if (*arg == '\0') {
>@@ -2003,11 +2010,14 @@ parse_pubkey_algos:
> goto out;
> }
> if (!path_absolute(arg) && *arg != '~') {
>- xasprintf(&arg2, "%s/%s",
>+ xasprintf(&arg_pre, "%s/%s",
> (flags & SSHCONF_USERCONF) ?
> "~/" _PATH_SSH_USER_DIR : SSHDIR, arg);
> } else
>- arg2 = xstrdup(arg);
>+ arg_pre = xstrdup(arg);
>+ arg2 = percent_expand(arg_pre,
>+ "l", thishost, "L", shorthost, (char
*) NULL);
>+ free(arg_pre);
> memset(&gl, 0, sizeof(gl));
> r = glob(arg2, GLOB_TILDE, NULL, &gl);
> if (r == GLOB_NOMATCH) {
>--
>2.45.2
Would you be able to document that "thisHost" may be ambiguous, depending on
the DNS and host resolver configuration? gethostname() is not entirely
predictable if the localhost has multiple values.
More information about the openssh-unix-dev
mailing list