2014. 3. 27. 12:28

개인적인 프로젝트에 쓰려고 만든건데, 서버 구현을 WEBrick이 아니라 Sinatra로 바꾸면서 무쓸모해짐...ㅜㅜ

그래도 혹시 WEBrick을 쓰면서 동일 포트로 웹소켓을 쓰고 싶은 사람이 있다면 참고해주시길.

websocket 젬을 사용해서 WebSocket을 구현했기 때문에 아마 호환성이 높을 것으로 생각된다.

https://github.com/gwangyi/WEBrick-WebSocket

ps. github readme파일 만드는거 어떻게 하는지 모르겠다...ㅜㅜ

'프로그래밍 > Ruby' 카테고리의 다른 글

WebSocket Servlet for WEBrick  (0) 2014.03.27
POVIS 자동화 라이브러리  (0) 2010.10.06
Fortune Delivery  (0) 2010.06.17
Ruby-GNOME2-0.19.4 for Windows  (1) 2010.04.27
ruby 동영상 플레이어 라이브러리 with DirectShow  (0) 2010.04.18
Ruby-GTK2 0.19.3 for Windows  (0) 2010.04.13
2013. 4. 8. 13:59

개인적으로 쓸 일이 있어 http://seed.kisa.or.kr 에서 64비트용 국산암호 소스코드 항목의 SEED 코드를 받아서 써봤다.

메인 개발 머신이 리눅스인지라, gcc로 컴파일해서 쓸려고 했는데 뭐가 문젠지 딴데서 만든 SEED 암호화 문장이 해독도 안되고, 암호화 한 문장이 딴데서 해독도 안돼서 매우 짜증나 있던 차에, 알고 보니 제공된 SEED 소스코드가 MSVC에 의존성이 있는 코드였다는 것을 알게 되었다.

추가로 지저분한 경고가 너무 많이 뜨길래 좀 더 손봤다. 그리고 한번 암·복호화 할 때마다 세번씩 malloc을 하길래 그거도 죄다 빼버렸다.

intel x86_64 에서 테스트를 대충 해봤는데 잘 됐다. 아마 딴데서도 잘 될거 같은데 확신은 없다. 뭐 잘 되겠지.

혹시 고치긴 귀찮은데 gcc에서 SEED 암호화 루틴을 openssl 의존성 없이 가져다 쓰고 싶은 사람은 받아가시면 될듯.

저작권에 대한 구체적인 명시가 없어서 걍 일단 올림. 혹시 문제가 되면 자삭하겠습니다.

참고로 CBC 모드 라이브러리만 손봤음. 단일 블럭 코드는 이거 바탕으로 고치면 어떻게든 되지 않을까...

seedcbc.zip


'프로그래밍 > C' 카테고리의 다른 글

SEED Cryptography Implementation for GCC  (0) 2013.04.08
C로 CGI를 만들어 보아요  (0) 2010.05.11
2D 갤러리 cgi 완성  (0) 2010.05.11
binary graphic counter by C  (1) 2010.05.11
counter cgi  (0) 2010.05.06
일반 창을 위젯화 시키는 Widgetizer  (0) 2009.10.22
2013. 1. 18. 20:19

연구실에서 현재 ubuntu 12.10이 설치된 PC와 windows 8 이 설치된 PC를 같이 쓰다 보니, 서로 파일을 주고받을 일이 종종 생긴다. 이걸 전부 메신저나 ftp같은걸로 주고받을려면 상당히 귀찮다. 그래서 windows 홈 디렉토리를 SMB로 공유해서 리눅스에 마운트시키고, 리눅스 홈 디렉토리도 samba로 공유해서 윈도에 네트워크 드라이브로 연결해서 쓰고 있었다.

근데 이게 좀 애매했던 것이, windows 홈 디렉토리를 리눅스에 마운트시키려고 할 때 계정 정보를 파일로 어딘가에 써놔야만 한다는거다. 그것도 plain text로! 그동안은 600으로 퍼미션을 줘서 숨긴다고 숨겼지만 여전히 불안한 것은 사실이었다.

