2ch 風にリンク張れるようにしてみました。^(>>|@)\d+ は リンクが張られます。ただ、2ch のように数字に identify を 持たせたくないなぁ。 >>1453 さんの言うように…してみたところ、うまく動きました とかはちょっと嫌。 >>1455 rosegarden さん > 論点ずれた挙げ句に大量のゴミみたいな > メッセージを書き込んでしまい申し訳ありませんでした。 いいえ〜。こういう機会でもないとなかなかソース 読まないタチなので、この手の話は歓迎です。 ちなみに僕はデバッガ使えないようなレベルなので (bt しか知らない)、今後ともいろいろと御教示下さい。 >>1449 kiki@TL さん > GNOME+enlightenmentで すいませんが、GNOME も E も KDE もほとんど使ったことが ありませんので、僕はわかりません。 |
こんにちは。 >>1441のmerryです。 68userさん >>1444で質問に答えていただきありがとうございます。 rotateを調べてみたいと思います。 |
こんにちは UNIXでsendmailを使ってメールを送信するスクリプトを Perlで作ろうと思っているのですが、 添付ファイルを付けることは可能なのでしょうか? よろしくお願いします。 |
はじめまして。 crontabで毎日12:00にabcというスクリプトを 起動するといった設定を現在しているんですが、 これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させるっていう 方法はあるんでしょうか? 教えていただきたく。 |
初めまして、辻 です。 HTTPでGETするプログラムを作成しています。HTTP クライアントを作ってみよう(4) を参考にさせていただいて、URLのエンコードしようとしています。 で、 /~user/hoge.cgi?fuga=ABC!"$ DEF+ が /%7euser/hoge.cgi?fuga%3DABC%21%22%5C%24+DEF%20 と書かれています。自分で作ったプログラムで確かめてみると、 /%7euser/hoge.cgi?fuga%3dABC%21%22%24+DEF%2b となりました。 また、URLのエンコードの対象はURL全てですか?それとも、CGIとかで使われる、?の後ろのみなのでしょうか?~が含まれるので、そんなことはないでしょうが。?そのものは、対象にならないようですし、ファイル名に@等がついてたりしたらどうなるのでしょうか? ちなみに、 string yHttpGet::UrlEncode(string url) { char buff[10]; for(int i=0; i<url.length(); i++) { char c = url.at(i); if(((c <'0') || ('9' < c)) && ((c < 'a') || ('z' < c)) && ((c < 'A') || ('Z' < c)) && ('/' != c) && ('?' != c) && (' ' != c) && ('_' != c) && ('-' != c) && ('.' != c) && ('*' != c)) { sprintf(buff, "%%%02x", c); url.replace(i, 1, buff); } else if(c == ' ') { url.replace(i, 1, "+"); } } return url; } 今のところ、このようなコードを書いています。 |
@1458 masa さん > UNIXでsendmailを使ってメールを送信するスクリプトをPerlで作ろうと > 思っているのですが、添付ファイルを付けることは可能なのでしょうか? モジュールが使えるなら http://www.parkcity.ne.jp/~chaichan/qanda/qa425.htm?00-12-13-19-49 で、ふじさんが述べておられる方法がお勧めです。 @1459 M.K さん > これを最終金曜日だけ11:00起動でそれ以外は12:00に起動させる > っていう方法はあるんでしょうか? 少なくとも FreeBSD の crontab では、それを実現する簡単な 方法はありません。 金曜日の 11:00 毎日 12:00 という二つのエントリを作って、スクリプト内で 最終金曜日で12時台なら、処理終了 金曜日 && 最終金曜日でない && 11時台なら、処理終了 とするのがいいでしょう。 試してませんが、*BSD や GNU の date なら、 date +%m … 現在の月を求める date -v+7d +%m … 一週間後の月を求める を利用して 0 11 * * 5 [ `date +%m`!=`date -v+7d +%m` ] && run-script 0 12 * * * [ `date +%w'!='5' -o `date +%m`!=`date -v+7d +%m` ) ] && run-script てなことが可能かもしれません (条件合ってるかな?)。 @1460 辻さん foo.cgi?.... という GET 形式は、? 以降の文字が QUERY_STRING (疑問符文字列) という名前で取り出せることからわかるように、 ? はエンコードする必要はありません。疑問符であることが重要なのです。 > URLのエンコードの対象はURL全てですか? 全て、というかパス (/~user...) も含めてエンコードが必要です。 ただし、引数を渡したい場合は ? はエンコードしません。 でなくて、ファイル名の一部に ? が含まれる場合は エンコードが必要です。 この掲示板の上にある発言フォームから文字を入力すると、 Name … 68user Email … 68user@X68000.startshop.co.jp Message … ほげほげ というような、対応関係が生まれます。このようなフォームで 生成されたデータを POST で送るとき、クライアントは application/x-www-form-urlencoded という mime type で 送信しなければいけません。「HTTP クライアントを作ってみよう」 では手抜きして送ってませんが、本来は送るべきです。 で、GET の場合も同様に x-www-form-urlencoded 形式ならば ?foo=bar は ?foo=bar でよいです。= は URL エンコードしません。 しかし、そうではなく 「foo=bar」という引数を渡したいのなら ?foo%3Dbar となります。 というふうに、本当は /~user/hoge.cgi?fuga=ABC!"$ DEF+ という例だけでは、どこをエンコードすべきかは明確には なりません。なので、あの解説はあまりよろしくないですね。 例えば hoge.cgi?foo=bar&def=ghi は、フォームに foo、 bar という要素があるならこのまま送ればよいですが、 foo=「bar&def=ghi」という意味なら foo=bar%26def%3Dghi」 とすべきです。どちらなのかは hoge.cgi?foo=bar&def=ghi だけでは正確には判断できません。 |
こんばんは、質問をした本人のレスが遅れて申し訳ありません。 (しかも、ソースまで見て頂いて恐縮です。) >サーバアプリケーションの名前を教えてください。qpopper ですか? 一般のプロバイダで実験したので、わかりませんでした。 今度他の qmail, sendmail が動いているサーバーで実験してみます。 さて、私も手元にあった、qpopper3.0.2 のソースを眺めてみました。 (POP_TERMINATE は '.' buffer は buffer[MAXMSGLINELEN] (MAMSGLINELEN=1024) と宣言されています) pop_sendline ( p, buffer ) POP * p; char * buffer; { char * bp; /* * Byte stuff lines that begin with the termination octet */ if ( *buffer == POP_TERMINATE ) (void)fputc ( POP_TERMINATE, p->output ); /* * Terminate the string at a <NL> if one exists in the buffer */ bp = index ( buffer, NEWLINE ); if ( bp != NULL ) *bp = 0; /* * Send the line to the client */ (void) fputs ( buffer, p->output ); /* * Put a <CR><NL> if a newline was removed from the buffer */ if ( bp != NULL ) (void) fputs ( "\r\n", p->output ); } これをみると、やはり、\n がなければそのまま出力されて しまうようですね。なんとなく、最初から、\n があることを 想定しているような感じも受けます。 |
68user さん、何度もありがとうございます。 私は、HTMLにある<A>タグでリンクされているHTMLをGETするプログラムを作っています。フォームに関わるCGIを作ってるわけではないのですが、リンク先が掲示板で?で引数を渡すリンクがある場合は、正しく渡して、取り出したいと考えています。 この場合、GETなのか、POSTなのかはわからないのですが。ブラウザがフォームからの結果以外で単純にリンクから、ページを読み込むときは、GETを使っているのだと思うので、GETでいいのですか? で、よくわかっていないのですが。この場合も、URLを%とかでエンコードすべきかは判断できないのですか?ブラウザはやっているように思えるのですが。。。 |
行頭に「>>1461」または「@1461」と書くと、 >>1461 68user というふうにリンクを張るようにしました。このとき、自動的に リンク先の発言者の名前を補完します。「さん」付けは なしですが、御了承下さい。 また、「>>1461 ほげほげ」と、数字の後に何かを書くと、 >>1461 ほげほげ とリンクだけが張られ、名前の補完はされません。しかしスクリプトが どんどん汚くなってきた…。brush up が必要だなぁ。 >>1463 辻 義一 > GETでいいのですか? foo.cgi?hoge.. という形式なら GET でよいです。 要は、HTML を読んで <A HREF="foo.cgi?hoge=fuga">..</A> という 部分から foo.cgi?hoge=fuga という文字列を切り出した場合、どこを エンコードすべきかということですよね。普通は何もエンコードせず デコードせず、そのまま使えばいいと思います。アンカーに書く URL は既に URL エンコードされているはずだからです。 それを無理にエンコードする必要はないですが、あえて行うならば ?=&%#/.-*_ 以外の記号と 0x80〜0xff はエンコード、でいいのでは ないでしょうか。 >>1462 nac > これをみると、やはり、\n がなければそのまま出力されて > しまうようですね。 そうですね。POP3 サーバとしては、本文の行がどれだけ長くても、 改行は付加しないのが普通ではないかと思います。基本的にクライ アントにデータを流すだけですから。 |
>それを無理にエンコードする必要はないですが、あえて行うならば >?=&%#/.-*_ 以外の記号と 0x80〜0xff はエンコード、でいいのでは >ないでしょうか。 html の文法的には hoge.cgi?foo=1&bar=2 は hoge.cgi?foo=1&bar=2 と書くそうなので、そういった html の文字参照の変換は 必要になるかも知れません。例えば、$ とか…。 |
68user さん。 ありがとうございます、エンコードもデコードもしなくて良いと言うことですか。楽は楽なのですが。~もそのままで良いのかな。。今のプログラムでGETできているので、このままで行こうかと思います。 rosegarden さん。 その変換について走っていますが、、タグ内の文字列(""で囲まれた部分)までは適用しなくても良いと思うのですが。しているのも見たことありませんし。 |
>>1466 辻 義一さん http://www.ne.jp/asahi/minazuki/bakera/html/opinion/ampersand が、良くまとまっています。ご参考まで。 ※ 僕のサイトは、どうしてたかなぁ・・・ |
たまたま、この件で大ハマリしてました (1時間悩んだ)。 http://X68000.startshop.co.jp/~68user/tmp/amp.html FreeBSD jman へのリンクを張ろうとしていたのですが、 上のリンクは mroff.cgi?.....&dir=jpman-4.2.0%2Fman§=8 と書いていますが、うまくいきません。よく知りませんが、&sec か § という実体参照があるのでしょう。で、ブラウザ (FreeBSD+NN4.75) がその文字に置き換えてリクエストを送るので、mroff.cgi 側に こちらの意図したデータを渡せないのでしょう。 下のリンクは mroff.cgi?.....&dir=jpman-4.2.0%2Fman&sect=8 としているので OK です。 うちのページは何も考えず & のままにしていますね。いかんなぁ。 |
>>1467 (自己フォロー) http://www.asahi-net.or.jp/%7Ejy3k-sm/i_net/url.html にも、色々あります。 >>1468 68user 雨が降って、ひまなので、ついでに、調べてみました。 http://www.w3.org/TR/REC-html40/sgml/entities.html によると、sectはsection signだそうです。 因みに、win98/IE4,NN4では§、bidi-mozilla(11-13)では%A1%F8 になりました。 |
どうも、お世話になります。 最近、DNSの勉強していて、試しに立ててみようと 思っています。(Redhat Linux) そこで、質問なんですけど、 ・ダイヤルアップ接続でDNSサーバは動かせますか? #もちろん一時的でいいんで‥ ・DNSサーバで必要なものは何でしょうか? 気をつける点等.. #そういうHPを知っていたら教えて下さい。 よろしくお願いします。 |
>・DNSサーバで必要なものは何でしょうか? 気をつける点等.. >#そういうHPを知っていたら教えて下さい。 Linux-HOWTO で詳しく書いたものがありましたよ。 |
>>1471参照 ついでだったので、調べておきました。 http://www.linux.or.jp/JF/JFdocs/DNS-HOWTO.html JF インストールすれば大抵入っています。 |
rosegardenさん有難う御座います。 教えてくれたページを見て勉強します。 これからもよろしくお願いします。 |
ども。お世話になってます。 管理モードのパスワードとかって、普通crypt()でハッシュしますよね。 でもDESの場合辞書アタックとかで簡単に破られちゃいますよね。 なのでmd5(md5sum)コマンドで「4fcf95ef97e1b7b248698bca83781902」みたいに ハッシュしているのですが、これはcrypt()のDES、MD5($1$...$)と比べてどっちが セキュリティ的によろしいのでしょうか。 |
URLエンコードの件ありがとうございました。 URIですか?に&をそのまま入れているページはたくさんあります。自分のホームページ上のCGIもそうだし、検索エンジンとかもそう。修正しようか迷っています。登録されている実体参照と重なっていないようなので、事実上大丈夫なのでしょうが。勉強になりました。これを、CGIに反映させるかは迷っているのですが。 現在作っているプログラムでは、色々動かして問題がないようですので、このままにしておきます。ブラウザでも正しくエンコードされていない、ページを開くときに支障があるぐらいですから、こちらで変換すれば上手く出来そうですが、ページの責任と言うことで。終わらせます。 ありがとうございました。 今回は、 |
こんちはーっす。 ず、ずいぶんまえに、ここに(そのときとはURL違うような気もするが) 永久保存版の過去ログなかったっすか? 久しぶりに見たくなって検索したのですが・・・・ 最近行ってないけどtestボードまだ、げんきなのかなー・・・・ |
>>1474 ぷに辻 > 管理モードのパスワードとかって、普通crypt()でハッシュしますよね。 DESやmd5を1方向関数として使用している点は了解していると仮定します。 (余談1 ハッシュ関数と1方向関数は同義と言ってもよいですが、一応別物です。 1方向関数は(結果的に)ハッシュ関数ですが、逆は必ずしも真ではありません。 moduloはハッシュ関数ですが、出力から元の値が容易に推測可能なので良い1方向関数ではありません。) > でもDESの場合辞書アタックとかで簡単に破られちゃいますよね。 辞書アタックと言っているのは、1方向関数でエンコードされたパスワードを奪われて、それに対して、しらみつぶしにパスワードを探索していると仮定します。 (余談2 暗号化パスワードと呼ぶ場合もありますが、復号化するわけではないので、誤用に近いと思っています。) 辞書アタックは、ワードを同じ1方向関数でエンコードして、マッチするものを探すことですから、同じ長さのパスワードなら、探索にかかるコストは、DESでもmd5でも大差無いと思います。 ただ、DESの場合、鍵長が56bitで、パスワード自体を鍵に使うことで(本来、暗号化アルゴリズムであるDESを)1方向関数にしているので、パスワードの長さが8文字に制限されます。 md5は(本来から1方向関数で)元データの長さに(現実的な)制限はないので、もっと長いパスワードが選べます。 この差は大きいですが、弱い(or 短い)パスワードを使っている限り、辞書アタックに対する強さは変わらないと思います。 (辞書アタック以外の探索法に対する強さは分かりません。 DESが簡単に破られる、と言っているのは、3年ぐらい前(もっと前?)のRSAコンテストで、約半年かかって破られたことを根拠にしていると思いますが、逆に言えば、未だ辞書アタックしか有効な手が無いという辺り、腐ってもDESと思わせるものもあります。) |
>>1476 SabaCurry > 永久保存版の過去ログなかったっすか? はい、ありました。半永久保存版は1997年9月16日だけですが、 一応 1997/9/29〜1998/09/20 の分は保存してあります。 データはありながらも閲覧用 CGI スクリプトがどっか行っちゃって 見られない状態が続いてましたが、さきほど発掘してきました。 見てたら恥ずかしくなったので (笑)、URL はメールで送ります。 そのうちアナウンスもなくひっそりと公開します。 >>1474 ぷに辻 > crypt()のDES、MD5($1$...$)と比べてどっちがセキュリティ的に > よろしいのでしょうか。 md5 より crypt+md5 の方が、salt という仕組みがある分 強固ではないかと思います。推測にしか過ぎませんが。 >>1477 gixs > RSAコンテストで、約半年かかって破られたこと 専用ハードウェアを使うと、56bit DES 解読に要する時間は 22時間くらいでしたっけ。剣呑剣呑。 |
>>1478 68user > URL はメールで送ります。 From: MAILER-DAEMON@lala.v3.com (Mail Delivery System) <tetuya@i.am>: unknown user: "tetuya" ということで、メールが送れませんでした。 |
>>1478 68user さん >md5 より crypt+md5 の方が、salt という仕組みがある分 >強固ではないかと思います。推測にしか過ぎませんが。 そう言えば、perl スクリプトなどから crypt 使うと FreeBSD の最近の RELEASE では DES で決めうちになっていることが多いようです。 ことに 4.1.1-RELEASE 以降の暗号解禁リリースの話です。 無論 DES 入れなければ、MD5 ですが。 システム全体では、切替え用のライブラリ関数もあって DES と MD5 を切替えて使えるのに perl が FreeBSD の切替えメカニズムに追従できていないようなんです。 それともできるのかな?ご存知の方いたらスクリプトレベルでの 切替え法を教わりたいです。 断定はしませんが、ソースをちょっと見た印象として、 -current は、login.conf で切替えられて、 デフォルトは MD5 です。今の所。4-stable は DES 入れると 有無を言わさず DES みたいですね。 |
>>1480 参照 >ことに 4.1.1-RELEASE 以降の暗号解禁リリースの話です。 正確にはDES が気軽に使えるようになったのは 4.0-RELEASE からですね。 |
>>1480 rosegarden > システム全体では、切替え用のライブラリ関数もあって > DES と MD5 を切替えて使えるのに perl が FreeBSD の > 切替えメカニズムに追従できていないようなんです。 あ、そうなんですか。全然知りませんでした。 /usr/lib/libcrypt* -> libscript* というリンクなら MD5、 /usr/lib/libcrypt* -> libdescript* なら DES、くらいの切り替え方法しかないのかと思ってました。 4.2-BETA (make world しなきゃな〜) のソースを見た限りでは よくわからなかったのですが、切り替え用ライブラリ関数とは どれのことでしょうか? |
>>1480 参照 >今の所。4-stable は DES 入れると有無を言わさず DES みたいですね。 ちょっと調べて見たら、意外に以前のバージョンで変更されていますね。 知らなかった。 green 2000/08/21 19:15:54 PDT Modified files: (略) usr.bin/passwd local_passwd.c usr.sbin/pw Makefile pw_user.c Log: Add working and easy crypt(3)-switching. Yes, we need a whole new API for crypt(3) by now. In any case: Add crypt_set_format(3) + documentation to -lcrypt. Add login_setcryptfmt(3) + documentation to -lutil. Support for switching crypt formats in passwd(8). Support for switching crypt formats in pw(8). The simple synopsis is: edit login.conf; add a passwd_format field set to "des" or "md5"; go nuts :) Reviewed by: peter ちなみに RELENG_4 だと変更のタイムスタンプは 2000/09/20 04:19:56 PDT 見たいですね。ちょうど、4.1.1-RELEASE のでる前後ですね。 >>1482 68user さん >4.2-BETA (make world しなきゃな〜) のソースを見た限りでは >よくわからなかったのですが、切り替え用ライブラリ関数とは >どれのことでしょうか? 答えは上の commitlog を御覧ください。crypt_set_format ですね。 |
失礼しました。転送メールがうまくいってない(?除名された? みたいなので よければ、こちらの方にURLを教えていただけないでしょうか? 久々にセガの過去ログなど見て、懐かしさにひたってしまいました。 |
>>1477 gixs >>1478 68user gixsさん、68userさんありがとうございました。 > md5 より crypt+md5 の方が、salt という仕組みがある分 > 強固ではないかと思います。推測にしか過ぎませんが。 なるほど。では全部のスクリプトcrypt+md5に変えようと思います。 # gixsさんのは難しすぎて僕には分かりませんでした(汗) |
> # gixsさんのは難しすぎて僕には分かりませんでした(汗) 説明する側の落度です。精進します。 >> md5 より crypt+md5 の方が、salt という仕組みがある分 >> 強固ではないかと思います。推測にしか過ぎませんが。 正しいと思います。 下のぼくの(分かりにくい)説明は、crypt+des vs. crypt+md5の話です。 結論は、パスワード長が同じなら辞書アタックに対する強度に差はないだろう、ということです。 saltありなしに関する余談は・・・、また分からないと言われるのが恐いので止めます。 |
>>1483 rosegarden > システム全体では、切替え用のライブラリ関数もあって なるほど。crypt(3) の切り替えではなく、passwd(1)/pw(1) で 使用される crypt ライブラリのフレームワークが追加された ということですね。 > perl が FreeBSD の切替えメカニズムに追従できていないようなんです。 > それともできるのかな? perl も libutil 使えばいいのにってことでしょうか。 でも #ifdef __FreeBSD__ を埋めこむようなものなので (埋めこまないけど、意味としては同じ)、仕組みとしては 美しくないですねぇ。 ここらへんのもどかしさが Yes, we need a whole new API for crypt(3) by now. と言わせるのでしょうか。 > スクリプトレベルでの切替え法を教わりたいです。 安直ですが、MD5 っぽい salt を渡すのはどうでしょう。 % perl -e 'print crypt("secret","salt")."\n"' saHW9GdxihkGQ (DES) % perl -e 'print crypt("secret","\$1\$salt\$")."\n"' $1$salt$ez2vlPGdaLYkJam5pWs/Y1 (MD5) >>1484 SabaCurry > よければ、こちらの方にURLを教えていただけないでしょうか? はい、後ほど送ります。 |
マルチプロセスがよく分かっていませんので お願いします ... 今fork関数を使い,二つのプロセス, 1)表示画面にイヴェントが発生したら処理するプロセスと 2)時間監視を行っているプロセス を作成しました. 2)は,ある時間の条件でXtOpenDisplayでメッセージ画面が表示し,OKボタンが押させるか画面右上のXボタンが押されると,メッセージ画面が消えます.しかし,メッセージ画面が複数個,表示されるのに,一画面を消去するだけで,全てのメーッセージ画面が消去されてしまいます. その為,複数プロセスにしよう ー 3つのメッセージ画面が表示されたら,3つのプロセスが 動いている − フ゜ロク゛ラムを作成中なのですが,3つ出力されればいいのに6つ(3つx2回)出力されたり,.... 何か簡単に作成できる方法はないでしょうか? execl命令などを使わずに簡単にできませんでしょうか. |
>>1487 68user さん >安直ですが、MD5 っぽい salt を渡すのはどうでしょう なるほど、salt をかえればいいんですね。言われて見れば、 確かにそうですね。もっとも、言われるまでは気が付きませんでしたが。 どうもありがとうございました。 |
>>1488 Qさいとう > 今fork関数を使い,二つのプロセス, > 1)表示画面にイヴェントが発生したら処理するプロセスと > 2) 時間監視を行っているプロセス > を作成しました. X サーバとの通信の実態は、ソケット経由でのデータのやりとりです。 大抵は (同一ホスト内なら) /tmp/.X11-unix/X0 経由です。 # つまり UNIX ドメインソケットを使う。 で、ソケットを作成したあと fork して、複数のプロセスが ソケット共有するのは多分うまくいかないでしょう。 # そういう構成であるとは書いてありませんので推測ですが。 クライアント→サーバは OK かもしれませんが、サーバ→ クライアントのデータは親プロセスか子プロセスのどちらに 渡るかが決まっていないからです。 というわけで、そもそも構成がまずいと思います。1プロセスで できませんか? Xt は知らないのですが、何かコールバック関数を 登録できる仕組みがあると思います。 仮に複数プロセスでやるとしても、X サーバと接続する前に fork して、片方は X サーバとの通信、もう片方は監視などと 役割分担し、両プロセスの間はパイプやシグナルやソケット経由で やりとりすべきでしょう。 >>1487 68user >> よければ、こちらの方にURLを教えていただけないでしょうか? > はい、後ほど送ります。 あ、まだ送ってなかったかもしれない。今日明日はちょっと 無理かもしれないので、すいませんが気長にお待ちくださいませ。 |