|
Lines 82-91
Link Here
|
| 82 |
#include <string.h> |
82 |
#include <string.h> |
| 83 |
#endif /* HAVE_STRING_H */ |
83 |
#endif /* HAVE_STRING_H */ |
| 84 |
|
84 |
|
| 85 |
#include "opie.h" |
85 |
#include "opie.h" |
| 86 |
|
86 |
|
|
|
87 |
#define MAXUSRARGS 100 |
| 88 |
#define MAXGLOBARGS 1000 |
| 89 |
|
| 87 |
char **ftpglob __P((register char *)); |
90 |
char **ftpglob __P((register char *)); |
| 88 |
char **copyblk __P((char **)); |
91 |
char **copyblk __P((char **)); |
| 89 |
VOIDRET blkfree __P((char **)); |
92 |
VOIDRET blkfree __P((char **)); |
| 90 |
|
93 |
|
| 91 |
/* |
94 |
/* |
|
Lines 101-134
Link Here
|
| 101 |
FILE *ftpd_popen FUNCTION((program, type), char *program AND char *type) |
104 |
FILE *ftpd_popen FUNCTION((program, type), char *program AND char *type) |
| 102 |
{ |
105 |
{ |
| 103 |
char *cp; |
106 |
char *cp; |
| 104 |
FILE *iop; |
107 |
FILE *iop; |
| 105 |
int argc, gargc, pdes[2]; |
108 |
int argc, gargc, pdes[2]; |
| 106 |
char **pop, *argv[100], *gargv[1000], *vv[2]; |
109 |
char **pop, *argv[MAXUSRARGS], *gargv[MAXGLOBARGS], *vv[2]; |
| 107 |
|
110 |
|
| 108 |
if ((*type != 'r' && *type != 'w') || type[1]) |
111 |
if ((*type != 'r' && *type != 'w') || type[1]) |
| 109 |
return (NULL); |
112 |
return (NULL); |
| 110 |
|
113 |
|
| 111 |
if (pipe(pdes) < 0) |
114 |
if (pipe(pdes) < 0) |
| 112 |
return (NULL); |
115 |
return (NULL); |
| 113 |
|
116 |
|
| 114 |
/* break up string into pieces */ |
117 |
/* break up string into pieces */ |
| 115 |
for (argc = 0, cp = program;; cp = NULL) |
118 |
for (argc = 0, cp = program; argc < MAXUSRARGS-1; cp = NULL) { |
| 116 |
if (!(argv[argc++] = strtok(cp, " \t\n"))) |
119 |
if (!(argv[argc++] = strtok(cp, " \t\n"))) |
| 117 |
break; |
120 |
break; |
|
|
121 |
} |
| 122 |
argv[argc - 1] = NULL; |
| 118 |
|
123 |
|
| 119 |
/* glob each piece */ |
124 |
/* glob each piece */ |
| 120 |
gargv[0] = argv[0]; |
125 |
gargv[0] = argv[0]; |
| 121 |
for (gargc = argc = 1; argv[argc]; argc++) { |
126 |
for (gargc = argc = 1; argv[argc] && gargc < (MAXGLOBARGS-1); argc++) { |
| 122 |
if (!(pop = (char **) ftpglob(argv[argc]))) { |
127 |
if (!(pop = (char **) ftpglob(argv[argc]))) { |
| 123 |
/* globbing failed */ |
128 |
/* globbing failed */ |
| 124 |
vv[0] = argv[argc]; |
129 |
vv[0] = argv[argc]; |
| 125 |
vv[1] = NULL; |
130 |
vv[1] = NULL; |
| 126 |
pop = (char **) copyblk(vv); |
131 |
pop = (char **) copyblk(vv); |
| 127 |
} |
132 |
} |
| 128 |
argv[argc] = (char *) pop; /* save to free later */ |
133 |
argv[argc] = (char *) pop; /* save to free later */ |
| 129 |
while (*pop && gargc < 1000) |
134 |
while (*pop && gargc < MAXGLOBARGS-1) |
| 130 |
gargv[gargc++] = *pop++; |
135 |
gargv[gargc++] = *pop++; |
| 131 |
} |
136 |
} |
| 132 |
gargv[gargc] = NULL; |
137 |
gargv[gargc] = NULL; |
| 133 |
|
138 |
|
| 134 |
iop = NULL; |
139 |
iop = NULL; |