그래서 이번에 뭘 좀 찾아보다 보니 pam_mount란걸 발견해서 잘 쓰고 있었다. 과거형인 이유는, Windows 7 쓰다가 8로 바꾸는 과정에서 계정을 라이브 계정으로 바꿨는데, 이게 라이브 계정이 되면서 계정 자체가 이메일처럼 바뀌면서 리눅스 계정과 호환이 안되는 사태가 발생했기 때문이다 ㅜㅜ

그래도 로컬 계정을 쓴다거나 Windows 7을 쓴다거나 하는 경우는 별 문제가 없으니 일단 팁으로 써본다.

pam_mount 모듈은 linux에서 계정 인증할때 쓰는 pam의 모듈로써, linux 인증 시스템의 정보를 이용해서 인증을 필요로 하는 여러 가지 파일 시스템을 계정 로그인시 자동으로 mount해주는 기능을 가지고 있다. 지원되는 것 중에 굵직한 것 몇 가지만 예를 들어보면, 내가 예전까지 잘 쓰고 있던 SMB(CIFS), 또 ssh 서버만 있으면 특별한 서버가 따로 필요 없는 sshfs 정도가 있고, fuse를 이용한 경우도 적용이 되는 것으로 보인다.

우분투의 경우 pam_mount 모듈을 설치하기가 쉬운데, 간단하게

apt-get install libpam-mount

명령으로 설치 가능하다.

global한 환경 파일은 /etc/security/pam_mount.conf.xml (Ubuntu 12.10 기준)에 들어 있는데, 여기서 luserconf 항목의 주석을 해제해주면 각 사용자별 설정을 홈디렉토리/.pam_mount.conf.xml 파일에서 설정해줄 수 있다. 또 mntoptions 항목에서 mount 명령어에 -o 옵션으로 넘겨지는 옵션 중 허용할 것과 불허할 것을 설정해 줄 수 있는데, 허용되지 않은 옵션을 넘길 경우 pam_mount.conf.xml 파일의 해당 명령을 무시하고 에러메시지를 밷는다. 기본적으로 화이트리스트 기반이며, allow="*" 항목을 추가시켜주면 블랙리스트 기반으로 처리 가능하다.

그리고 실제 마운트시키는 볼륨에 대한 정보는, LDAP등으로 동시에 계정이나 홈디렉토리가 관리되는 계정이 아닌 이상에는 각자 개인별로 설정파일을 갖는 편이 나을텐데, 내가 설정해놓은 CIFS 설정 파일을 첨부한다.

<?xml version="1.0" encoding="utf-8" ?>

<pam_mount>

  <volume
    options="uid=%(USER),dir_mode=0755,file_mode=0644,ip=x.x.x.x,nodev,nosuid"
    user="*"
    mountpoint="/home/%(USER)/Mounts/Windows"
    path="Users"
    server="WINDOWS-PC"
    fstype="cifs"
    />

</pam_mount>

%(USER)는 로그인되는 계정명으로 치환되는 매크로다. user에는 이 설정 파일이 적용되는 유저네임을 쓰면 된다.

주의할 점은, linux에서 사용하는 계정/비밀번호로 마운트를 시도하기 때문에 계정과 비밀번호가 일치해야 한다는 점이다. 현재 내가 못쓰고 있는 이유이기도 하다. ㅜㅜ Windows8에서 계정명에 대한 alias가 지원된다면 좋겠는데... 찾아도 잘 모르겠더라.

좀 더 자세한 정보가 필요하면 pam_mount 공식 홈페이지를 참조하시길...

2012. 12. 24. 22:20

2년간 안썼구나!

잡설 2012. 12. 24. 22:20

Posroid 관련해서 뭔 글을 봤던 기억이 나서 다시 와봤는데 내가 2년간 거의 안들어왔던 모양이다 ㅋㅋ

2년 전이라면 아마도 내가 삼성의 전략을 꿰뚫어보지 못하고 최후의 실험작 Galaxy S를 호구호구 열매 섭취와 함께 구입했던 시기 근처인 것 같은데, 그 근처를 계기로 대부분의 뻘글들을 트위터와 페이스북에 쓰기 시작한 시기와 대충 비슷하다.

