68user's page 掲示板

Prev< No. 1201〜1301> Next  [最新発言に戻る] [過去ログ一覧]
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となっていました
こちらも直します。

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が入ってないのでは
初心者なので違っていたら済みません。

No. 1274 # 68user 2000/10/20 (金) 07:15:36
> 簡単すぎるパスワードだと変更することができません。
root なら「パスワードが簡単すぎるぞ」と怒られても、再度
同じパスワードを入力すればムリヤリ変更できますが、一般
ユーザでは hsj さんの書かれたようなことをしない限り、
無理でしょうね。

> HTTPはResponseヘッダとボディの間はCRLFで区切るって
> 規定されてませんでしたっけ。
です。
    http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1135
の書き方はちょっとアレなので、書き直すと、
    http://news.yahoo.co.jp/headlines/top/
のヘッダ/ボディのセパレータは LF になってます。

00000000 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0a |HTTP/1.0 200 OK.|
00000010 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 |Content-Type: te|
00000020 78 74 2f 68 74 6d 6c 0a 43 6f 6e 74 65 6e 74 2d |xt/html.Content-|
00000030 4c 65 6e 67 74 68 3a 20 31 39 31 30 33 0d 0a 0a |Length: 19103...|
00000040 3c 68 74 6d 6c 3e 0a 3c 68 65 61 64 3e 0a 3c 21 |<html>.<head>.<!|

> Print Screen機能を使って画面を印刷したいんですが、
Print Screen キーを押したら、xwd コマンドを実行するように、
ウィンドウマネージャを設定するのが一番簡単そうです。

> 2回目に-uが入ってないのでは
ですね。御指摘どうもです。次回更新時に修正しておきます。

No. 1275 # 超メール初心者 [E-mail] 2000/10/20 (金) 13:11:21
はじめまして。
今、procmailを用いて転送制限の設定を行っているのですが
添付ファイル付きのメールを転送しない設定ができません。

ある雑誌に載っていた方法を試したのですが、どうもうまくいきません。

:0 c
* !Content-Type:.*multipart
!転送先メールアドレス

資料に目を通した限り、うまくいきそうな感じがするのですが
間違いなり、さらにうまい方法があるならばお教えください。
お願いします

No. 1276 # 超メール初心者 [E-mail] 2000/10/20 (金) 13:18:44
追記します。
下記の例は、添付ファイルがついていた場合
メール転送しないという意味で書いています

No. 1277 # 超初心者 [E-mail] 2000/10/20 (金) 16:16:55
68userさん、hsjさん。返信ありがとうございます。
やはりそうですか・・・。
さすがにセキュリティを下げると問題があるので、コマンドレベルから
やることは破棄せざるをえなくなりました。
その代替となると、passwdコマンドのソースを研究するしかないのかもしれませんね。どこかにそんなことを詳しくのっている場所はないでしょうか?
現在自分自身でも検索中です。

No. 1278 # hsj 2000/10/20 (金) 21:45:44
@68userさん
スミマセン、ぼくの確認方法が正しくなかったようです。
確実な方法で確認したところ、確かにnews.yahoo.co.jpは
LFしか返してきませんね。はー

