Before following the instructions below, make sure that 025_glob.patch
has been applied fully.

Apply by doing:
       cd /usr/src
       patch -p0 < 026_globlimit.patch
       cd libexec/ftpd
       make obj
       make depend
       make
       make install


Index: libexec/ftpd/ftpd.c
===================================================================
RCS file: /cvs/src/libexec/ftpd/ftpd.c,v
retrieving revision 1.84
diff -u -r1.84 ftpd.c
--- libexec/ftpd/ftpd.c 2000/12/04 10:49:31     1.84
+++ libexec/ftpd/ftpd.c 2001/04/23 21:23:50
@@ -2560,11 +2560,11 @@
       glob_t gl;

       if (strpbrk(whichf, "~{[*?") != NULL) {
-               int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE;
-
               memset(&gl, 0, sizeof(gl));
               freeglob = 1;
-               if (glob(whichf, flags, 0, &gl)) {
+               if (glob(whichf,
+                   GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE|GLOB_LIMIT,
+                   0, &gl)) {
                       reply(550, "not found");
                       goto out;
               } else if (gl.gl_pathc == 0) {
Index: libexec/ftpd/popen.c
===================================================================
RCS file: /cvs/src/libexec/ftpd/popen.c,v
retrieving revision 1.11
diff -u -r1.11 popen.c
--- libexec/ftpd/popen.c        1999/12/08 13:15:21     1.11
+++ libexec/ftpd/popen.c        2001/04/23 21:23:50
@@ -104,10 +104,11 @@
       gargv[0] = argv[0];
       for (gargc = argc = 1; argv[argc]; argc++) {
               glob_t gl;
-               int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE;

               memset(&gl, 0, sizeof(gl));
-               if (glob(argv[argc], flags, NULL, &gl)) {
+               if (glob(argv[argc],
+                   GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE|GLOB_LIMIT,
+                   NULL, &gl)) {
                       if (gargc < MAX_GARGV-1) {
                               gargv[gargc++] = strdup(argv[argc]);
                               if (gargv[gargc -1] == NULL)