티스토리와 그 전신인 테터툴즈는 한때 시대를 풍미한 일기장 겸 커뮤니케이션 도구였던 것으로 기억하는데, 역시 세월의 흐름이란 무섭구나.

여튼 이제 가끔씩 페북에 쓰긴 좀 길거나, 페북에 쓰기 뭐한 글은 여기다가 지르면 될 것 같다 ㅎㅎ

'잡설' 카테고리의 다른 글

2년간 안썼구나!  (0) 2012.12.24
혼자서 배우기  (0) 2010.08.22
돈까스 한뚝배기 하실래예?  (0) 2010.05.07
텍큐 글 복원  (0) 2009.10.05
대학원생과 연구와 교수님  (2) 2009.06.25
종교와 기득권층  (0) 2009.06.22
2010. 10. 6. 23:52

오래간만의 포스팅은 Povis 자동화 라이브러리이다.

이전에도 올렸었던 것 같기도 한데, 이번에 추가된 내용은 식단표를 읽어오는 내용이다.

포비스 시스템 자체가 약간 병맛나서 익스 6.0, 7.0으로밖에 들어갈 수 없기도 하지만, 더해서 올라오는 식단표도 어딘가에서 재사용하기 구려서 파싱하는 프로그램을 만들었다.

당연히 POVIS에 접속해야하므로 아이디와 비번이 있어야 긁어올 수 있다.

루비로 되어 있고, nokogiri와 net/http, open-uri 라이브러리를 필요로 한다.

아... 저 세개가 다 내 던파 캐릭 이름이군ㅋ


'프로그래밍 > Ruby' 카테고리의 다른 글

WebSocket Servlet for WEBrick  (0) 2014.03.27
POVIS 자동화 라이브러리  (0) 2010.10.06
Fortune Delivery  (0) 2010.06.17
Ruby-GNOME2-0.19.4 for Windows  (1) 2010.04.27
ruby 동영상 플레이어 라이브러리 with DirectShow  (0) 2010.04.18
Ruby-GTK2 0.19.3 for Windows  (0) 2010.04.13
2010. 8. 22. 19:51

혼자서 배우기

잡설 2010. 8. 22. 19:51

공부라는 것은 크게 두 종류가 있다.

하나는 남이 가르쳐 주는 것을 배우는 것. 이 것은 태어나서 24년간 - 길면 더 길어질 수 있겠지만 - 눈 앞에 있는 공부의 대부분이다. 물론 그 중에서도 두 번째 종류의 공부를 찾아내서 하는 경우도 많지만, 이 경우는 이게 힘들다는걸 모르고-_- 하는 것이기에 공부라고 생각 안하는 경우도 있고, 그닥 무게있게 생각하지 않는 경우도 많다.

남이 가르쳐 주는 것을 배우는 것은, 물론 그 자체도 상당히 어려운 일이지만, 비교적 쉬운 편이다. 음식에 비유하자면 이런거다 - 누군가 먼저 입에 넣고 오물오물 씹어서, 부드럽게 만들어논 음식. 이미 1차적으로 소화된 것이기 때문에 질기지도 않고 소화가 안돼 고생하는 일도 없다. 물론 가르쳐주는 사람이 노력한다는 전제 하에서다. 여하튼 이런 공부는 사람이 머릿속에서 미리 체계화시킨 것을 그대로 전수받는 것이기 때문에 배우기도 쉽고, 이해하기도 쉽고, 무엇보다 애프터서비스가 된다.

근데 이 두번째 공부, 스스로 배우는 것은 여러가지로 다르다. 차원이 다르단걸 요새 느끼고 있다. 책과 material, 소스코드를 보면서 열심히 공부를 해보고 있는데, 무지하게 질기다. 게다가 달콤하지도, 자극적이지도 않고 무덤덤하니 쓰다. 씹어도 씹어도 질겨서 입 안에 문 채로 보채고 있다. 더 열심히 씹으면 삼킬 수 있을 것 같은데, 안씹던 질긴걸 씹다보니 턱이 다 아프다. 약간씩, 그 안에 있는 진국이 나오면서 나름의 맛이 느껴지기 시작하긴 했지만 본격적으로 느끼기엔 한참 멀었다.

