リクエストメソッドがPOSTの場合にのみ処理を行うCを使用してCGIファイルで作業しています。
int main(void)
{
char *method_str = getenv("REQUEST_METHOD");
int iMethod = strcmp(method_str,"POST");
int tid = 0;
int own_id = 0;
char key[16] = "\0";
if (iMethod == -1) {
puts("Location:start.cgi\n\n");
} else if (iMethod == 0) {
char *data = getenv("CONTENT_LENGTH");
int size = atoi(data);
char *buffer = malloc((size+1)*sizeof(char));
fgets(buffer,atoi(data)+1,stdin);
int counter = count(buffer);
char **names = malloc(counter*sizeof(char *));
char **values = malloc(counter*sizeof(char *));
parse(buffer, names, values);
int isDel = strcmp(*(values+1),"Back to Start");
if (isDel == 0) startpage(atoi(*values));
else {
own_id = atoi(*values);
sprintf(key,"%s",*(values+1));
int stat = login_status(own_id,key);
if (stat == -1) {
startpage(0);
} else userpage(own_id);
}
free_mallocs(names,values,counter);
free(buffer);
}
free(method_str);
return 0;
}
gdbでCGIファイルを実行すると、問題は次の行にあることがわかります。
int iMethod = strcmp(method_str,"POST");
。エラーはSIGSEGVです。
XAMPPサーバーからCGIを開くと、CGIは正常に動作します。ただし、自分とは別のUbuntuサーバーで実行すると、エラー500が発生します。の値をNULLと比較しようとしましたがgetenv("REQUEST_METHOD")
、gdbはファイルが正常に実行されたことを示しています。ただし、CGIファイルはXAMPPサーバーと他のサーバーの両方で正しく実行できず、2つはエラー500を示しています。関数にContentヘッダーが設定されていることがわかります。関数count()とparse()は適切に設定されており、目前の状況とは無関係です。前もって感謝します。
更新:ユーザーがCGIファイルを直接開くと、ブラウザーは別のCGIファイルにリダイレクトします。