68user's page 掲示板

Prev< No. 1207〜1273> Next  [最新発言に戻る] [過去ログ一覧]
No. 1207 # 68user 2000/09/29 (金) 09:39:23
> 「コールバック」という言葉じたいの
> 定義が本によってあやふやな気がして、、。
その本の記述例を見せていただけますか?

No. 1208 # ふくし [E-mail] 2000/09/29 (金) 13:17:13
すいません、、。

−−−−−−−−−−−−−−−
「Perl 5 パワフルテクニック大全集」(インプレス)
、、コード参照は、おもに、コールバック関数(後で呼び出してもらう関数)を指定するときに使う。、、

#! /usr/local/bin/perl

# コールバック関数の定義
sub callback
{
        my $mesg = shift;
        print "$mesg\n";
}

# 関数への参照を作成
my $coderef = \&callback;

# 異なるパラメータで関数を呼び出す
&$coderef("Hi Mike!");
&$coderef("How are you?");
−−−−−−−−−−−−−−−−−−−−
「Perl 5 マスターブック」(翔泳社)

サブルーチン関数の一般的な用途としてはコールバック関数があります。コールバック関数では、サブルーチンの配列をテーブル内に作成し、Perl プログラムから1つまたは複数呼び出します。、、

sub central_greeting {
        print "Hello!";
}
sub eastern_greeting {
        print "Yo!";
}
sub western_greeting {
        print "Howdy!";
}
%greetings = (
        "Central" => central_greeting,
        "Eastern" => eastern_greeting,
        "Western" => western_greeting,
)
(中略、どこの土地のひとかを $where に入れて)
$hash_ref = \%greetings;
$sub_ref = $hash_ref=>($where);
&$sub_ref();
−−−−−−−−−−−−−−−−−−−−
「実用Perlプログラミング」(オライリー)

コールバック関数とは、リファレンスとしてあちこちに渡され必要に応じて呼び出されるようなサブルーチンです。そうしたものが構文的に用意されているわけではなく、使い方としての名称に過ぎません。呼び出す(リファレンスを使用する)側のコードでは、そのサブルーチンが何をするものかを意識する必要はありません。本節では、ディスパッチテーブル、シグナルハンドラ、描画関数の3つの例を通して、コールバック関数の使い方を説明します。
−−−−−−−−−−−−−−−−−−−−

うーん、用例にしても呼び出しのレベルがいたずらに増えてるだけで、いまいち便利になった実感が。

No. 1209 # hsj 2000/09/29 (金) 14:17:27
こんにちは。

@ふくしさん
ぼくの少ない経験でしか言えませんが、
今までぼくは「コールバック関数」(もしくはハンドラ)の名称は、
「何らかのアクションを要求した際に呼び出される関数」
に対して使ってきました。
#ボタン押下のイベントに対して呼び出されるモノであったり
#シグナルイベントに対して呼び出されるモノであったり
ふくしさんが例に出されている、それぞれの本では、
>「実用Perlプログラミング」(オライリー)
の説明がほぼ的確だと思います。
>「Perl 5 パワフルテクニック大全集」(インプレス)

>「Perl 5 マスターブック」(翔泳社)
の説明は、これらの部分だけを見ると
コールバック関数と呼ぶのはおかしいような気はしますね。
どちらかと言うと、コールバック関数として使う際に便利に呼び出せるように
準備をしているところに見えます。
あくまでもそれぞれ、コード参照とサブルーチンの説明なのではないでしょうか。

No. 1210 # 68user 2000/09/29 (金) 19:42:54
全くもって同感です<hsj さん

> 「何らかのアクションを要求した際に呼び出される関数」
あと、このアクションは「非同期に発生する」というのも
重要な要素なのかな? (違うかも)

No. 1211 # ふくし [E-mail] 2000/09/30 (土) 12:54:33
なるほどー(知恵熱)
ひとつわからないのが、Tkやシグナルハンドラのように、
そのアクションをキャッチする機構がシステムによって用意されているもの
(BASICのON命令みたいなもんですね)
だけをコールバックと呼ぶんでしょうか?
それとも、呼び出し元も自前のPerlコードで書いた例がなにかあるでしょうか?
あと非同期ってどういう意味なんでしょう。
あとなんでコールバック(電話を掛けなおすこと)っていうんでしょね。
すいませんずうずうしくお伺いして、、。

No. 1212 # 68user 2000/10/03 (火) 01:47:46
ん〜、こういうのは自分の中で納得できるかどうかなので、
うまく説明するのは僕には難しいなぁ。

> あと非同期ってどういう意味なんでしょう。
プログラム側から「いつそのアクションが起きるか」を
知ることができないということです。たとえば、マウスの
クリックがいつ発生するだとか、シグナルがいつ飛んで
くるかを、プログラムの側から予想することはできません。

> Tkやシグナルハンドラのように、そのアクションをキャッチする機構が
> システムによって用意されているものだけをコールバックと呼ぶんで
> しょうか?
そうだと思います。というより、システム (OS) の手助けを
借りなければ、非同期なアクションに応答することはできません。

signal は非同期でやってきますので、シグナルハンドラという
機構が OS にあります。

ボタンの押下は、結局は X Window System のイベントとして
socket 経由でデータが送られてきます。これは select で
データが送られてきているかどうかを調べます (たぶん)。

結局どちらも OS の手助けを借りている (=システムコール
を使う) わけです。

No. 1213 # ふくし [E-mail] 2000/10/03 (火) 03:15:10
にゃるほどー、わかりました。
非同期というのがユーザープログラムでわからない、
システムがキャッチする、
それを処理するのがコールバック、というのであれば納得できます。
あとはシグナルハンドラやTkのプログラムを勉強するなかで
勉強しようと思います。

どうもありがとうございます!>68userさん、hsjさん

No. 1214 # yuji 2000/10/03 (火) 03:49:55
FreeBSDでネットワークプログラミング(カーネル)を
しているのですが、たくさんの構造体が
でてきてすこし混乱しています。

