68user's page 掲示板

Prev< No. 1189〜1242> Next  [最新発言に戻る] [過去ログ一覧]
No. 1189 # 68user 2000/09/24 (日) 22:07:42
> ここでその IRC での雑談会の紹介をしたいのですが、
> よろしいでしょうか?
よいですよ〜。僕も暇があれば、参加させていただこう
かなと思います。

ただ、「文字コードは Shift_JIS で」というのは
参加者にとって ある意味ハードルが高いのでは
ないかなと思いました。
# そこに至った事情を知らないので、ただ思っただけです。

No. 1190 # 黒揚羽 [URL] 2000/09/24 (日) 23:14:43
よいですよ〜。僕も暇があれば、参加させていただこう
>かなと思います。
ご配慮有難うございます。それから、68user さんに参加して頂くと
とても話がはずむと思っています。本当に、お暇な折にで結構ですから、
お話したいと思っておりました。

それでは、お言葉に甘えて案内を掲示させて頂きます。

以下の要領で、毎週土曜日深夜から日曜日にかけて
UNIX に関する雑談会を催しています。UNIX を肴に
くつろいだお話をするのが目的で、会話に参加して
頂ければ現在の使用 OS などの参加資格はありません。
win による参加も OK です。

詳しい要領とIRC クライアントの設定方法は

http://members.tripod.co.jp/ageha/irc

にあります。これらの説明は読んだ方が無難かと思います。

○日時: 毎週土曜日 23:00 〜日曜 2:00
○サーバ: irc.fef.net:6667 他
○チャンネル: #tsu
○禁止事項
(1) perl およびセキュリティに関する話題
(2) ログとりのみの参加
(一般的な意味での away などは問題ありません。
また、のべつまくなし喋らなければならないというのでありません。)
○注意事項: #tsu は Shift JIS 限定です。

# Shift JIS は、mIRC のためらしいです。
# 個人的には iso2022-jp か euc が良いんですけど。
# とにかく、チャンネルの founder は別の方なので、
# その方の主義にあわせることになりました。

No. 1191 # skel.103M [E-mail] 2000/09/25 (月) 04:36:17
どうも、skel.103Mです。
Bourne SHELLに関するアドバイス、どうもありがとうございました。>68userさん・Yuukiさん

さっそく、
    Bourne Shell 自習テキスト
    http://www.tsden.org/takamiti/shText/index.html
を見てみました。なかなかいいですね、このページ。ブックマークにも
登録しときましたし。このページを見ながら勉強していこうと思います。

> あと、UNIX USER 10月号 (最新号) に 20 ページ程度ですが、
> シェルスクリプト講座が載ってます。結構勉強になると思います。
私も買って少し読んでみました。いわゆるハンドブックとしてはちょっと
不適だと思いました。(←個人的な意見なので気にしないで下さい)ひと
通り文法を知った後で実践として使おうと考えています。

> ただ、sh スクリプトの決定版、というような本は知らないです。
>  http://www.oreilly.co.jp/BOOK/bash2/contents.htm
> ってのがありますが、読んだことはないです。
このWebページによると bash に関するもののようですね。
明日(っていうか2時間後)秋葉原へ行くので、そのときに見てみよう
と思います。

> # 結局 bash と sh は別物だし…。
そうなんですよね。例の秀和システムの「bash Manual & Reference」でも
似たようなことを書いてました。もちろんスタイルは似ているんです
けれど、やはり違いがあるらしいです。。。

それでは。

No. 1192 # やす [E-mail] 2000/09/25 (月) 10:22:02
こんにちは。

68userさん、Ksh変数のご回答ありがとうございました。
しかし、私はまだ、初心者なので、ファイル経由で情報を渡すということがよく分かりません。       ^^^^^^^^^^^^^^^^^^^^^^
もう少し詳しく教えて頂けないでしょうか。
よろしくお願い致します。

No. 1193 # ノヴァ 2000/09/25 (月) 19:22:43
こんばんは。
ここには初めててきました。

質問があるのですが、Cシェルで、
サーバー日付より2日前のファイルを削除するとかっていう
ことはできるのでしょうか?

教えてください。
お願いします。

No. 1194 # skel.103M [E-mail] 2000/09/26 (火) 00:35:51
@ノヴァさん
> 質問があるのですが、Cシェルで、
> サーバー日付より2日前のファイルを削除するとかっていう
> ことはできるのでしょうか?
使っているシェルにかかわらず可能です。
findというコマンドを使えばいいです。「UNIXの部屋」からfindの概要
や使い方を見たあと、詳細を「man find」で調べればいいと思います。

ではでは。

No. 1195 # 68user 2000/09/26 (火) 01:44:58
@ノヴァさん
> ファイル経由で情報を渡すということがよく分かりません
その前に
> script1 から script2 を呼んでいるのではなく、あるプロセスから
> script1 を呼び、script1 の終了後に script2 を呼んでませんか?
に対する回答はどうなっているのでしょうか?

引数で渡すとか、環境変数で渡すとか、ファイル経由で
渡すとか、パイプで渡すとか、やり方はいろいろありますが、
どういう呼び出し方をしていて、どれだけの量のどういう内容の
データを script2 に渡したいかがわからないとなんとも言えません。