뱉어내면 내 인생 꼬이는거고(ㅋㅋ) 계속 물고 있으면 분명히 충치가 생길거다. 그래서 난 씹어야만 하는데, 그 질긴 촉감이 머릿속에 남아서 씹는게 싫다. 에휴우

'잡설' 카테고리의 다른 글

2년간 안썼구나!  (0) 2012.12.24
혼자서 배우기  (0) 2010.08.22
돈까스 한뚝배기 하실래예?  (0) 2010.05.07
텍큐 글 복원  (0) 2009.10.05
대학원생과 연구와 교수님  (2) 2009.06.25
종교와 기득권층  (0) 2009.06.22
2010. 6. 17. 12:32

내가 다니는 학교 POSTECH은 기숙사 학교기 때문에, 배달 음식을 시켜먹는 일이 잦다.
근데 요즘 돈도 없었고 먹을 일도 잘 없어 배달음식을 자주 안시켜먹었더니, 뭐가 맛있고 뭐가 괜찮은지 모르는 상황에 이르렀다.
그래서 랜덤으로 배달메뉴를 고르는 프로그램을 만들어야겠다는 결론에 도달했다.

루비로 짰는데, CGI로 짤려고 했더니 매번 호출때마다 파싱해 오는게 너무 느려서 standalone web server로 만들었다.

웹서버 코드는 웹서핑 해서 나온 코드를 대충 때려박아 넣었다.

핵심인 배달업체 페이지 분석에서 학교 홈페이지가 공개되면 여러모로 곤란해질듯 하여 그 부분은 X로 마스킹 했으니, 그냥 켜면 절대 돌아가지 않는다.

'프로그래밍 > Ruby' 카테고리의 다른 글

WebSocket Servlet for WEBrick  (0) 2014.03.27
POVIS 자동화 라이브러리  (0) 2010.10.06
Fortune Delivery  (0) 2010.06.17
Ruby-GNOME2-0.19.4 for Windows  (1) 2010.04.27
ruby 동영상 플레이어 라이브러리 with DirectShow  (0) 2010.04.18
Ruby-GTK2 0.19.3 for Windows  (0) 2010.04.13
2010. 5. 18. 15:56

넷북을 쓰다 보면, 무선 연결이 불안정할 때가 많아 수시로 끊어진다. 그 자체는 문제가 아닌데, 그러다 보면 메신저들이 신나게 재접을 해대는 상황이 벌어지기 마련이다. 이 때 문제가 되는 것이, 네이트온의 경우 쓸데없는 광고가 뜬다는 것이다.

이 쓸데 없는 광고는 얼마나 쓸 데가 없냐면, 광고가 떠도 앞에 안 나오고 뒤에 숨어 있다가 네이트온 쪽지가 와서 보려고 쪽지창을 클릭할 때 광속의 속도로 전면으로 튀어나와서는 대신 클릭당한다. 그러면 Internet Explorer가-심지어 기본 브라우저를 딴 것으로 바꾸어두어도!-뜨면서 그게 완전히 뜨기까지 네이트온은 먹통이 되고, 그게 뜬 뒤에도 한동안 버벅거리는 것은 상당한 짜증을 동반시킨다.

그래서 나는 광고를 없애버리기로 다짐했다. 하는 김에 네이트온 접속 후의 스킨을 수정해서 광고를 떼보았다. 요놈도 상당히 자리를 차지해 넷북으로썬 상당히 귀찮다.

이것도 저것도 모르겠다, 하는 사람은 첨부된 파일을 받아다 적당히 풀면 되겠다. xml파일은 C:\Program Files\NATEON\Skins\DefSkin 에, exe파일은 C:\Program Files\NATEON\BIN에 넣으면 된다.

수정한 부분은 xml 파일에서는 아랫쪽에 주석처리된 부분 밑의 tr 태그를 죄다 지웠다. 그러고 나니까 별로 안예뻐서 miniview 들어가 있는 행과 그 아래 행은 살려뒀더니 원래부터 광고가 없었던 것 마냥 이뻐졌다ㅋ

