MozillaのNSSを使いたい5 - サンプルコード vfyservを少し改変 [プログラミング]
MozillaのNSSというSSLなどを使うライブラリですが、これを使ってGmailのTLSにつなごうとしました。とりあえず出来たのですが、サンプルソースに手を加えたので少々説明を。
NSSのソースはここ
ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/
新しくて、NSPRが付いているやつを取ってきてください。
その中のmozilla/security/nss/cmd/vfyserve を変更していきます。
改変とはいえ、ほとんどオリジナルのままです。送受信の部分を、元々は"GET /testfile HTTP/1.0\r\n\r\n"というデータをリクエストをしているのですが、それをPOP3用に変更しているだけです。
基本的な送受信のところは、vfyservというソースでできているので、その他の細かい事に気をつければ問題ありません。ダイナミックリンクライブラリが完成するまでが大変なんですけどね。まぁそれはさておき、改変した場所ですが、
handle_connection( )の中の、PORT_Alloc( )を呼んでいる以降に、
ってやるだけです。地道にリードライトを繰り返すわけですね。あとは
./vfyserve -p 995 pop.gmail.com
で動作するはずです。ライブラリを見られる場所においておくのもお忘れなく。
これだけで充分ですが、必要じゃない事をやっているところもありそうなので、そこのところはどうにかしないといけないとは思います。
OpenSSLより使われてない一番の理由は、コンパイルしにくいところなんだろうなと感じます。内容としてはそんなに悪いというわけではないだろうし、特にクライアントは実績があるので、安心して使えるのでしょう。
出来たはいいのですが、正直、OpenSSLでのメモリリークがなくなってしまったので、Mozilla NSSを別途組み込むかどうかというのが必然性がなくなってしまいました。どうしようかなぁ。ここまでやったから、gitに別ブランチ作って組み込んで、何かが起こるまで取っておこうかなぁ。何にしても手に余るものではない事は判明したので、OpenSSLが嫌だとか、Mozillaが好きな人は使ってみてはどうでしょうか。サンプルソースも色々あるので、しち面倒臭い事もかなり出来るはずです。
NSSのソースはここ
ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/
新しくて、NSPRが付いているやつを取ってきてください。
その中のmozilla/security/nss/cmd/vfyserve を変更していきます。
改変とはいえ、ほとんどオリジナルのままです。送受信の部分を、元々は"GET /testfile HTTP/1.0\r\n\r\n"というデータをリクエストをしているのですが、それをPOP3用に変更しているだけです。
基本的な送受信のところは、vfyservというソースでできているので、その他の細かい事に気をつければ問題ありません。ダイナミックリンクライブラリが完成するまでが大変なんですけどね。まぁそれはさておき、改変した場所ですが、
handle_connection( )の中の、PORT_Alloc( )を呼んでいる以降に、
numBytes = PR_Read(sslSocket, readBuffer, RD_BUF_SIZE); puts(readBuffer); puts("送信"); numBytes = PR_Write(sslSocket, "USER ユーザー名\r\n", strlen("USER ユーザー名\r\n")); puts("受信"); numBytes = PR_Read(sslSocket, readBuffer, RD_BUF_SIZE); puts(readBuffer); numBytes = PR_Write(sslSocket, "PASS ぱすわーどだぉ\r\n", strlen("PASS ぱすわーどだぉ\r\n")); numBytes = PR_Read(sslSocket, readBuffer, RD_BUF_SIZE); puts(readBuffer); numBytes = PR_Write(sslSocket, "STAT\r\n", strlen("STAT\r\n")); numBytes = PR_Read(sslSocket, readBuffer, RD_BUF_SIZE); puts(readBuffer); numBytes = PR_Write(sslSocket, "UIDL\r\n", strlen("UIDL\r\n")); numBytes = PR_Read(sslSocket, readBuffer, RD_BUF_SIZE); puts(readBuffer); numBytes = PR_Write(sslSocket, "LIST\r\n", strlen("LIST\r\n")); numBytes = PR_Read(sslSocket, readBuffer, RD_BUF_SIZE); puts(readBuffer); numBytes = PR_Write(sslSocket, "QUIT\r\n", strlen("QUIT\r\n")); numBytes = PR_Read(sslSocket, readBuffer, RD_BUF_SIZE); puts(readBuffer);
ってやるだけです。地道にリードライトを繰り返すわけですね。あとは
./vfyserve -p 995 pop.gmail.com
で動作するはずです。ライブラリを見られる場所においておくのもお忘れなく。
これだけで充分ですが、必要じゃない事をやっているところもありそうなので、そこのところはどうにかしないといけないとは思います。
OpenSSLより使われてない一番の理由は、コンパイルしにくいところなんだろうなと感じます。内容としてはそんなに悪いというわけではないだろうし、特にクライアントは実績があるので、安心して使えるのでしょう。
出来たはいいのですが、正直、OpenSSLでのメモリリークがなくなってしまったので、Mozilla NSSを別途組み込むかどうかというのが必然性がなくなってしまいました。どうしようかなぁ。ここまでやったから、gitに別ブランチ作って組み込んで、何かが起こるまで取っておこうかなぁ。何にしても手に余るものではない事は判明したので、OpenSSLが嫌だとか、Mozillaが好きな人は使ってみてはどうでしょうか。サンプルソースも色々あるので、しち面倒臭い事もかなり出来るはずです。
タグ:freesoft
コメント 0