わかりそうでわからないので
構造体を日本語で具体的に説明しているHP、本などを
知っている方がいらっしゃいましたら
どうか教えてください。HPの方がありがたいです。
乱文ですが、よろしくお願いします。

No. 1215 # UNIX見習い 2000/10/04 (水) 01:46:01
はじめまして、UNIX見習いです。

今まではke◯t氏の有名な掲示板や、ゆいチャ◯トのソース等を参考に
Perlの勉強をしていましたが、68userさんのスクリプトを見て
目からウロコが落ちた感じでした。
変数のネーミングセンスも良く、可読性も高いスクリプトを初めて見て、
今まで参考にしていた人のスクリプトって何だったんだろうと思っちゃいました。
あと、Perlでネットワークプログラミングが出来るとは知らなかったし(爆)

さっそくechoサーバのサンプルスクリプトを使わせてもらって勉強していますが、
IO::Socketを使ったechoサーバの場合、外部からのアクセスが出来なくて悩んでいます。

現在の状況は、
echo-server.pl・echo-server-fork.pl・echo-server-select.pl
は外部からのアクセスでも動きますが、
IO::Socketを使ったechoサーバのサンプルスクリプトは全部
外部からのアクセスには反応しません。localhostからだと、ちゃんと機能するのですが…。

サーバの環境は、Perl 5.005_03 on Linux2.2.14で、
echoサーバのサンプルスクリプトは全てデフォルトのまま設置です。
IO::Socketを使った場合、なぜ外部からのアクセスが出来ないのか
原因が分からずに悩んでいます。

あと、標準モジュールの使い方の学習で効果的なリソースって何でしょうか?
私の手持ちの書籍では、標準モジュールの利用に関して載っていないので
何かオススメの書籍、もしくはネット上のリソースで参考になるところがあれば
紹介していただきたいと思います。なるべく日本語のリソースで(←贅沢かな?)

長々と書いちゃってすみませんが、ご指導の程、よろしくお願いいたします。

No. 1216 # 68user 2000/10/04 (水) 02:47:24
こんどは canna が かんじに へんかんしてくれなくなりました。やれやれ、
こどもみたいな ぶんしょうだ。

> IO::Socketを使ったechoサーバのサンプルスクリプトは全部
> 外部からのアクセスには反応しません。
おお、ほんとだ。というわけで しらべてみたところ、
    LocalAddr => 'localhost',
がわるいです。

ふつう、マシンには じぶんじしんあてへのインタフェイスがあります。
これをループバックとよび、127.0.0.1 という IP アドレスがふられて
います (127.0.0.1 がループバックという きまりはありません。
(IPv4 では) ただのかんれいです)。

そして、インターネットにつながっているならば、さらにインターネットへ
つながるインタフェイスがあります。これには 210.249.139.22 のような
グローバル IP アドレスがふられています。

つまり、つうじょう、マシンには 2つのインタフェイス/IP アドレスが
あるわけです。

たいていのサーバプログラムは2つのインタフェイスを くべつしません。
しかし、くべつできるような しくみは いちおうあります。それが
    http://X68000.startshop.co.jp/~68user/net/func.html#bind
のさいごにかいてある、bind でどちらの IP あどれすをつかうかを
えらべる、ということです。

で、LocalAddr => 'localhost' は、この bind のひきすうに IP アドレス
(localhost にたいおうする 127.0.0.1) を あたえたのと おなじいみです。

これは LocalAddr をしていするときと しないときで、それぞれ
netstat -an をじっこうすると わかりやすいでしょう。
    tcp 0 0 127.0.0.1.5000 *.* LISTEN (LocalAddr してい)
    tcp 0 0 *.5000 *.* LISTEN (LocalAddr していない)
と、LocalAddr をつけると、127.0.0.1:5000 しか みていないのが
わかります。だからローカルホストからしか せつぞくできなかったわけです。


> 今まではke◯t氏の有名な掲示板や、ゆいチャ◯トの
> ソース等を参考にPerlの勉強をしていましたが、
ゆいチャットはしりませんが、kent とか rescue などと くらべられるのは
しんがいです :-)

まぁ、こっちもそんなにレベルが たかいわけではないので (こんかいの
ようなミスもあるし)、これいじょうは えらいひとからの つっこみが
こわいので いいません。

ちなみに perl って、しょしんしゃでも なんとか うごかせるから
でしょうか、うそだらけのページがおおいですね。ぼくがぜんめんてきに
しんらいしているサイトは
    http://www.context.co.jp/perlnews/
    http://www.din.or.jp/~ohzaki/perl.htm
の2つだけです。

> あと、標準モジュールの使い方の学習で効果的な
> リソースって何でしょうか?
perl モジュールガイドとかいうほんが しゅっぱんされていません
でしたっけ? しょうさいは わかりませんが。

ただ、もくてきのモジュールがわかっているならば、perldoc を
ながしよみして、けっこうなんとかなるかとおもいます。


よみにくいぶんしょうで しつれいしました。LocalAddr の
ぶぶんは、じかいこうしんじに さくじょいたします。


@yuji さん
カーネルの TCP/IP まわりのこうぞうたいのことですよね?
ぼくもしりたいです。だれかおしえて。

No. 1217 # yuji 2000/10/04 (水) 04:35:42
そうなんですよ。なかなかネットワークの構造体について
わかりやすい説明って詳しいないんですよね。
特にFreeBSDの場合は・・・
誰か知っていたら教えてください。

No. 1218 # 68user 2000/10/05 (木) 02:50:06
残念ながら、僕は知らないです。僕の持っている UNIX カーネル
関連の書籍にも、TCP/IP は載ってませんでした。

BSD Magazine No.4 に、IP の話が少し載ってますが、
構造体の説明はありません。

というわけで、解説書いて(笑)>yuji さん