exe파일에서는 '아마도' 광고 관련 처리하는 루틴을 전부 NOP으로 때워넣었는데, 위치가 0271d08부터 약 32byte 정도 된다. add esp, 24h 까지 덮으면 된다.

첨언: 찾아보니까 이미 한 사람이 많다...-_-;

'크래킹, 크랙미' 카테고리의 다른 글

AD free NateOn  (0) 2010.05.18
COM Object 생성 추적하기, COMTracer  (0) 2009.10.05
DLL injection with CreateRemoteThread()  (0) 2009.08.01
CBsearch Crack  (15) 2009.06.20
abexcrackme2  (0) 2007.02.17
2010. 5. 11. 17:26

요즘은 인터넷 홍수 시대라고 해도 과언이 아닐 정도로 엄청난 양의 정보들이 인터넷을 통해 유통되고 있다. 최초의 인터넷(정확히는 www:World Wide Web)은 단순히 발행된 정보를 독자에게 전해주는 단방향 커뮤니케이션이었지만, CGI라고 하는 요술방망이가 등장한 이후 사용자가 서버에게 단순히 요청만 하는 것이 아니라 정보를 제공해주고 그 제공된 정보를 서버가 다시 처리해 돌려주는 신비한 일도 발생하기 시작했다.

지금이야 php다, RoR이다, django다 하는 더 이상한 놈들에게 자리를 빼앗기거나 대체, 또는 그것들을 위한 단순한 backend 수준으로 그 위상이 격하된 CGI이지만 처음 나왔을 때는 상당하고도 신선한 충격이었고, 덕분에 Perl이라는 언어는 원래 계획됐던 보고, 시스템 관리용 언어에서 벗어나서 굉장히 넓은 지평을 갖게 되었다. 한 때 우리나라에서 유행했던 소위 “설치형 웹게임”이란 놈들은 거의 다 이 Perl로 짜여지기도 했다.

Perl은 시스템 관리용으로도 쓰였기 때문에 웬만한 머신에는 다 설치되어 있었고, 따라서 CGI를 쓰는 데는 큰 문제가 없었지만 가끔씩 Perl이 설치되지 않았거나 Perl을 사용할 수 없는 웹서버가 있었고, 또 Perl이란 언어 자체가 내부적으론 컴파일링을 하지만 원시 코드(source code)를 그대로 입력받는 언어였기에 필연적으로(하지만 지금은 전혀 상관없는) 속도가 느려지기 마련이어서, 가끔 바이너리로 된 CGI가 배포되기도 했었다.

하지만 이제 와서는 사실, Perl이 안 깔린 머신도 없고 웬만한 기능은 다 Perl, python, ruby 등의 언어로 바인딩이 제공되고 있으며 저런 것을 쓰더라도 속도 문제에 있어서 전혀 신경을 쓰지 않아도 될 정도의 시대인지라, C로 CGI를 만들겠다는 것은 정말 뻘짓이 아닐 수 없다. 그럼에도 불구하고 C로 CGI를 만들어야 하는 이유가 있다.

C는 모든 언어의 기본이다. 이 말은 C가 정말 기초적이기 때문에 이 것을 배워야 다른 언어로 CGI를 짤 수 있다는 되도안한 소리가 아니다. 무슨 뜻이냐면, 특히나 Linux의 경우, 대부분의 라이브러리들이 1차적으로 C 언어로 된 인터페이스를 갖는다. 거기에 추가적으로 필요하다면 각 언어용 바인딩이 제공되어 설치하여 쓰게 되어 있다. 따라서, Perl이나 python, ruby용 바인딩이 설치되어 있지 않은 어떤 라이브러리를 사용하고 싶다면, 그 바인딩을 구해서 사용할 수 없는 경우엔 C로 짜는 것이 대안이 될 수 있다는 것이다. 이 '사용할 수 없는 경우'라는 것은 상당히 많은 경우를 포함하는데, C와의 호환이 필요한 라이브러리의 경우 C로 컴파일해야 하는 경우가 자주 발생한다. 이 때 가끔씩, 뭔가 알 수 없는 이유로 컴파일이 안되는 경우가 발생하기도 하고, 컴파일을 무사히 마치더라도 적절한 위치에 넣을 수 있는 권한이 없어 실패할 수도 있다. 기본적으로 각 언어별로 제공되는 확장기능 관리 기능을 통해 설치하려고 해도 보통은 권한이 없어서 그것도 여의치 않다. 하지만, 어쨌든 간에 그 라이브러리가 머신에 깔려만 있다면, 헤더파일만 있으면 C에서는 가져다 쓰는 데 큰 문제가 없다.

