[완료]C언어로 파일업로드 cgi를 짜봤는데요 파일오픈이 안되네요
글쓴이: artanics / 작성시간: 금, 2012/06/15 - 11:54오전
#include <stdio.h> // puts() #include <string.h> // strlen() #include <fcntl.h> // O_WRONLY #include <unistd.h> // write(), close() int main() { char ch; int fd; printf("Content-type: text/html\n\n"); printf("upload ver1.0\n\n"); if (( fd = open( "./test.txt", O_WRONLY | O_CREAT |O_TRUNC ,0644)) <= 0) printf( "fileopen error\n"); printf( "fileopen start\n"); while(1) { fscanf(stdin, "%c", &ch); if(feof(stdin)) break; write( fd, &ch, 1); } close( fd); return 0; }
----------------------------------------------------------------------------
소스코드이구요. 작업환경은 at91cap9stk 라는 임베디드 보드입니다.
아파치 버전은 1.3.41 이구요.
기존에 인터넷에서 돌아다니는 퍼미션이란 퍼미션은 다줘봤습니다.
현재는 디렉토리까지 풀로 777 인 상태입니다.
단순한 post로 넘어온 데이터를 받아서 파일에 기록하는 cgi입니다.
post값을 받으려고 stdin을 썼습니다
# ./upload.cgi
이렇게 실행하면 실행이 됩니다. 물론 파일도 생성이되고 정상적으로 쉘에서는 잘 작동이 됩니다.
하지만 웹에서 cgi를 실행 시키면 파일오픈에서 막혀버립니다.
// printf( "fileopen error\n");
저부분이 딱나와버리네요.
심지어 로그에도 아무런 오류코드가 안찍혀 있는데
왜 쉘에서는 파일이 생성되는데 cgi에서는 생성이 안될까요??
소스코드가 잘못된걸까요?
Forums:
죄송합니다 해결했습니다.
완전 혼자 멍청한 짓을 했군요.
기존에 있던 test.txt 파일을 지우니까 됐습니다.
아마 그 권한이 root로 되어 있는 파일이라서 nobody 파일로 덮어쓸수 없었나 봅니다.
댓글 달기