Lines 1-5
Link Here
|
1 |
--- handlers.c.orig Thu Sep 18 15:26:48 2003 |
1 |
--- handlers.c.orig Mon Oct 20 10:27:32 2003 |
2 |
+++ handlers.c Thu Oct 16 14:16:05 2003 |
2 |
+++ handlers.c Tue Oct 21 00:13:59 2003 |
3 |
@@ -24,6 +24,7 @@ |
3 |
@@ -24,6 +24,7 @@ |
4 |
#endif |
4 |
#endif |
5 |
|
5 |
|
Lines 8-17
Link Here
|
8 |
extern int port; /* server port */ |
8 |
extern int port; /* server port */ |
9 |
extern char defaultFileName[MAX_PATH_LEN+1]; /* default name for index, default or similar file */ |
9 |
extern char defaultFileName[MAX_PATH_LEN+1]; /* default name for index, default or similar file */ |
10 |
|
10 |
|
11 |
@@ -262,12 +263,33 @@ |
11 |
@@ -263,6 +264,14 @@ |
12 |
newArgv[i] = NULL; /* we correctly terminate argv */ |
|
|
13 |
|
12 |
|
14 |
i = 0; |
13 |
i = 0; |
|
|
14 |
/* beware of not overfilling this array, check MAX_ENVP_LEN */ |
15 |
+ if (req.contentLength != -1) |
15 |
+ if (req.contentLength != -1) |
16 |
+ { |
16 |
+ { |
17 |
+ sprintf(newEnvp[i++], "CONTENT_LENGTH=%ld", req.contentLength); |
17 |
+ sprintf(newEnvp[i++], "CONTENT_LENGTH=%ld", req.contentLength); |
Lines 23-55
Link Here
|
23 |
strcpy(newEnvp[i], "SERVER_SOFTWARE="); |
23 |
strcpy(newEnvp[i], "SERVER_SOFTWARE="); |
24 |
strcat(newEnvp[i], SERVER_SOFTWARE_STR); |
24 |
strcat(newEnvp[i], SERVER_SOFTWARE_STR); |
25 |
strcat(newEnvp[i], "/"); |
25 |
strcat(newEnvp[i], "/"); |
26 |
strcat(newEnvp[i++], SERVER_VERSION_STR); |
26 |
@@ -285,6 +294,11 @@ |
27 |
+ strcpy(newEnvp[i], "SERVER_PROTOCOL="); |
27 |
strcat(newEnvp[i++], req.userAgent); |
28 |
+ strcat(newEnvp[i++], req.protocolVersion); |
28 |
strcpy(newEnvp[i], "SCRIPT_FILENAME="); |
29 |
strcpy(newEnvp[i], "REQUEST_METHOD="); |
29 |
strcat(newEnvp[i++], completedPath); |
30 |
strcat(newEnvp[i++], req.method); |
|
|
31 |
+ strcpy(newEnvp[i], "REMOTE_ADDR="); |
32 |
+ strcat(newEnvp[i++], req.address); |
33 |
+ strcpy(newEnvp[i], "HTTP_USER_AGENT="); |
34 |
+ strcat(newEnvp[i++], req.userAgent); |
35 |
+ if (req.cookie[0] != '\0') |
30 |
+ if (req.cookie[0] != '\0') |
36 |
+ { |
31 |
+ { |
37 |
+ strcpy(newEnvp[i], "HTTP_COOKIE="); |
32 |
+ strcpy(newEnvp[i], "HTTP_COOKIE="); |
38 |
+ strcat(newEnvp[i++], req.cookie); |
33 |
+ strcat(newEnvp[i++], req.cookie); |
39 |
+ } |
34 |
+ } |
40 |
+ strcpy(newEnvp[i], "SCRIPT_FILENAME="); |
35 |
newEnvp[i] = NULL; |
41 |
+ strcat(newEnvp[i++], completedPath); |
36 |
|
42 |
strcpy(newEnvp[i], "SCRIPT_NAME="); |
37 |
/* we change the current working directory to the scripts one */ |
43 |
strcat(newEnvp[i++], req.documentAddress); |
38 |
@@ -317,7 +331,244 @@ |
44 |
strcpy(newEnvp[i], "GATEWAY_INTERFACE="); |
|
|
45 |
@@ -302,13 +324,256 @@ |
46 |
execve(completedPath, newArgv, newEnvp); |
47 |
/* we reach this line only if an execution error occoured */ |
48 |
/* logging will happen in the father */ |
49 |
- printf("\n<HTML><HEAD><TITLE>CGI Error</TITLE></HEAD><BODY><H1>Cgi Exec error</H1></BODY></HTML>\n"); |
50 |
+ printf("\n<HTML><HEAD><TITLE>CGI Error</TITLE></HEAD><BODY><H1>CGI Exec error</H1></BODY></HTML>\n"); |
51 |
exit(-1); |
52 |
} |
53 |
return 0; |
39 |
return 0; |
54 |
} |
40 |
} |
55 |
|
41 |
|
Lines 228-268
Link Here
|
228 |
+ newArgv[i] = NULL; /* we correctly terminate argv */ |
214 |
+ newArgv[i] = NULL; /* we correctly terminate argv */ |
229 |
+ |
215 |
+ |
230 |
+ i = 0; |
216 |
+ i = 0; |
231 |
+ if (req.contentLength != -1) |
|
|
232 |
+ { |
233 |
+ sprintf(newEnvp[i++], "CONTENT_LENGTH=%ld", req.contentLength); |
234 |
+ strcpy(newEnvp[i], "CONTENT_TYPE="); |
235 |
+ strcat(newEnvp[i++], req.contentType); |
236 |
+ } |
237 |
+ strcpy(newEnvp[i], "SERVER_NAME="); |
217 |
+ strcpy(newEnvp[i], "SERVER_NAME="); |
238 |
+ strcat(newEnvp[i++], DEFAULT_SERVER_NAME); |
218 |
+ strcat(newEnvp[i++], DEFAULT_SERVER_NAME); |
239 |
+ strcpy(newEnvp[i], "SERVER_SOFTWARE="); |
219 |
+ strcpy(newEnvp[i], "SERVER_SOFTWARE="); |
240 |
+ strcat(newEnvp[i], SERVER_SOFTWARE_STR); |
220 |
+ strcat(newEnvp[i], SERVER_SOFTWARE_STR); |
241 |
+ strcat(newEnvp[i], "/"); |
221 |
+ strcat(newEnvp[i], "/"); |
242 |
+ strcat(newEnvp[i++], SERVER_VERSION_STR); |
222 |
+ strcat(newEnvp[i++], SERVER_VERSION_STR); |
243 |
+ strcpy(newEnvp[i], "SERVER_PROTOCOL="); |
|
|
244 |
+ strcat(newEnvp[i++], req.protocolVersion); |
245 |
+ strcpy(newEnvp[i], "REQUEST_METHOD="); |
223 |
+ strcpy(newEnvp[i], "REQUEST_METHOD="); |
246 |
+ strcat(newEnvp[i++], req.method); |
224 |
+ strcat(newEnvp[i++], req.method); |
|
|
225 |
+ strcpy(newEnvp[i], "SCRIPT_NAME="); |
226 |
+ strcat(newEnvp[i++], req.documentAddress); |
227 |
+ strcpy(newEnvp[i], "GATEWAY_INTERFACE="); |
228 |
+ strcat(newEnvp[i++], CGI_VERSION); |
229 |
+ sprintf(newEnvp[i++], "SERVER_PORT=%d", port); |
230 |
+ strcpy(newEnvp[i++], envPath); |
231 |
+ strcpy(newEnvp[i], "QUERY_STRING="); |
232 |
+ strcat(newEnvp[i++], req.queryString); |
233 |
+ strcpy(newEnvp[i], "SERVER_PROTOCOL="); |
234 |
+ strcat(newEnvp[i++], req.protocolVersion); |
247 |
+ strcpy(newEnvp[i], "REMOTE_ADDR="); |
235 |
+ strcpy(newEnvp[i], "REMOTE_ADDR="); |
248 |
+ strcat(newEnvp[i++], req.address); |
236 |
+ strcat(newEnvp[i++], req.address); |
249 |
+ strcpy(newEnvp[i], "HTTP_USER_AGENT="); |
237 |
+ strcpy(newEnvp[i], "HTTP_USER_AGENT="); |
250 |
+ strcat(newEnvp[i++], req.userAgent); |
238 |
+ strcat(newEnvp[i++], req.userAgent); |
|
|
239 |
+ strcpy(newEnvp[i], "SCRIPT_FILENAME="); |
240 |
+ strcat(newEnvp[i++], completedPath); |
251 |
+ if (req.cookie[0] != '\0') |
241 |
+ if (req.cookie[0] != '\0') |
252 |
+ { |
242 |
+ { |
253 |
+ strcpy(newEnvp[i], "HTTP_COOKIE="); |
243 |
+ strcpy(newEnvp[i], "HTTP_COOKIE="); |
254 |
+ strcat(newEnvp[i++], req.cookie); |
244 |
+ strcat(newEnvp[i++], req.cookie); |
255 |
+ } |
245 |
+ } |
256 |
+ strcpy(newEnvp[i], "SCRIPT_FILENAME="); |
|
|
257 |
+ strcat(newEnvp[i++], completedPath); |
258 |
+ strcpy(newEnvp[i], "SCRIPT_NAME="); |
259 |
+ strcat(newEnvp[i++], req.documentAddress); |
260 |
+ strcpy(newEnvp[i], "GATEWAY_INTERFACE="); |
261 |
+ strcat(newEnvp[i++], CGI_VERSION); |
262 |
+ sprintf(newEnvp[i++], "SERVER_PORT=%d", port); |
263 |
+ strcpy(newEnvp[i++], envPath); |
264 |
+ strcpy(newEnvp[i], "QUERY_STRING="); |
265 |
+ strcat(newEnvp[i++], req.queryString); |
266 |
+ newEnvp[i] = NULL; |
246 |
+ newEnvp[i] = NULL; |
267 |
+ |
247 |
+ |
268 |
+ /* we change the current working directory to the scripts one */ |
248 |
+ /* we change the current working directory to the scripts one */ |
Lines 301-307
Link Here
|
301 |
int sock; |
281 |
int sock; |
302 |
char filePath[]; |
282 |
char filePath[]; |
303 |
char mimeType[]; |
283 |
char mimeType[]; |
304 |
@@ -351,11 +616,11 @@ |
284 |
@@ -360,11 +611,11 @@ |
305 |
return -1; |
285 |
return -1; |
306 |
} |
286 |
} |
307 |
stat(filePath, &fileStats); |
287 |
stat(filePath, &fileStats); |
Lines 315-321
Link Here
|
315 |
fatal = NO; |
295 |
fatal = NO; |
316 |
retry = NO; |
296 |
retry = NO; |
317 |
while(!feof(inFile) && !fatal) |
297 |
while(!feof(inFile) && !fatal) |
318 |
@@ -399,11 +664,11 @@ |
298 |
@@ -408,11 +659,11 @@ |
319 |
if (howMany > 0) |
299 |
if (howMany > 0) |
320 |
{ |
300 |
{ |
321 |
#ifdef ON_THE_FLY_CONVERSION |
301 |
#ifdef ON_THE_FLY_CONVERSION |
Lines 332-362
Link Here
|
332 |
#endif |
312 |
#endif |
333 |
if (send(sock, outBuff, howMany, 0) < 0) |
313 |
if (send(sock, outBuff, howMany, 0) < 0) |
334 |
{ |
314 |
{ |
335 |
@@ -449,7 +714,7 @@ |
|
|
336 |
FILE *tempFile; |
337 |
size_t generatedBytes; |
338 |
char tempStr[MAX_PATH_LEN+1]; |
339 |
- char linkStr[MAX_PATH_LEN+1]; |
340 |
+ char linkStr[MAX_PATH_LEN+2]; |
341 |
time_t currTime; |
342 |
char timeStr[256]; |
343 |
|
344 |
@@ -497,10 +762,16 @@ |
345 |
if (strcmp(dp->d_name, ".")) /* not self */ |
346 |
{ |
347 |
if (strcmp(dp->d_name, "..")) |
348 |
+ { |
349 |
strcpy(linkStr, dp->d_name); |
350 |
- else |
351 |
+ if (dp->d_type == DT_DIR) |
352 |
+ strcat(linkStr, "/"); |
353 |
+ sprintf(tempStr, "<A HREF=\"%s\">%s</A><BR>\n", linkStr, linkStr); |
354 |
+ } else |
355 |
+ { |
356 |
strcpy(linkStr, "Parent Directory"); |
357 |
- sprintf(tempStr, "<A HREF=\"%s\">%s</A><BR>\n", dp->d_name, linkStr); |
358 |
+ sprintf(tempStr, "<A HREF=\"%s/\">%s</A><BR>\n", dp->d_name, linkStr); |
359 |
+ } |
360 |
generatedBytes += strlen(tempStr); |
361 |
fprintf(tempFile, "%s\n", tempStr); |
362 |
} |