... 두 번째 이상의 이유를 찾아보려 했지만 도저히 모르겠다. 나도 C로 두 개의 CGI를 '이시대에' 만들었지만, 왜 했는지 지금 생각해보면 참 바보같다. 물론, 이 선택을 하지 않으면 관리자 권한이 없는 웹서버에 내가 원하는 기능을 갖는 CGI 만들기는 불가능했을 것이기 때문에-그리고 그 웹서버를 버릴 수도 없는 상황이라- 어쩔 수 없었지만.

서론은 여기까지 하고, 먼저 단순한 예제를 보자. 아마 다른 언어로 CGI를 만들어 봤으면 다음 예제가 뭐하는 것인지, 더해서 얼마나 무의미한 것인지 알 수 있으리라고 생각한다.

#include <stdio.h>
int main()
{
    puts("Content-type: text/plain\n");
    puts("안녕, 세상아!");
    return 0;
}

별 것 없다. 컴파일해서 대충 first.cgi 정도로 이름을 바꿔 적당한 곳에 넣어주자. 아, 이야기하는 것을 깜빡했는데, 적어도 이 글은 'C 언어로 된 간단한 소스파일을 이해할 수 있고 CGI 사용을 위한 웹서버 설정을 할 수 있는 사람', 또는 'C 언어로 된 간단한 소스파일을 이해할 수 있고 CGI 사용이 가능하도록 설정된 웹서버를 가진 사람'을 대상으로 하고 있다. 따라서 독자 여러분께서는 first.cgi로 접속하는 법을 알고 있을 것이다.

접속해 보면 웹브라우저에 달랑 ”안녕, 세상아!” 라는 글이(당연히 따옴표는 없다) 찍힌 것을 볼 수 있을 것이다. 이 단순한 소스 코드가 의미하는 바는 다음과 같다.

  1.  puts("Content-type: text/plain\n");
    실제로는 puts가 문자열을 출력할 때 맨 뒤에 개행문자를 하나 더 붙이므로 개행이 두 번 일어나게 되어 빈 줄 하나가 생긴다. 이 명령이 수행하는 것은 '이 CGI가 출력할 내용물의 타입은 text/plain입니다'하고 클라이언트에게 알리는 것이다. html을 출력할때는 text/html, xml을 출력할 때는 application/xml, png파일일 때는 image/png가 된다. MIME을 찾아봐라.
  2. puts("안녕, 세상아!");
    위에서 출력한 헤더의 내용이 나온다. 단순한 텍스트로 안녕, 세상아! 가 출력된다.

기본적으로, CGI가 표준 출력(stdout)으로 출력하는 내용이 클라이언트로 전송되게 된다. 그런데 클라이언트에서 접속했을 때 500에러가 나온다면, 첫째로 헤더 출력하는걸 깜빡했거나 잘못된 헤더를 출력하는 경우이고, Perl이나 다른 언어로 만들었을 경우와 다르게 Segmentation Fault가 난 경우에도 500 에러가 난다. 절대 Segmentation fault 이전까지 출력한 내용이 나오지 않으므로(Apache2의 경우) 알아둘 필요가 있다.

다른 언어로 CGI를 만들어 봤다면 알겠지만, CGI는 서버와 클라이언트의 정보를 환경변수와 표준 입력으로 얻는다. C로 짜는 경우도 큰 차이가 없다. 환경변수 정보를 확인하고 싶다면 다음 CGI를 만들어서 테스트해보면 좋을 것이다.

#include <stdio.h>
int main(int argc, char ** argv, char ** env)
{
    int ch;
    puts("Content-type: text/plain\n");
    while(*env) puts(*(env++));
    puts("This is stdin:");
    while((ch = fgetc(stdin)) -1) fputc(ch, stdout);
    return 0;
}

