]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: allocate the subsystems array as necessary and remove the
authordjm@openbsd.org <djm@openbsd.org>
Wed, 6 Sep 2023 23:26:37 +0000 (23:26 +0000)
committerDamien Miller <djm@mindrot.org>
Wed, 6 Sep 2023 23:54:01 +0000 (09:54 +1000)
fixed limit of subsystems. Saves a few kb of memory in the server and makes
it more like the other options.

OpenBSD-Commit-ID: e683dfca6bdcbc3cc339bb6c6517c0c4736a547f

servconf.c

index 91449d5433a950061fa6ac572293c1f999cff42c..6650162be0ae6485bec7e7c56b341ba8de0838e4 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: servconf.c,v 1.399 2023/09/06 23:23:53 djm Exp $ */
+/* $OpenBSD: servconf.c,v 1.400 2023/09/06 23:26:37 djm Exp $ */
 /*
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
  *                    All rights reserved
@@ -1933,10 +1933,6 @@ process_server_config_line_depth(ServerOptions *options, char *line,
                break;
 
        case sSubsystem:
-               if (options->num_subsystems >= MAX_SUBSYSTEMS) {
-                       fatal("%s line %d: too many subsystems defined.",
-                           filename, linenum);
-               }
                arg = argv_next(&ac, &av);
                if (!arg || *arg == '\0')
                        fatal("%s line %d: %s missing argument.",
@@ -1958,6 +1954,18 @@ process_server_config_line_depth(ServerOptions *options, char *line,
                        argv_consume(&ac);
                        break;
                }
+               options->subsystem_name = xrecallocarray(
+                   options->subsystem_name, options->num_subsystems,
+                   options->num_subsystems + 1,
+                   sizeof(options->subsystem_name));
+               options->subsystem_command = xrecallocarray(
+                   options->subsystem_command, options->num_subsystems,
+                   options->num_subsystems + 1,
+                   sizeof(options->subsystem_command));
+               options->subsystem_args = xrecallocarray(
+                   options->subsystem_args, options->num_subsystems,
+                   options->num_subsystems + 1,
+                   sizeof(options->subsystem_args));
                options->subsystem_name[options->num_subsystems] = xstrdup(arg);
                arg = argv_next(&ac, &av);
                if (!arg || *arg == '\0') {