일반 사용자 계정에서 cgi 실행이 가능하도록 세팅은 되어있는 상태입니다
물론 다른 cgi 파일은 잘 실행됩니다...
단지 이 프로그램 만이 Internal Server Error 가 나는데요
환장하겠습니다
제 생각에는 아파치 설정보다는 프로그램 상의 오류가 있는거 같은데
잘 모르겠네요...
그리고 에러 로그를 보면 다음과 같은 에러가 납니다
Premature end of script headers: /export/home/kkk/public_html/cgi-bin/guestbook.cgi
소스는 다음과 같습니다...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "cgiutil.h"
#define TRUE 1
#define FALSE 0
#define BUFSIZE 1024
#define MAX_ENTRIES 10000
int embedSSI(char *str);
typedef struct {
char *name;
char *value;
} ENTRY;
/* 문자열 str안에 SSI 구문이 포함돼 있는지 체크 */
int embedSSI(char *str)
{
if(strstr(str, "<!--#"))
return(TRUE);
else
return(FALSE);
}
/* SSI가 문자열 안에 포함돼 있을 경우 출력해주는 에러 메시지 */
void ssiErrMsg()
{
printf("<CENTER>");
printf("<H1>SSI 문장이 포함돼 있습니다.</H1><BR><HR>");
printf("<H3><BLINK>등록을 취소합니다.</BLINK><BR><BR>");
back();
}
int main()
{
int i;
int cl;
char buf[BUFSIZ];
time_t Ourtime;
FILE *fp;
ENTRY entVal[MAX_ENTRIES];
if((fp = fopen("../gbook.html", "a")) != NULL) {
printf("Content-type: text/html");
if(!strcmp(getenv("CONTENT_TYPE"), "application/x-www-form-urlencoded")) {
cl = atoi(getenv("CONTENT_LENGTH"));
for(i = 0; cl && (!feof(stdin)); i++) {
entVal[i].value = fmakeword(stdin, '&', &cl);
plustospace(entVal[i].value);
unescape_url(entVal[i].value);
entVal[i].name = makeword(entVal[i].value, '=');
if(embedSSI(entVal[i].value)) {
ssiErrMsg();
exit(-1);
}
}
Ourtime = time(NULL);
/* 이름과 E-Mail 주소 입력 */
sprintf(buf, "<A HREF="mailto:%s">%s</A>", entVal[1].value, entVal[0].value);
fputs(buf, fp);
/* 전화번호 */
sprintf(buf, " (%s)<BR><BR>", entVal[2].value);
fputs(buf, fp);
sprintf(buf, "%s<BR><HR>", entVal[3].value);
fputs(buf, fp);
fclose(fp);
printf("<H1 ALIGN=center><BLINK>방명록을 작성해 주셔서 감사드립니다. </H1></B
LINK><BR>"); printf("<CENTER>");
printf("<FONT SIZE=+1><A HREF="//">홈페이지</A></FONT> ");
printf("<FONT SIZE=+1><A HREF="gbook.html/">방명록보기</A></FONT>");
printf("<BR><HR>");
/* 자바스크립트로 만든 Back */
back();
printf("</CENTER>");
}
}
return 0;
}