요정도면 무리 없이 GET/POST 양쪽 모두 사용할 수 있을 것이다. 참고로, %xx 형식으로 escape된 것은 직접 unescape 해 주어야 한다.

그런데, multipart/form-data로 encoding 된 데이터가 넘어올 때는 상당히 곤란하다. 뭔가 많이 복잡해진다는 것을 저 cgi를 통해 확인할 수 있을 것이다. 하지만 파일 업로드를 포기할 수는 없는 노릇. 이럴 때를 위해 누군가가 강력한 라이브러리를 만들어뒀다.

cgilib이라는 라이브러리인데, cgilib 홈 페이지에서 자세한 정보를 접할 수 있다. ...고는 하지만, 뭔가 문서가 부족하다. 하지만 cgilib 자체가 워낙 가볍고 작은 라이브러리인지라, 일반적으로 설치하면 cgi.h 파일이 /usr/include에서 발견되는데 이 파일을 열어서 내용을 보면 금방 이해할 수 있다. cgiInit()로 넘겨진 parameter들을 준비시켜서 cgiGetValue(), cgiGetFile()로 받아오면 된다.

다음은 2차원 갤러리 CGI 소스의 일부분이다.

약간의 문제가 있는지, multipart/form-data로 인코딩된 경우 패러미터의 앞에 개행문자가 포함돼서 분석하기 어렵길래 cgiGetValue2()를 만들었다. 이 함수가 하는 것은 s/^\s+|\s+$//g 를 수행한다.

참쉽죠?

'프로그래밍 > C' 카테고리의 다른 글

SEED Cryptography Implementation for GCC  (0) 2013.04.08
C로 CGI를 만들어 보아요  (0) 2010.05.11
2D 갤러리 cgi 완성  (0) 2010.05.11
binary graphic counter by C  (1) 2010.05.11
counter cgi  (0) 2010.05.06
일반 창을 위젯화 시키는 Widgetizer  (0) 2009.10.22
C, CGI
2010. 5. 11. 13:49

요즘 급 cgi 만드는 일이 많아졌다 -_- 그것도 제일 만들기 구린 C로.....-_-;;;

어렸을 때 perl로 cgi 찌그덕 거리던 시절에는 하나의 꿈이었는데, 해보니 로망이고 뭐고 삽질일 뿐이다. 남는 것은 “아, 이렇게 이쁘게 삽질해서 구덩이를 팠구나!” 정도?

막 다 짰는데, 관리용 frontend가 없어서 아직 부실하다. 이거 만들어지고 주석 다는 대로 올려봐야겠다.

기능은,

  • 위치를 지정하여 그 포인트에 사진을 달 수 있음(지도에 표시하는 형식으로 활용가능)
  • 많은 부분이 customize 가능함
  • 실질적으로 작동하는 cgi는 xml 데이터를 내어놓기 때문에 frontend가 꼭 웹페이지일 필요가 없음
  • db backend 선택가능(이라고 해봐야 구현된건 sqlite3밖에 없다.)
  • thumbnail 생성(64x64로 생성하고, 가로세로 비율을 찌그러뜨리지 않음)
부족한 점(앞으로 수정 안할지도...)
  • 관리용 UI 없음: 이 부분은 앞으로 추가할 것임
  • 모든 사진 목록을 한번에 화면에 뿌려줌: 속도 저하 가능성 있음
  • 공지사항처럼 올리는 사람만 올릴 수 있고, 관리용 비밀번호는 1개로 공통 사용
  • C로 짜여저 완벽한 cross-platform이 되지 않음
테스트 해 본 환경은 linux x64와 Solaris SunOS 5.9에서 테스트 해 봤는데, 큰 무리 없이 돌아간다.

'프로그래밍 > C' 카테고리의 다른 글

SEED Cryptography Implementation for GCC  (0) 2013.04.08
C로 CGI를 만들어 보아요  (0) 2010.05.11
2D 갤러리 cgi 완성  (0) 2010.05.11
binary graphic counter by C  (1) 2010.05.11
counter cgi  (0) 2010.05.06
일반 창을 위젯화 시키는 Widgetizer  (0) 2009.10.22