upstream: preserve quoting of Subsystem commands and arguments.

This may change behaviour of exotic configurations, but the most common
subsystem configuration (sftp-server) is unlikely to be affected.

OpenBSD-Commit-ID: 8ffa296aeca981de5b0945242ce75aa6dee479bf
This commit is contained in:
djm@openbsd.org 2023-09-06 23:23:53 +00:00 committed by Damien Miller
parent 52dfe3c72d
commit e19069c9fa
No known key found for this signature in database
1 changed files with 11 additions and 13 deletions

View File

@ -1,4 +1,4 @@
/* $OpenBSD: servconf.c,v 1.398 2023/09/06 23:21:36 djm Exp $ */
/* $OpenBSD: servconf.c,v 1.399 2023/09/06 23:23:53 djm Exp $ */
/*
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
* All rights reserved
@ -1960,21 +1960,19 @@ process_server_config_line_depth(ServerOptions *options, char *line,
}
options->subsystem_name[options->num_subsystems] = xstrdup(arg);
arg = argv_next(&ac, &av);
if (!arg || *arg == '\0')
if (!arg || *arg == '\0') {
fatal("%s line %d: Missing subsystem command.",
filename, linenum);
options->subsystem_command[options->num_subsystems] = xstrdup(arg);
/* Collect arguments (separate to executable) */
p = xstrdup(arg);
len = strlen(p) + 1;
while ((arg = argv_next(&ac, &av)) != NULL) {
len += 1 + strlen(arg);
p = xreallocarray(p, 1, len);
strlcat(p, " ", len);
strlcat(p, arg, len);
}
options->subsystem_args[options->num_subsystems] = p;
options->subsystem_command[options->num_subsystems] =
xstrdup(arg);
/* Collect arguments (separate to executable) */
arg = argv_assemble(1, &arg); /* quote command correctly */
arg2 = argv_assemble(ac, av); /* rest of command */
xasprintf(&options->subsystem_args[options->num_subsystems],
"%s %s", arg, arg2);
free(arg2);
argv_consume(&ac);
options->num_subsystems++;
break;