No. 1219 # yuji 2000/10/05 (木) 06:27:27
そうですね。つくってみますか!
っていってもなかなか・・・
理解した分だけ作っていくのは
いいかもしれません。あとあと
役に立ちますし。
ええ、BSD Magazine No.4 に書いてありましたね。
どのような流れでデータが動いているのかは
理解するのに役に立ったと思います。

No. 1220 # UNIX見習い 2000/10/05 (木) 08:08:04
LocalAddr => 'localhost'を削除したら、外部からのアクセスに反応することを
こちらでも確認できました。
#しかし普段からLinux使ってるのにnetstatしなかった私って…ごめんなさい(汗)

それから、Perldocというものが自分のマシンに入っていることも実は知りませんでした。
昨日からネット上で検索かけまくって、やっとPerldocの存在を知りました。
さっそくperldoc -m IO::Socketして読んでみます。

68userさん、早急な解答ありがとうございました。

No. 1221 # aki 2000/10/05 (木) 10:58:31
はじめてここに書きこみさせていたただきます
よろしくお願いします。

今メーリングリストを開設しようと思っています
サーバーはLinuxで
aliasesファイルに転送先のメンバーリストファイルを指定したのですが
開かず、悩んでいます


    ----- The following addresses had permanent fatal errors -----
<aki@my-member.com>
:include: /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list
      (expanded from: <aki@my-member.com> )

    ----- Transcript of session follows -----
550 :include: /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list... Cannot open /home/sites/www.my-recruit.com/web/recruit/bin/Mailing-list/mylist-member-list: Group writable directory
554 <aki@my-member.com> ... aliasing/forwarding loop broken

--------------------------------------------------------------------------------

のようなメッセージが帰ってきます。

ファイルのパーミッションは644です

すでに1週間と一日・・・私くじけそうです・・・
もしわからる方いらっしゃいましたらお願いします。

No. 1222 # 68user 2000/10/05 (木) 11:44:03
> Group writable directory
グループが書き込めるディレクトリ、だから危険なので
実行するのはや〜めた、と言ってます。

No. 1223 # aki 2000/10/05 (木) 13:17:52
68userさんありがとうございます
パーミッションをいろいろ試したのですが・・・開きません
ファイルやディレクトリのパーミッションを
もしよろしければ、どうすればファイルを開いてくれるのか教えてください
よろしくお願いします・・・

No. 1224 # aki 2000/10/05 (木) 13:34:08
すみません、私のミスでした・・・
ディレクトリのひとつのパーミッションがおかしかっただけです
う〜んこんなこと気づかないなんて・・・
ありがとうございました〜

No. 1225 # ノリスケ 2000/10/05 (木) 14:40:19
質問させてください。
perlで、ログをファイルではなくDBMで管理するBBSを作っています。
ところが、プロセス間でDBMの排他制御を行う方法が分かりません。
もし知っていたらご教授ください。
おねがいします。

No. 1226 # aki 2000/10/05 (木) 17:00:31
申し訳ございません
もう一度同じような質問させてください
メーリングリストを作っていまして
パイプを通してプログラムに渡したのですが

----- Transcript of session follows -----
sh: mysite-filter not available for sendmail programs
554 | "/usr/local/lib/mailing-list/mysite-filter"... Service unavailable

のようなメッセージがきまして
メールがプログラムに渡っていません・・・
この場合、どのようなミスが考えられるのでしょう?

多分初歩的なミスだと思いますが
よろしくお願いします・・・

No. 1227 # tam [E-mail] 2000/10/05 (木) 17:20:21
はじめまして。

perlでradiusの認証クライアントを作成したいのですが、
perlのモジュールでAuthin::radiusというものがあって、
それを使用して作成したのですが、二重ログインしようとしてしまい、
二重ログインは不可の設定にしていますので、ログインできません。
と言う経緯で、1から作成しようと思います。
Sokcetのモジュールで、ポートを指定して、
ソケットを生成するのは一緒だと思うのですが、
radiusサーバに送るリクエストをどのように記述していいのかがわかりません。
radius サーバはDTC Radius Ver 2.03です。

どなたかご存じの方は教えていただけないでしょうか。
よろしくお願い致します。

No. 1228 # ミワ [E-mail] 2000/10/05 (木) 18:36:43
ミワと申します。
シグナルについて質問させてください。

レンタルサーバーなどでは、スクリプトが一定時間動き続けていると、
TERMシグナル?が飛んでくるよ と聞いたことがあるんですが
(クライアントがブラウザを閉じたり、中止をしたときも)
私が使っているサーバーで実験してみたんですが
全く飛んできませんでした。
無限ループとかになってしまった場合どうするのか
など心配になってきたんですが(telnetでkillすればいいんですが)、
これはサーバー側の設定がなにかあるんでしょうか?
#環境は Cobalt Linux & Apache です。

お分かりになる方、ご教授お願いします。

#実験で使ったPerlスクリプトはここにあります。
http://www.offside.ne.jp/~icon_store/sig/signal.txt

No. 1229 # 2000/10/05 (木) 20:18:05
TCP/IPの構造体についてなら
http://www.kurasc.kyoto-u.ac.jp/plasma-group/data/misc/doc/koala
にて概要はつかめるのではないでしょうか。
ただ,話がUNIXよりなのは fj.lecture だからかしらん。

No. 1230 # 68user 2000/10/06 (金) 06:32:12
@aki さん
> sh: mysite-filter not available for sendmail programs
/etc/sendmail.cf に P=/foo/bar/smrsh という部分がある
なら、P=/bin/sh として、sendmail を再起動してください。
それでもダメならわかりません。

もしうまくいったなら、see smrsh(8)。smrsh を使い続けるならば、
/usr/libexec/sm.bin/ 以下にコマンドを置くべきでしょう。

@ノリスケさん
> ところが、プロセス間でDBMの排他制御を行う方法が分かりません。
おそらく DBM には排他の仕組みはないと思います。flock/symlink/mkdir
などを使って、自前でロックするしかないと思います。

