mirror of
https://github.com/fumiama/simple-http-server.git
synced 2026-06-05 00:30:23 +08:00
fix(cgi): exec cgi but not serve file
This commit is contained in:
11
server.c
11
server.c
@@ -140,7 +140,7 @@ static void accept_action(tcpool_thread_timer_t *p) {
|
|||||||
path -= 2;
|
path -= 2;
|
||||||
path[0] = '.'; path[1] = '/';
|
path[0] = '.'; path[1] = '/';
|
||||||
|
|
||||||
printf("[%s] <%s> (%s) = ", getmethod(method_type), path, query_string);
|
printf("[%s] p='%s' ?='%s' ", getmethod(method_type), path, query_string);
|
||||||
do {
|
do {
|
||||||
// 花括号不可省略
|
// 花括号不可省略
|
||||||
if(stat(path, &st) == -1) {
|
if(stat(path, &st) == -1) {
|
||||||
@@ -151,14 +151,12 @@ static void accept_action(tcpool_thread_timer_t *p) {
|
|||||||
int pathlen = strlen(path) + 1;
|
int pathlen = strlen(path) + 1;
|
||||||
char path_stack[pathlen + 11]; // 11 is for possible /index.html
|
char path_stack[pathlen + 11]; // 11 is for possible /index.html
|
||||||
memcpy(path_stack, path, pathlen);
|
memcpy(path_stack, path, pathlen);
|
||||||
printf("<%d> ", pathlen);
|
|
||||||
path = path_stack;
|
path = path_stack;
|
||||||
|
|
||||||
int query_length = strlen(query_string) + 1;
|
int query_length = strlen(query_string) + 1;
|
||||||
char query_string_stack[query_length];
|
char query_string_stack[query_length];
|
||||||
memcpy(query_string_stack, query_string, query_length);
|
memcpy(query_string_stack, query_string, query_length);
|
||||||
query_string = query_string_stack;
|
query_string = query_string_stack;
|
||||||
printf("(%d) ", query_length);
|
|
||||||
|
|
||||||
if((st.st_mode & S_IFMT) == S_IFDIR) {
|
if((st.st_mode & S_IFMT) == S_IFDIR) {
|
||||||
strcat(path, "/index.html");
|
strcat(path, "/index.html");
|
||||||
@@ -170,7 +168,8 @@ static void accept_action(tcpool_thread_timer_t *p) {
|
|||||||
}
|
}
|
||||||
int content_length = 0;
|
int content_length = 0;
|
||||||
int host_chk_passed = !(uintptr_t)hostnameport;
|
int host_chk_passed = !(uintptr_t)hostnameport;
|
||||||
cgi &= ((st.st_mode & S_IXUSR) || (st.st_mode & S_IXGRP) || (st.st_mode & S_IXOTH));
|
cgi |= ((st.st_mode & S_IXUSR) || (st.st_mode & S_IXGRP) || (st.st_mode & S_IXOTH));
|
||||||
|
if(cgi) printf("(CGI) ");
|
||||||
while(numchars > 0) {
|
while(numchars > 0) {
|
||||||
numchars = get_line(client, p->data, sizeof(p->data));
|
numchars = get_line(client, p->data, sizeof(p->data));
|
||||||
if(p->data[0] == '\n' || p->data[0] == '\r') {
|
if(p->data[0] == '\n' || p->data[0] == '\r') {
|
||||||
@@ -308,7 +307,7 @@ static void execute_cgi(tcpool_thread_timer_t *timer, int content_length, const
|
|||||||
goto CGI_CLOSE;
|
goto CGI_CLOSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("CGI msg len: %u bytes.\n", cnt);
|
printf("read %u bytes from pipe, ", cnt);
|
||||||
if(cnt > 0) {
|
if(cnt > 0) {
|
||||||
int len = 0;
|
int len = 0;
|
||||||
#if __APPLE__
|
#if __APPLE__
|
||||||
@@ -332,7 +331,7 @@ static void execute_cgi(tcpool_thread_timer_t *timer, int content_length, const
|
|||||||
len += delta;
|
len += delta;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
printf("CGI send %d bytes\n", len);
|
printf("send %d bytes.\n", len);
|
||||||
}
|
}
|
||||||
CGI_CLOSE:
|
CGI_CLOSE:
|
||||||
close(cgi_output[0]);
|
close(cgi_output[0]);
|
||||||
|
|||||||
Reference in New Issue
Block a user