+++ /dev/null
-After applying this patch and running configure, you MUST run this
-command before "make":
-
- make proto
-
---- clientserver.c 5 Jun 2004 19:59:03 -0000 1.123
-+++ clientserver.c 5 Jun 2004 20:38:15 -0000
-@@ -207,7 +207,8 @@ int start_inband_exchange(char *user, ch
- static int rsync_module(int f_in, int f_out, int i)
- {
- int argc = 0;
-- char *argv[MAX_ARGS];
-+ int maxargs;
-+ char **argv;
- char **argp;
- char line[MAXPATHLEN];
- uid_t uid = (uid_t)-2; /* canonically "nobody" */
-@@ -385,6 +386,9 @@ static int rsync_module(int f_in, int f_
-
- io_printf(f_out, "@RSYNCD: OK\n");
-
-+ maxargs = MAX_ARGS;
-+ if (!(argv = new_array(char *, maxargs)))
-+ out_of_memory("rsync_module");
- argv[argc++] = "rsyncd";
-
- while (1) {
-@@ -396,23 +400,25 @@ static int rsync_module(int f_in, int f_
-
- p = line;
-
-+ if (argc == maxargs) {
-+ maxargs += MAX_ARGS;
-+ if (!(argv = realloc_array(argv, char *, maxargs)))
-+ out_of_memory("rsync_module");
-+ }
- if (!(argv[argc] = strdup(p)))
-- return -1;
-+ out_of_memory("rsync_module");
-
- if (start_glob) {
- if (start_glob == 1) {
- request = strdup(p);
- start_glob++;
- }
-- glob_expand(name, argv, &argc, MAX_ARGS);
-+ glob_expand(name, &argv, &argc, &maxargs);
- } else
- argc++;
-
- if (strcmp(line, ".") == 0)
- start_glob = 1;
--
-- if (argc == MAX_ARGS)
-- return -1;
- }
-
- argp = argv;
---- util.c 5 Jun 2004 20:26:56 -0000 1.148
-+++ util.c 5 Jun 2004 20:38:16 -0000
-@@ -495,12 +495,20 @@ static int exclude_server_path(char *arg
- return 0;
- }
-
--static void glob_expand_one(char *s, char **argv, int *argc_ptr, int maxargs)
-+static void glob_expand_one(char *s, char ***argv_ptr, int *argc_ptr,
-+ int *maxargs_ptr)
- {
-+ char **argv = *argv_ptr;
- int argc = *argc_ptr;
-+ int maxargs = *maxargs_ptr;
- #if !(defined(HAVE_GLOB) && defined(HAVE_GLOB_H))
-- if (maxargs <= argc)
-- return;
-+ if (argc == maxargs) {
-+ maxargs += MAX_ARGS;
-+ if (!(argv = realloc_array(argv, char *, maxargs)))
-+ out_of_memory("glob_expand_one");
-+ *argv_ptr = argv;
-+ *maxargs_ptr = maxargs;
-+ }
- if (!*s)
- s = ".";
- s = argv[argc++] = strdup(s);
-@@ -521,12 +529,17 @@ static void glob_expand_one(char *s, cha
- memset(&globbuf, 0, sizeof globbuf);
- if (!exclude_server_path(s))
- glob(s, 0, NULL, &globbuf);
-+ if (MAX((int)globbuf.gl_pathc, 1) > maxargs - argc) {
-+ maxargs += globbuf.gl_pathc + MAX_ARGS;
-+ if (!(argv = realloc_array(argv, char *, maxargs)))
-+ out_of_memory("glob_expand_one");
-+ *argv_ptr = argv;
-+ *maxargs_ptr = maxargs;
-+ }
- if (globbuf.gl_pathc == 0)
- argv[argc++] = s;
- else {
- int j = globbuf.gl_pathc;
-- if (j > maxargs - argc)
-- j = maxargs - argc;
- free(s);
- for (i = 0; i < j; i++) {
- if (!(argv[argc++] = strdup(globbuf.gl_pathv[i])))
-@@ -539,9 +552,9 @@ static void glob_expand_one(char *s, cha
- }
-
- /* This routine is only used in daemon mode. */
--void glob_expand(char *base1, char **argv, int *argc_ptr, int maxargs)
-+void glob_expand(char *base1, char ***argv_ptr, int *argc_ptr, int *maxargs_ptr)
- {
-- char *s = argv[*argc_ptr];
-+ char *s = (*argv_ptr)[*argc_ptr];
- char *p, *q;
- char *base = base1;
- int base_len = strlen(base);
-@@ -562,7 +575,7 @@ void glob_expand(char *base1, char **arg
- for (q = s; *q; q = p + base_len) {
- if ((p = strstr(q, base)) != NULL)
- *p = '\0'; /* split it at this point */
-- glob_expand_one(q, argv, argc_ptr, maxargs);
-+ glob_expand_one(q, argv_ptr, argc_ptr, maxargs_ptr);
- if (!p)
- break;
- }