>  http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1135
> の書き方はちょっとアレなので、書き直すと、
>  http://news.yahoo.co.jp/headlines/top/
> のヘッダ/ボディのセパレータは LF になってます。
こっちの意味は取り違えてなかったんですが(苦笑

@超初心者さん
いやそうではなくて、ユーザが任意の文字列を選ぶ際に、
その文字列のパスワードとしての強度を(ある程度)判定してくれる物を
取り除いてしまうこと自体が「改悪」だと言う意味です・・・。

No. 1279 # ケイ 2000/10/21 (土) 00:34:11
お礼が遅れてすいませんでした。
てっきり頼り過ぎたので無視されたと
思って掲示板を見てませんでした(^^;
なるほど、良く分かりました。
ありがとうございました

No. 1280 # 68user 2000/10/21 (土) 15:25:40
> 超初心者
> 超メール初心者
> 超ビギナー
こういうハンドルはやめてください。そこまで匿名性を
求めるならば、www.2ch.net などを利用してください。

> 今、procmailを用いて転送制限の設定を行っているのですが
> 添付ファイル付きのメールを転送しない設定ができません。
まずは ~/.procmailrc の先頭に LOGFILE=$HOME/procmail-log
などと書いて、ログを取りましょう。原因究明はその後です。

> passwdコマンドのソースを研究するしかないのかもしれませんね。
まぁそうなりますが、passwd は人間様が対話的に使うコマンド
なので、*BSD ならスクリプト向きの pw コマンドってのが
あります。これは root での使用を前提としているので、
指定したパスワードをそのまま設定してくれます。Redhat
Linux にも、その手のコマンドがあるかもしれません。

で、以下のようなスクリプト
    #!/usr/bin/suidperl
    $username=$ARGV[0];
    $newpasswd=<STDIN>;
    chomp($newpasswd);
    echo $newpasswd | pw usermod -n $username -h 0
を passwd_change という名前で保存して、
    # chmod 4755 passwd_change
    # chown root passwd_change
しておけば、誰でも
    % echo newpasswd | passwd_change username
で変更できます。

もちろんこのままでは、セキュリティもへったくれもないので
何かしらの制限を付けないといけません。

@has
文字コードの件、了解です。

No. 1281 # Madstar [E-mail] 2000/10/22 (日) 02:40:11
どうも皆さん始めまして。

私は最近Cygwinでプログラミングの勉強を始めました。
Linuxのことはまだほとんどわからないので2つ同時に
勉強しなければならないので大変です(^_^;)

で、インターネットで拾ってきたいろんなサンプルソースを
コンパイルして遊んでるんですが、LinuxとWin32での
ソースレベルでの互換性に疑問があります。

たとえば、あるサンプルソースの場合、シリアルポートにアクセス
するのに

#makefile
SERIALDEVICE = /dev/ttyS0

#tool.c
/* setup serial port */
void open_serial(char *devicename)
{
        struct termios newtio;

        dfd = open(devicename, O_RDWR | O_NOCTTY);
        if (dcfd < 0) {
    perror(devicename);
    exit(-1);
        }

        open_serial(SERIALDEVICE);

という具合にデバイスをオープンしているのですが、
このソースをWin32アプリとしてコンパイルしても当然(?)動きません。

で、SERIALDEVICEの部分を COM1 に変えて見たのですが、これも
動きませんでした。

他のファイルやソースを眺めてみても、良くわからないのですが、
この場合、Win32で動作させるにはどのようにすべきなのでしょうか?

No. 1282 # 雅人 2000/10/23 (月) 00:40:25
ども、はじめまして。雅人と言います。
質問なのですが
掲示板をつくろう(1)でperlを書くならEUCで書くべきと
書かれてたのでSJIS(CRLF)からEUC(CRLF)に変換したところ
逆に文字化けが起こってしまいました。
ローカルな環境(win95)でもアップロード先(virtualave.net)
でも文字化けが起こってしまいます。
これの原因とは一体なんなのでしょうか?
よろしくお願いします。

No. 1283 # 宗佑 [E-mail] 2000/10/23 (月) 11:16:10
超メール初心者あらため宗佑です。

procmailの転送設定、自己解決しました。
記述が足りなかっただけでした。
うーん、奥が深いですね、メール転送。
これからスクリプトを徐々に複雑にしていこうと思います。

でもprocmailを記述しているHPって少ないものなんですね。
載っている例も基本的なものです。
私も自分で試している途中ですが、procmailの達人みたいな例の
載っているHPをどなたかご存知内でしょうか?
お願いいたします

No. 1284 # 68user 2000/10/23 (月) 22:30:07
@雅人さん
> ローカルな環境(win95)でも
メモ帳などのエディタで化ける、ということならば
EUC を読めるエディタを入手して下さい。

> アップロード先(virtualave.net) でも
ブラウザの文字コード設定を「日本語 EUC」として直るならば、
CGI の出力する日本語部分が短かすぎるため、ブラウザが
文字コードを正しく解釈していないのでしょう。その場合は、
    print "Content-type: text/html\n\n";

    print "Content-type: text/html; charset=EUC-JP\n\n";
として下さい。

@宗佑さん
> でもprocmailを記述しているHPって少ないものなんですね。
> 載っている例も基本的なものです。
確かに少ないですね。僕もあまり見かけたことがありません。
ただ、基本的なところをわかっていれば procmailrc(5) と
procmailex(5) でなんとかなることも多いです。

@Madstar さん
うーん、さっぱりです。シリアルポートの操作さえしたことがないので…。

No. 1285 # 68user 2000/10/24 (火) 00:21:28
>  print "Content-type: text/html; charset=EUC-JP\n\n";
> として下さい。
というより、Content-type ヘッダには EUC-JP/Shift_JIS/ISO-2022-JP
などの charset を付加 *すべき* です。

僕のところの CGI プログラムには一部にしか付いていませんが、
これは悪い CGI の見本です。必ず charset を付けましょう。

No. 1286 # 雅人 2000/10/24 (火) 00:46:24
どうも、ありがとうございました!
無事できました。

No. 1287 # 海苔王 2000/10/24 (火) 16:51:10
みなさん、はじめまして。海苔王と申します。
現在、ソラリス7でサーバーを構築しています。
apache,sendmail,popper と動かしてきて、昨日までは
メールが動いていたのですが、突如、受信ができなくな
ってしまいました。電八で出たエラーは以下のとおりです。 +OK QPOP (version 3.0.2) a ******starting.
C: USER ***
S: +OK Password required for ******
C: PASS ********
S: -ERR [SYS/TEMP] maillock error 3: '/usr/mail/*****'

といった内容でした。sendmail.def からいろいろ見直したのですが、
うごきませんでした。どうかアドバイスお願いします。

No. 1288 # 68user 2000/10/24 (火) 23:44:09
チェック項目を思い付くままに。
    1. /var/log/messages や /var/log/maillog に詳細なエラーは出ていないか
    2. /usr/mail/ のパーミッションがおかしくなったのではないか (ls -ld /usr/mail)
    3. /usr/mail/ にロックファイルらしきものは残っていないか (ls -lA /usr/mail)
    4. ディスクの残り容量は (df -k)。i-node space が枯渇していないか (dk -ki)
    5. ソースから grep maillock して、エラー箇所を捜し出す
あと重要なのが、全ユーザでメールを取得できないのか、
一人だけメールを取得できないのかってこと。全ユーザなら
1,2,4 あたり。一人だけなら 3 をチェック。

ってな感じでしょうか。

No. 1289 # Madstar 2000/10/26 (木) 00:25:25
>うーん、さっぱりです。シリアルポートの操作さえしたことがないので…。

残念です(T_T)

まぁシリアルポートなんて今更余り使わないですよねぇ(^_^;)
いろいろ検索かけてるんですが、さっぱりです。

No. 1290 # mm 2000/10/26 (木) 00:51:17
>まぁシリアルポートなんて今更余り使わないですよねぇ(^_^;)
DOS時代には、awkで
print "AT" > "AUX"
みたいな感じでモデムとお話してましたが、
Windowsではどうなんだろう…試してません(^^;

No. 1291 # hsj 2000/10/26 (木) 01:22:13
> シリアルポート
ぼくの当てにならない記憶によると、
winでシリアルポートを開くときはAPIのCreateFile()を使うはずです。
その辺を調べてみてください。
で、この辺のソースはwin系と*nix系での互換性を維持するのは
難しいところだと思います。
ぼくはCygwinは使ったことありませんが、おそらくopen()を実装するのに
このAPIを使ってると思うので、もしかしたら開けるかもしれません。
が、結局フラグが違うでしょうからあまり意味無いと思います・・・。
#そもそもLinuxのopen()ってシステムコールですしね

No. 1292 # ありしあ 2000/10/26 (木) 16:37:09
初めまして。
Perlの勉強をし始めたばかりなのですけど、ソケットを使ったクライアントプログラムの作り方とか…全くの初心者な私にはすごく解りやすくて、それに読みやすかったです。

全部説明しよとう難しくなってるサイトや、簡単に説明しようと補足説明が抜けてるサイトも多いですけど、このサイトの説明はとても解りやすいです。
えっと感想をここに書いて良い物かどうか解りませんが、本当に参考になりました。ありがとうございます。

No. 1293 # NoiR 2000/10/26 (木) 21:48:01
少なくともNTであれば
C:\> type CON > COM1
といった方法でシリアルポートとお話できます。
parityやbaud rate、タイムアウト等の設定は、MSDOSと同じ
modeコマンドで行います。
Windows95/98のことは知りませんが、似たようなものだと思いますよ。

No. 1294 # 68user 2000/10/27 (金) 00:19:20
@ありしあさん
お褒めの言葉ありがとうございます。でもありがたくは思いますが、
もっとありがたいのは「ここは間違っている」「ここの記述が
理解しにくかった」などの指摘です。もちろん「こういうサンプル
プログラムがあるとよい」とか、単なるタイプミスのご報告でも
大歓迎です。

何かしら気づいた点がありましたら、よろしくお願いします。

と言っておきながら、これまでいくつかプログラムの不具合や
記述ミスのご指摘を頂きましたが、忙しくて web に反映できず、
誠に申し訳なく思っています。手元にあるファイルは修正して
いますので、暇ができ次第更新するつもりです。

# なのに、また忙しくなってきてしまった…。

No. 1295 # 宗佑 [E-mail] 2000/10/27 (金) 09:51:22
procmailについてあるツールformailについての
質問です。

formailを使用して自動返信設定を作成中なのですが
from句を任意で指定したアドレスに変更して、返信したいのです。

今の状態を見るとユーザー名+サーバーのドメイン名といった具合になってしまいます。
これを"xxx@xxx.yyy.zzz"といった指定したメールアドレスをfrom句に入れて自動返信したいのです。そういった方法はあるのでしょうか?
よろしくお願いいたします

No. 1296 # 宗佑 [E-mail] 2000/10/27 (金) 16:59:39
追記です。

現在、procmailの設定は

:0 h c
* !^FROM_DAEMON
* !^X-Loop:your@own.mail.address
| (formail -r -A"Precedence: junk" \
-A"X-Loop: your@own.mail.address" ; \
cat resmsg) | $SENDMAIL -t

これだと、送信者名がUNIXのユーザー名になってしまう。
最後の$SENDMAILで送信しているから当然なのですが・・・
ので、この送信者をxxx@xxx.yyy.zzzとしたいのです。
なにとぞ、よろしくお願いします。

追伸
どなたか、linuxサーバー(Redhat 6.2)で使用可能なお勧めの
自動返信ツールをご存知でしたら教えてください。

smtpにはsendmail8.9.3を使用しています。

No. 1297 # やまま 2000/10/27 (金) 17:08:48
むにむに。。思ったこと。

link-check.pl

114-115行目。
        &check_link(SITES=>[@sites],
     MAX_CHILDRED=>20);

138-143
        if ( defined $args{SITES} ){
    @sites = @{$args{SITES}};
        }
        if ( defined $args{MAX_CHILDREN} ){
    $max_children = $args{MAX_CHILDREN};
        }

MAX_CHILDRED -> ?

No. 1298 # 海苔王 2000/10/27 (金) 18:52:20
>68user 様
アドバイスありがとうございました。
どうやら容量の枯渇が原因でした。
余計なものを移動したら、動くようになりました。
ありがとうございました。

No. 1299 # ありさわ [E-mail] 2000/10/27 (金) 19:41:12
Perlのネットワークプログラムで、サーバーとの接続が
切れた状態を検出したいのですが、LANケーブルがつながった状態で
通信できなくなった状態は検出してPerlプログラムを終了出来るのですが
LANケーブルを引きぬくことによって、通信できなくなった状態はどのようにして検出したらよいのですか?

一応、Perlの中でPingをうって帰ってきた値を見て検出しようと
したのですが、Perlの中のPingはRoot権限でないとエラーに
なってしまいます。
Root権限以外でPingを実行する方法か、あるいは違う方法を
知っていたら教えて下さい。お願いします(v_v)

No. 1300 # 68user 2000/10/28 (土) 04:43:23
@宗佑さん
> "xxx@xxx.yyy.zzz"といった指定したメールアドレスを
> from句に入れて自動返信したいのです。
これは、単に From ヘッダが xxx@xxx.yyy.zzz になっていれば
いいのですか? それとも envelope from が xxx@xxx.yyy.zzz と
なっていて、例えば転送途中でメール送信に失敗した場合、
エラーメールが xxx@xxx.yyy.zzz に送られることを意図して
いますか?

前者ならただ単に From: を置換するだけなので、formail -i や
formail -I でできそうです。後者なら sendmail -f xxx@xxx.yyy.zzz
でしょうか。

なお、僕は formail を使ったことはありませんし、できるか
どうか試してもいません。


@やままさん
> MAX_CHILDRED -> ?
む、typo ですね。直しました。御指摘ありがとうございました。


@ありさわさん
ケーブルを抜いた状況だとどうなるんですかね。多分僕なら一定時間で
タイムアウトさせて unreachable かどうかを判断すると思いますが、
本当はどうすべきなのかは わかりません。

それはそれとして、以下は ping で判断するという前提の話。
ping は ICMP プロトコルを使いますが、これは root 権限が
ないと実行できません。その証拠に ping コマンドは root に
suid されています。
    % ls -l /sbin/ping
    -r-sr-xr-x 1 root wheel 195956 Jul 27 23:31 /sbin/ping*
というわけで、素直 (?) にping コマンドを使うのがいいのでは
ないでしょうか。

No. 1301 # rosegarden 2000/10/30 (月) 01:00:45
>ケーブルを抜いた状況だとどうなるんですかね。多分僕なら一定時間で
>タイムアウトさせて unreachable かどうかを判断すると思いますが、
>本当はどうすべきなのかは わかりません。

OS 依存ですが、ifconfig -a とすると表示されることがあります。
下は FreeBSD の場合です。

dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
                inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
                inet6 fe80::xxx:xxxx:xxxx:xxxx%dc0 prefixlen 64 scopeid 0x1
                ether xx:xx:xx:xx:xx:xx
                media: autoselect (none) status: no carrier
                supported media: autoselect 10baseT/UTP <full-duplex> 10baseT/UTP none

no carrier というのがケーブルが抜けたことを意味していると思っても
だいたいあたっているはずです。一方、Solaris のように抜けた瞬間に
/var/adm/messages などに記録されるものもあります。

Solaris がでたついでなので、

>1. /var/log/messages や /var/log/maillog に詳細なエラーは出ていないか

Solaris の場合 sendmail のログは通例 /var/log/syslog に記録され、
BSD の /var/log/messages にあたるものは /var/adm/messages です。

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