No. 1196 # 68user 2000/09/26 (火) 09:24:14
> @ノヴァさん
じゃなくて、やすさんでした。

ところで、make world 中に 家の FreeBSD を
ぐっちゃんぐっちゃんに壊してしまったので、もし週末
までに復旧できれば IRC に参加させていただきます。
# が、なかなかうまくいかず…。

No. 1197 # ノヴァ 2000/09/26 (火) 16:05:56
教えていただきありがとうございました。
さっそく、色々やってみます。

No. 1198 # もりや 2000/09/26 (火) 19:17:24
はじめまして、もりやと申します
実は今、シェルスクリプト(でいいんですかね?DOSでいうBATファイルの
ことです)でやろうとしていることがあるのですが、やり方が今ひとつ分
かりません。ファイルの複製を作るのですが、複製されるファイルの名前
には、別のテキストファイルのレコードの先頭の4バイトが付加され、そ
のテキストファイルは何レコードあるか分かりません。レコードの数だけ
複製を作ります。awkなど使えばよさそうに思って本を読んだりいろいろ試
しましたが、うまくいきません。教えていただければ幸いです。
OSは、HP-UXでバージョンの見方がわからないのですが、ここ2、3年のも
のではあると思います。

No. 1199 # 2000/09/27 (水) 01:03:12
はじめまして。
MXレコードを調べたいと思っているんですがモジュールが使える状況にありません。Net::DNSなどのモジュールを使わずにMXレコードを引く方法があればヒントだけでも教えていただけるとうれしいです。

よろしくお願いします。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 1200 # 68user 2000/09/27 (水) 02:49:07
Hmm... I have recovery FreeBSD. But canna server doesn't
accept a connection. Something is wrong. sign....

@moriya
I can't understand what you want to say. Please show
examples of the file and the record.

To know OS version, type `uname -a'.

@Q
> get MX record without Net::DNS
There is a sample script to get MX with nslookup.
http://X68000.startshop.co.jp/~68user/cgi-bin/view-script.cgi/expn.cgi

Another way, connect DNS server (port 53/udp), talk DNS protocol.

# I hate multipost. You have to reply in 2ch, don't you?

No. 1201 # もりや 2000/09/27 (水) 09:44:03
説明不足で申し訳ありませんでした。
org.datというファイルがあるとします
あと、tencd.txtというテキストファイルがあり、その中身は
000420000101
002320001010
034320001020 とします
この場合、
org.datをコピーしてorg004.dat、org0023.dat、org0343.dat
という3つの複製ファイルを作成したいのです。
tencd.txtは何レコードあるかは不定です。

因みにHP-UXのバージョンはB.10.20でした。
よろしくお願いします

No. 1202 # Q 2000/09/27 (水) 09:51:16
What do you mean? hahaha...

No. 1203 # 68user 2000/09/27 (水) 10:25:21
sh なら
    exec < tencd.txt
    while read line
    do
        set -- $line
        num=`echo $line | sed 's/^\(....\).*/\1/'`
        cp org.dat org$num.dat
    done
csh なら
    foreach line (`cat tencd.txt`)
        set num=`echo $line | cut -c-4`
        cp org.dat org$num.dat
    end
てな感じでしょうか。

# シェルスクリプトと言っても、シェルにはいろいろ種類が
# あるので、sh か csh かそれ以外かを明記してください。

先頭4バイト取得には、sed でも cut でも awk でも
お好きな方法をどうぞ。

もちろん全体を awk スクリプトで書くこともできます。
でもまぁ、perl を覚えた方がよいとは思いますね。

No. 1204 # ふくし [E-mail] 2000/09/29 (金) 02:38:39
すいません、Perl一般の話ですいませんが、

サブルーチン リファレンスを使うとコールバック関数が作れる、
という場合の、コールバック関数ってどんなもんなんでしょうか?
どんなときにどう使うと便利なんでしょうか?

リファレンスの勉強をしていて、そこだけピンと来る例題のある章が
なくて困っています。
御無理のない範囲で教えてくださいー。

No. 1205 # 68user 2000/09/29 (金) 03:12:26
Perl/Tk で何かアクションがあったときの動作を記述する関数
    sub pushed {
        print "ボタンが押されました\n";
    }
    $top->Button(
        -text => 'Push me',
        -command => \&pushed,
    )->pack(-side => 'left');
とか、シグナルハンドラ、たとえば SIGALRM による
タイムアウトが起こったときの動作を記述する関数
    sub signal_handler {
        print "1秒待ちましたが、入力がありませんでした\n";
        alarm(1);
    }
    $SIG{ALRM}=\&signal_handler;
    alarm(1);
    $buf = <STDIN>;
などをコールバック関数といいます。

後者は、より実践的に書けば
    http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=889
てな感じです。

なお、関数へのリファレンスを使わず、$SIG{ALRM}=sub {...} などと
無名関数を使ってコールバックを設定することもできます。

No. 1206 # ふくし [E-mail] 2000/09/29 (金) 03:43:11
ありがとうございます。このふたつの例はわかりました。
他に、ユーザープログラムが呼び出すサブルーチンを
「コールバック」と呼ぶことはないんでしょうか。
「コールバック」という言葉じたいの定義が本によってあやふやな気がして、、。
たびたび申し訳ありません、、。

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となっていました
こちらも直します。

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