@tam さん
> perlでradiusの認証クライアントを作成したいのですが、
これはさっぱりわかりません。radius 自体あまり理解していないので…。

@の さん
> http://www.kurasc.kyoto-u.ac.jp/plasma-group/data/misc/doc/ko
じゃなくて、カーネルソースを読む際に参考になるドキュメントは
ないだろうか、という意味じゃないでしょうか。

@ミワさん
> シグナルについて質問させてください
これは後ほど。というか、忘れちゃったので実験しないと。
# 時間がないなぁ…

なお、apache では httpd.conf で、Timeout 300 などと
設定されています。

No. 1231 # ミワ 2000/10/06 (金) 15:02:16
ご教授ありがとうございます。

>なお、apache では httpd.conf で、Timeout 300 などと
>設定されています。

サーバー管理者に”TELL”シグナルを送って確認したところ
デフォルトのまま触ってないので、Timeout 300 になってるっス
という返答が帰ってきました。
なぜでしょう??
何かほかの部分がマズいのでしょうか?

よろしければ、ご教授お願いします。

No. 1232 # 68user 2000/10/06 (金) 17:01:04
基本的に、ブラウザを中断しても SIGTERM は飛んできません。
が、子プロセスがいる場合などに飛んでくる場合もあります。
前に調べたときはたしかそういう結論になったような覚えがあります。
# つまりよくわからなかったということ。

No. 1233 # aki 2000/10/06 (金) 17:30:02
68userさんありがとうございました
/usr/adm/sm.bin/ に置いたらできるようになりました!
また何かあったらよろしくお願いします。

No. 1234 # hsj 2000/10/06 (金) 19:57:43
@tamさん
RADIUSはRFCで規定されていたはずなので
認証パケットのフォーマットやプロトコルの詳細はそれを見ればわかると思います。
#ぼくはつくったことはありません
アクセスサーバとの連携が必要だと思うので、ちょっとばかりめんどくさい事に
なりそうですが・・・。

@ミワさん
ぼくも詳しくないのですがアレですが、
Apache1.3.12のソースをナナメ読みした限りでは、
タイムアウト後にSIGTERMとSIGKILLが飛んでくるように
なっているようにみえました。
で、FreeBSD4.0-RELEASE + Apache_1.3.12で実験してみたところ、
その通りに動作しているようにみえます。
#ちなみに、SIGKILLはトラップできないのが正しい動作ですね
もしかしてですが、ログをつくるディレクトリの
書き込み権限が落ちてるとかはないですか?

No. 1235 # ミワ 2000/10/06 (金) 20:38:28
@68user さん

68user さん、hsj さん、ご教授ありがとうございます。

>基本的に、ブラウザを中断しても SIGTERM は飛んできません。
>が、子プロセスがいる場合などに飛んでくる場合もあります。
>前に調べたときはたしかそういう結論になったような覚えがあります。
># つまりよくわからなかったということ。

なるほど。そうなんですか。
前に見た情報は間違っていた可能性がたかそうですね。

>もしかしてですが、ログをつくるディレクトリの
>書き込み権限が落ちてるとかはないですか?

それはlogディレクトリのことでしょうか?
私が使っているサーバーは、自分のアカウントで入ると
最初の階層にはwebというディレクトリしかないんです。
(web内はweb領域になってます)
なので、エラーログなど見たことがないんですよ。
これっておかしいですよね。
logディレクトリを作れば、その中にエラーログやアクセスログが書き込まれて
今回の問題も解決するものなのでしょうか?
(.htaccessなどで設定する?)

No. 1236 # hsj 2000/10/07 (土) 02:25:23
@ミワさん
>それはlogディレクトリのことでしょうか?
いえ、そうではなくてsignal.logが書き込まれるディレクトリです。
web(nobody?)権限での書き込みができなければ動きませんよね。
・・・が、よく考えると
>全く飛んできませんでした。
とおっしゃってますし、とくにエラーになるとも書かれてませんね・・・。
と言うわけで、コレはハズしてそうです。
かき混ぜてスミマセン。

>これっておかしいですよね。
それは、ftpdがchrootされてるのでしょう。
セキュリティの確保が目的だと思います。
#CGIが使えるんだから、あまり意味が無いと言えば無いのですが(笑

No. 1237 # ミワ 2000/10/07 (土) 03:13:05
@hsj さん
>>全く飛んできませんでした。
>とおっしゃってますし、とくにエラーになるとも書かれてませんね・・・。

エラーにはなってないと思うんですが、ちょっと自信がないです。

>それは、ftpdがchrootされてるのでしょう。
>セキュリティの確保が目的だと思います。

なるほど、セキュリティの為に意図的に設定してあるんですね。


もしかして KeepAlive は関係しているのでしょうか?
http://japache.infoscience.co.jp/japanese_1_3/manual/keepalive.html

KeepAliveがoffに設定してあると、KeepAliveTimeoutが適応されて
Timeoutに移行する という解釈でいいのでしょうか?
#はずしてそうですが...

No. 1238 # 68user 2000/10/07 (土) 18:03:37
@aki さん
> /usr/adm/sm.bin/ に置いたらできるようになりました!
で終わってしまうと、スキルアップにつながらないので、
僕がどうやって調べたかってのを書いておきます。


パーミッションを落としたりして適当にいろいろ試してみるが、
FreeBSD 4.0-RELEASE では同じエラーを出せない。

というわけで、sendmail のソースを探す
        % locate /sendmail/
どうやら /usr/src/contrib/sendmail らしい。
        % cd /usr/src/contrib/sendmail
ソースから available for sendmail という文章を探す
        % grep "available for sendmail" */*
        smrsh/smrsh.c: fprintf(stderr, "%s: %s not available for sendmail programs\n",
smrsh って何? コマンドのようだが…
        % man smrsh
「smrsh - sendmail用に制限されたシェル」だそうな。特定の
ディレクトリに置いてあるプログラムしか、~/.forward や
/etc/aliases から呼び出せないらしい。

sendmail.cf から sh か smrsh を探す
        % egrep '/bin/(sh|smrsh)' /etc/mail/sendmail.cf
        Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/,
なるほど。FreeBSD のデフォルトでは /bin/sh を使っているので
同じエラーは出ないわけね。


あと、最初に質問した掲示板に、解決したことを書き込んでおく
べきでしょう。

No. 1239 # noiz [E-mail] 2000/10/10 (火) 11:52:41
はじめまして。
よろしくお願いします。

wwwboard.cgiを拝見して、これは...! と思っていただきました。
些末なことなのですが、自分の間借のWebスペースにテスト設置してみて
気付いたことを報告します。

コメントアウトしてスクリプトのご説明をされている部分で、
ディレクトリ配置のご説明でlockとされているディレクトリ名が
my変数の定義ではlockdirとなっていました。ありがたいことに
細かく動作チェックできるのですぐに修正できましたが、為念。

---

wwwboard.cgi設置に際して、自分の方に別の問題があります。
こちらでお聞きしていいものかどうか判断せずに書き込みしていますので、
不適当であれば無視してください。

問題
スクリプトの実行権限の種別が、所有者権限(個人のアカウント名)、
nobody権限のいずれでもなくwwwの権限となる。
書き込みはできるが、生成されるログのOwnerがwwwとなり、
ぼくのアカウントではログの削除ができなくなる (^^;

ぼくの方の環境 (ISPにWebページ用の領域を間借している形態です)
・WebサーバのOS : RS/6000
・CGI設置場所の制限 : 個人のhomeディレクトリ以下であればどこでも可
・wwwboard.cgiで使用するコマンドのうちnamazuとmd5が使用不可

動作チェックの出力の結果
http://www.ad.il24.net/~noiz/bbs/wwwboard.cgi?test

No. 1240 # tam [E-mail] 2000/10/10 (火) 14:43:51
フォローありがとうございます。
radiusのこともまだ知ったばかりですので、
知らないことがいっぱいです、もっと調べなければ...

No. 1241 # has 2000/10/10 (火) 15:01:06
@noizさん
はじめまして。
私も同じ掲示板を使っています。

削除に関しては、管理モードなどの追加(自作)をするのが
一番かも妥当なのかも知れません。
掲示板のログファイルの形式を見ていただくと、
一括方式にしろ分割方式にしろ、1件ごとの書き込みは
わかりやすい形式で保存されていると思いますので、
単純なサブルーチンでもって管理可能なのではないかと思います。

# 本当はどうするのがいいですかね>68user

No. 1242 # 68user 2000/10/10 (火) 22:57:49
ああ、僕を含めて 3人目のユーザを確認。ちゃんとサポートなんか
してみたりして。

> スクリプトの実行権限の種別が、所有者権限(個人のアカウント名)、
> nobody権限のいずれでもなくwwwの権限となる。
www は nobody と同じようなものだと思ってください。そのサイト
全てのユーザの CGI が www 権限で動きますので、状況は nobody と
変わりません。

> 書き込みはできるが、生成されるログのOwnerがwwwとなり、
> ぼくのアカウントではログの削除ができなくなる (^^;
ファイルの削除ができるかどうかは、ファイルのオーナーとは
関係ありません。そのファイルの置いてあるディレクトリに
Write パーミッションがあるかどうかです。

現状では umask 002 としていますので、
    separate_log/000/ (ディレクトリ)
    separate_log/000/00001 (ファイル)
のパーミッションは、それぞれ 775,664 になるはずです。

で、OS が BSD 系ならば削除はできるはずです。なぜなら、
    separate_log/ は owner:group が 68user:realuser で、パーミッションが 757
という状況で、ユーザ www が
    separate_log/000/ (ディレクトリ)
    separate_log/000/00001 (ファイル)
を作ろうとすると、
    separate_log/000/ は owner:group=www:realuser で、パーミッションが 775
    separate_log/000/00001 は owner:group=www:realuser で、パーミッションが 664
となるはずです。親ディレクトリのグループを引き継いでいる
ところがミソですね。

ところが、SysV 系では、作成したファイル・ディレクトリの
グループは、ファイル・ディレクトリ作成者の実効 GID となるので、
仮に CGI の実行が uid:gid=www:www で行われるとしたら
    separate_log/000/ は owner:group=www:www で、パーミッションが 775
    separate_log/000/00001 は owner:group=www:www で、パーミッションが 775
となり、separate_log/000/00001 は、CGI 経由でないと
消せなくなります。
# ここらへんの動作を決める要素は、他にも sgid bit があるけど、略。
# なお、Linux だと mount 時のオプションでどちらの挙動をするかを
# 決められます。

というわけで、まずは削除ができるかどうか試してみてください。
RS/6000 の OS が BSD 系ならば消せるでしょう。

# でも多分 AIX だろうから、SysV だよなぁ…。しかし、RS/6000 を
# 使っている ISPか。金持ちだ (いくらか知らんけど)。

> 削除に関しては、管理モードなどの追加(自作)をするのが
> 一番かも妥当なのかも知れません。
へい、作りまっせ〜。何か要望があれば今のうちに言ってください。
数日経ってやる気が失せる前に (笑)

> my変数の定義ではlockdirとなっていました
こちらも直します。

No. 1243 # aki 2000/10/11 (水) 13:49:24
68userさんありがとうございました
大変勉強になりました!
おかげさまでだんだんコツがつかめてきました〜

またひとつ、同じ流れで質問させてください
メールをプログラムに落とし、perlで処理をして転送と言う簡易な処理はできるようになったのですが、
ファイルのオープン処理やファイル作成などができません
デバックではうまく出来ているのですが・・・??

よろしければまた、お願いします

No. 1244 # noiz [E-mail] 2000/10/11 (水) 15:52:51
hasさん、68userさん、ありがとうございます。

ははあ、とりあえず www 権限は nobody 権限と考えていいんですね。
68user さんのご指摘通り、生成された分割ログのパーミッションは、
ディレクトリ=775、ファイル=644、となっています。で、結論から
言って削除できませんでした (泣笑)。Web サーバは FTP ポート
しか開放されていないので、Mac/Win の FTP クライアントで
ログファイルの削除を試してみましたが、Permission Denied で
はねられました。

>> 削除に関しては、管理モードなどの追加(自作)をするのが
>> 一番かも妥当なのかも知れません。
> へい、作りまっせ〜。何か要望があれば今のうちに言ってください。
> 数日経ってやる気が失せる前に (笑)

厚かましいのですが、ぜひぜひお願いします。ぼくはプログラム全般
ぜんぜん分からないので、ログまわりの改造をしていただけると使うのに
何のハードルもなくなってありがたいです。

また質問があるのですが、検索で使用する namazu は Perl 版で良いのでしょうか?

No. 1245 # noiz [E-mail] 2000/10/11 (水) 15:54:36
煩瑣になってすいません。ログファイルのパーミッションは以下のとおりです。
×644 ○664

No. 1246 # has 2000/10/11 (水) 21:48:58
> へい、作りまっせ〜。何か要望があれば今のうちに言ってください。
> 数日経ってやる気が失せる前に (笑)
んじゃあ、キャッシュのほう、情報を表示のに加えて、
削除とかもできるようにしといてもらえますか?
# ここのキャッシュ、合計100MBってちゃんと消さないと:-p

うちの方は、携帯から見やすいようにしたり、カレンダーなどと
組み合わせてみたりといろいろいじってしまい、
追加された機能を自分のに反映するのに苦労しそうです…。

No. 1247 # 68user 2000/10/11 (水) 22:45:51
せっせと作っております。機能設計書も詳細設計書も、
テスト仕様書もないプログラミングはなんと楽しいことか…。

@has
> んじゃあ、キャッシュのほう、情報を表示のに加えて、
> 削除とかもできるようにしといてもらえますか?
あい、了解です。あと、ソース送ってちょーだいな。
採り入れられる機能は採り入れます。


@noiz さん
> 検索で使用する namazu は Perl 版で良いのでしょうか?
namazu (の一部) は C言語で書かれているため、コンパイルが
必要です。ログインできないなら、あきらめた方がよいでしょう。

# プロバイダのマシンにコンパイラがあるかどうかわからないし、
# もしあったとしても namazu 環境を構築した経験がない
# なら、とても苦労するでしょう。

簡易検索機能でも付けるかなぁ…。


@aki さん
> メールをプログラムに落とし、perlで処理をして転送と言う
> 簡易な処理はできるようになったのですが、
メーリングリストサーバを自作しているんですか?

> ファイルのオープン処理やファイル作成などができません
> デバックではうまく出来ているのですが・・・??
実行権限が違うとか、環境変数が足りないとか、原因はいろいろ
考えられますので、これだけの情報ではわかりません。

/tmp あたりに適当にファイルを作ってみて、ファイルの
オーナーを確認したり、環境変数を全部表示させたりすれば
わかるかもしれません。

No. 1248 # noiz [E-mail] 2000/10/13 (金) 12:27:43
68userさん
ありがとうございます。結局 CGI の改造をお願いすることに
なってしまいましたが、嬉しいです。

はい、namazu で検索はあきらめます :-)
でも検索機能がなくてもぼくにはもったいないくらいです。

No. 1249 # ちゃいぱ 2000/10/14 (土) 01:39:14
いつもお世話になっています。
私の質問掲示板に.htaccessのdenyについての質問がきたのですが..,。
68userさん、ちょっと見てもらえますか。よろしくお願い致します。

http://www.parkcity.ne.jp/~chaichan/qanda/qa246.htm

No. 1250 # yuji 2000/10/15 (日) 05:07:25
どうも、ご無沙汰しております、yujiです。^^
現在、ソケットファイルを作成したいのですが、
その方法がわからず、困っております。
UNIXドメインソケットファイルの使い方はいろいろなサイトに記述されて
いるのですが、根本となるUNIXドメインソケットファイルの作成の
仕方について触れているサイトを見つけることができませんでした。^^;
もしなにかご存知でしたら、どうぞよろしくお願いします。
それでは、また。^^

No. 1251 # yuji 2000/10/15 (日) 05:40:06
どうも、yujiです。^^
下の記事の訂正なのですが、
簡単にUNIXドメインソケットファイルを
作成するコマンドはないのかなと思いまして。
すいませんが、よろしくお願いします。

No. 1252 # 68user 2000/10/15 (日) 09:39:15
@ちゃいぱさん
> 私の質問掲示板に.htaccessのdenyについての質問がきたのですが..,。
> 68userさん、ちょっと見てもらえますか。
えっと、こういう形での回答依頼はご勘弁を。答えたければ
答えるし、興味がなければ/知らなければ答えない、ということで。

今回の件に関しては、既にどなたかが書いておられますが
    deny from .XXXXX.ocn.ne.jp
というふうに先頭に . を付けるか、ホスト名が逆引きされて
いないならIP アドレスでの制限をする、くらいしか思い
付きませんでしたが、
    deny from dion.ne.jp
がうまくいっているなら外れっぽいですね。後は「どうやって
うまくいかないと確認したのか。その確認方法が間違っている
のではないか」くらいでしょうか。

@yuji さん
> 簡単にUNIXドメインソケットファイルを作成するコマンドは
> ないのかなと思いまして。
多分ないと思います。FIFO (名前付きパイプ) とは違って、ソケット
ファイルはサーバ側のプロセスが必ず存在していなければいけない
ので (必ずソケットに bind されていないといけない)、仮に
「作成するコマンド」があったとしても、その「ソケットファイルを
作成したプロセス」が終了した瞬間にソケットファイルは無効となります。

# という説明でいいのかしら…。FIFO は mkfifo や mknod コマンドで
# 作れます。念のため。

No. 1253 # ちゃいぱ 2000/10/15 (日) 13:33:54
いつもお世話になっています。
> こういう形での回答依頼はご勘弁を。
すみません、ついあまえちゃって、68userさんに振ってしまう私です...。
切り札使いすぎました。以後、気を付けます。

> その確認方法が間違っているのではないか
質問者に尋ねて見ます。
いつもながら、アドバイスありがとうございます。

違う意味で、今後もよろしくお願い致します。

No. 1254 # yamama 2000/10/15 (日) 22:42:39
http://virtys.virtualave.net/cgi-bin/so.cgi
こーゆー、SNMPに外部からアクセスできるかどうかを調べるには、
どしたらいいですか?

Perlでやりたいんですが。。
UNIXのコマンドとかあるのかな?

No. 1255 # 68user 2000/10/16 (月) 02:41:56
掲示板ですが、こんな感じでどうでしょうか。
    http://X68000.startshop.co.jp/~68user/tmp/wwwboard.cgi
「管理者モード」というのを追加しました。パスワードは
「abc」です。管理者モードからは、記事の削除、キャッシュの削除、
各種カスタマイズができます。

テスト用なので、好きにいじっていただいて構いません。

has からは
> 消したいキャッシュをマークしてから[削除]とかのボタンを
> 押すと消せる、というような感じがいいです。
という要望を頂いておりますが、使いやすいインタフェースが
思い付かず、未実装です。よさげな案があれば提案してもらえますか?

動作チェック・キャッシュ情報は、web 上からの設定変更で
一般に公開しないモードにできるようにしました。

それと、管理者用のパスワードですが、CGI 経由で設定
できるようにすると、CGI が nobody/www 権限で動く場合、
どうやってもセキュリティホールが出きてしまうので、
面倒ですが直接スクリプトを手で書き換えるようにしています。

あと、ちょっと手を広げすぎて、バグがたくさん残ってますので、
現在のバージョンは未完成品です。

@yamama さん
> SNMPに外部からアクセスできるかどうかを調べる
残念ながら SNMP は全くわからないのでパスです。

No. 1256 # noiz [E-mail] 2000/10/16 (月) 11:26:47
掲示板、さっそくテスト書き込み・削除をしてみました。
管理モードで一気に堕落しそうです :-P
自分のところでもテストで設置して試してみます。

No. 1257 # hsj 2000/10/16 (月) 17:51:15
@yamamaさん
おそらく対象サーバのSNMPのポートにアクセスして、
publicで情報が引っぱれるかどうかチェックしているだけでしょう。
要はSNMPクライアントの簡易版を実装しているんだと思います。
多分コマンド一発でお手軽に、みたいなのは無いと思いますが
ほぼ決め打ちで行けると思うのでそんなに面倒でもないと思います。
もちろんperlでも可能ですが、最低SNMPの認証部分のプロトコルを
解っていなければいけないでしょうね。

No. 1258 # has 2000/10/16 (月) 18:46:50
@68user
> という要望を頂いておりますが、使いやすいインタフェースが
> 思い付かず、未実装です。よさげな案があれば提案してもらえますか?
たとえば"checkbox"を使って、
<INPUT NAME="check" TYPE="checkbox" VALUE="1">キャッシュ1<BR>
<INPUT NAME="check" TYPE="checkbox" VALUE="2">キャッシュ2<BR>
連想配列/パーサの都合で困難そうであらば、
<INPUT NAME="check1" TYPE="checkbox" VALUE="x">キャッシュ1<BR>
<INPUT NAME="check2" TYPE="checkbox" VALUE="x">キャッシュ2<BR>
なんていう風なのを想像してたんですけど、どうですかね?
# "checkbox"なのに名前が全部違うってのはきれいじゃないか…

No. 1259 # 68user 2000/10/17 (火) 01:52:31
> たとえば"checkbox"を使って、
やってみました。削除するなら最近の発言を削除することが
多いだろう、ということで
    http://X68000.startshop.co.jp/~68user/tmp/wwwboard.cgi
    http://X68000.startshop.co.jp/~68user/tmp/wwwboard.cgi?mode=admin&passwd=abc
こんな感じ。どんなもんでしょ? さらに前のは「前の50件」ボタンで
表示できるようにするつもりですが、未実装です。

あと、
  > 消したいキャッシュをマークしてから[削除]とかのボタンを
  > 押すと消せる、というような感じがいいです。
これって s/キャッシュ/ログファイル/ の typo じゃないかと
思っていたのですが、キャッシュも checkbox で選択して
消したい、ということですか?


スクリプトに書いてある「TODO」の部分が今後の課題です。結構増えました。
    http://X68000.startshop.co.jp/~68user/tmp/wwwboard.txt
というわけで、どうも2、3日中に完成しそうにはありませんねぇ。

No. 1260 # もじ 2000/10/17 (火) 12:36:08
現在、cronが自由に使えるレンタルサーバを探しています。知っている方いませんでしょうか。プロバイダは別に入っているので、ホームページ作成用として考えています。

No. 1261 # has 2000/10/17 (火) 14:48:16
@68user
> 思っていたのですが、キャッシュも checkbox で選択して
> 消したい、ということですか?
きちんと説明していなくてスミマセン。
そうです、キャッシュの削除の話でした。

ところで、発言の編集については実装なしですか?
あと、閲覧者の側から出力文字コードの指定(km=euc|jis|sjis等)が
できるようになると、携帯からも見られるようになるのでうれしいです。

> というわけで、どうも2、3日中に完成しそうにはありませんねぇ。
ゆっくりやっていただければ、と思います。
「やる気が失せた」という言葉を聞くのが一番恐いです;-)

No. 1262 # ケイ 2000/10/17 (火) 23:13:30
こんばんわ。
HTTP クライアントを作ってみようで書かれてたものを
そのままをコピーしてCGIとしてvirtualave.netに設置したんです。
そこで問題が!
設置したサーバーと同じサーバーに置かれてるファイルは
ちゃんとダウンロードできないんですよ。
404になってしまいます。
これは一体どういうことなんでしょうか?
考えられる事がありましたら教えて頂きたいです。

No. 1263 # ケイ 2000/10/17 (火) 23:14:25
書き忘れです。
他のサーバーに置かれてるファイルは
ちゃんとダウンロードすることが出来ます。

No. 1264 # CZ 2000/10/18 (水) 01:43:35
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1131から始まる一連のトピックで、同じ問題が取り上げられています。

No. 1265 # ケイ 2000/10/18 (水) 18:55:00
どうもありがとうございました。
おかげで出来ました。
過去ログに書いてあった、
セパレータが CR でも LF でも CR LF でも認識できるようにする
ってのはどうすればいいんでしょうか?
ちょっと頼りすぎですかね?(^^;

No. 1266 # あつし [E-mail] 2000/10/18 (水) 19:27:24
シスログについての質問です。
よろしくお願いします。

サーバが現在UNIXサーバ2台(サーバA、サーバB)があり、
サーバAのシスログの一部をサーバBに転送するように
syslog.confの設定を行なっています。
こうすると、サーバBに転送されるログのうち
日本後でメッセージが記述されたものは
文字化けを起こしてしまいます。
転送されないログに関しては日本語のメッセージも
うまく読むことができるのですが、、

もともと日本のメッセージを書く事自体間違って
いるのでしょうか?

解決策をしっておられる方がいましたら
よろしく御願いします。

No. 1267 # 68user 2000/10/19 (木) 00:11:13
@has
> ところで、発言の編集については実装なしですか?
> あと、閲覧者の側から出力文字コードの指定(km=euc|jis|sjis等)が
> できるようになると、携帯からも見られるようになるのでうれしいです。
キャッシュファイルを作るようにした時点で、「シンプル」なんて
形容詞はどこかに飛んでいってしまったので、こうなったら全部
実装しまっせ。

文字コードの指定ってのは、どういう風にするのがよいですか?
携帯から文字コードを指定するときに、どういうインタフェースに
したらよいか、いまいち想像できんです。

@あつしさん
> 日本後でメッセージが記述されたものは文字化けを起こしてしまいます。
UNIX と言ってもいろいろありますが、OS は何ですか?
エンコーディングには EUC/JIS/SJIS などがありますが、
どれを使っていますか? 他のエンコーディングにしても
ダメですか? あと、どういうふうに化けますか?

> もともと日本のメッセージを書く事自体間違っているのでしょうか?
どうなんでしょうねぇ。個人的には気持ち悪いので日本語は使い
ませんが、いまどき 8bit スルーじゃない syslogd もどうかと思います。

# あっちの人たちも 8bit 目が立ってる iso-8859-1 (Latin-1) を
# 使ったりしないのかしら。

No. 1268 # 68user 2000/10/19 (木) 02:14:04
おっと見逃してた。
> セパレータが CR でも LF でも CR LF でも認識できるようにする
> ってのはどうすればいいんでしょうか?
    m/^\r\n$/ and last; # 改行のみの行ならループを抜ける
で、CR (\r) LF (\n) がくるとヘッダの終了とみなしています。
なので、CR か LF のみの行でもヘッダの終了とみなすように
すればよいです。
# chomp して last if $_ eq '' でもいいんですが。

No. 1269 # 超初心者 [E-mail] 2000/10/19 (木) 10:28:35
はじめまして。
私は今、Redhat linux6.2を使用し、パスワード変更プログラムを作成しています。
expectスクリプトをCGIより起動させ、コマンドレベルでユーザーアカウントを変更しようとしているのですが、簡単すぎるパスワードだと変更することができません。端末から普通にコマンドを入力しても拒否されるpasswdコマンド。これを簡単なパスワードでも受け入れられるようにするにはどうしたらいいのでしょうか。ぜひお教えください。

No. 1270 # has 2000/10/19 (木) 12:29:13
@68user
> 文字コードの指定ってのは、どういう風にするのがよいですか?
> 携帯から文字コードを指定するときに、どういうインタフェースに
> したらよいか、いまいち想像できんです。
携帯の場合、sjisであれば日本語として表示することができるので、
USER_AGENTなどから携帯からのアクセスかどうか判定して、
勝手にsjisにしてくれる(私の場合は表示形態も切り替えている)、
ってのも便利かと思いますが、
wwwboard.cgi?km=sjis
とかって指定するのでもいいかと思います。

No. 1271 # hsj 2000/10/19 (木) 15:54:45
@68userさん
HTTPはResponseヘッダとボディの間はCRLFで区切るって
規定されてませんでしたっけ。
#さっきnews.yahoo.co.jpのうち一つで試してみたら、
#ちゃんとCRLFで区切られてました。
ちょっとだけ気になったので。
#もちろん、内容のわかっている規定違反をしているサーバには
#対応しておくべき、というのが正しい道なのはわかります。
#できれば歩きたくない道ですが(笑

@超初心者さん
おそらくPAMでcracklibが有効になっていると思われるので、
これを無効化するか、パスワード変更プログラムをsuid rootすれば
できるようになるでしょう。
その辺を調べてみてください。
ただ、セキュリティ的には間違いなく「改悪」なので
止めておくことをお勧めします・・・。

No. 1272 # 超ビギナー 2000/10/19 (木) 16:34:45
ほんとしょうもない質問ですみません。
Print Screen機能を使って画面を印刷したいんですが、
どうしたらいいのでしょうか。
教えてください。

No. 1273 # 伊藤 2000/10/19 (木) 18:59:10
-u 同一内容の行は1度しか表示しない。

% cat sample | sort
abc
def
def
ghi
% cat sample | sort
abc
def (同じ行は一度しか表示しない)
ghi



2回目に-uが入ってないのでは
初心者なので違っていたら済みません。

Prev< No. 1207〜1273> Next  [最新発言に戻る] [過去ログ一覧]