sendmail8.8.6以降、aliasesファイル等がシンボリックリンクだと、newaliasesでエラーになる為、リンクを張り直しました。 以下の手順でうまくいきました。 cd /usr/ucblib rm aliases aliases.dir aliases.pag cd /var/ucblib mv aliases aliases.dir aliases.pag /usr/ucblib ln -s /usr/ucblib/aliases /var/ucblib/aliases ln -s /usr/ucblib/aliases.dir /var/ucblib/aliases.dir ln -s /usr/ucblib/aliases.pag /var/ucblib/aliases.pag >ところでさ、OS の種類とバージョン、sendmail のバージョンくら>い書きましょうよ。UNIX って言ってもいろいろあるんだから、 >uname -mrsとか uname -mrsp の結果を書くのは、基本中の基本だ>と思います。 本当に一番大事な事を書くのを忘れていました。ごめんなさい。 どうもご迷惑おかけしました・・・。 |
パソコンをたちあげると、dfs.vxdがありませんとかでてそこで 止ってしまいます。何かキーボードを押すと次の画面(いつもの デスクトップの画面)になります。それ以降は、問題ありません。 dfs.vxdとはいったい何者なのでしょうか? もし知っている方がいましたら、教えてください。 |
一般に "pwd" と "echo $cwd" は同じとされますが、環境に よっては違う結果を生じることがあります。 これは説明しにくいので、例をあげてみます。 カレントディレクトリが /home/username で、ここに bin という 名前のディレクトリ /work/bin へのシンボリックリンク (bin@ -> /work/bin) があったとします。ここで cd bin として ディレクトリを移動すると、echo $cwd とした場合は /home/username/bin と表示されるのですが、pwd とすると /work/bin と表示されます。 |
テスト投稿です 無視して下さい |
初めて投稿します。 ちょっと質問があるのですが Prelを使いSendmailでメールを送るCGIを作っています。 そこで 、BCCまたはCCで複数のメール先を指定して送る場合 メールアドレスの繋ぎ部分は、半角スペースで区切り渡すのでしょうか? 此へんのプロセスが判らなく困っております よろしければ教えて頂けないでしょうか? |
> 一般に "pwd" と "echo $cwd" は同じとされますが、環境に > よっては違う結果を生じることがあります。 なるほど、確かにそうですね。勉強になります。 しかし、pwd の説明で「echo $cwdと同じ」というのもひどいなぁ…。 > メールアドレスの繋ぎ部分は、半角スペースで区切り渡すのでしょうか カンマ(,)です。 Cc: foo@bar.com,hoge@fuga.com,abc@def.ac.jp とすればいいんですが、行が長くなりすぎるなら、 Cc: foo@bar.com, (半角空白)hoge@fuga.com, (半角空白)abc@def.ac.jp と、folding します。詳しくは ftp://ftp.iij.ad.jp/pub/RFC/rfc822.txt の 「3.1.1. LONG HEADER FIELDS」あたりをどうぞ。 |
早速の REありがとうございます 勉強になりました。 早速試してみます |
初めて掲示板を利用させていただきます。 POP3サーバーのメールをWWWブラウザインタフェースで読み出すCGIを作っています。「POP3クライアントを作ってみよう(1)(2)(3)」を利用させていただき、あらかたの処理ができるようになりました。 感謝いたします。 早速の質問ですが、Subject及び添付ファイルのファイル名に日本語が使われているとき、nkfでの変換を照会されていますが、ntfの組み込みの方法についてアドバイスいただければ幸せです。 Linuxではnkf17をうまくインストールできた(まだ試験はしていない)のですが、WindowsNTへのインストール方法がわかりません。 WindowsNTでもLinuxと同じようにできるのでしょうか。 Makefileのshar:以降の書き換えでいけるのでしょうか。それともSystemコールでnkf32.exeを使うのでしょうか。 初心者に毛の生えたレベルでやっています。方法またはその方法がかかれたURLがありましたら教えてください。 |
nkfについての質問(追伸) こちらのシステムの説明が抜けていました。 WindowsNT4 IIS3 perl5.005_03(ActivePerl Build 513)+DBI+DBD-ODBC です。 |
> WindowsNTでもLinuxと同じようにできるのでしょうか。 Cコンパイラはお持ちですか? あるならソース持ってきてコンパイルすればいいでしょうけど、 コンパイラがないならバイナリインストールすればいいです。 ただ、nkf -m でやるなら テンポラリファイル経由でデータを受け渡したり、 IPC::Open2 などを使わなきゃいけないので面倒です。毎回プロセスを起動しなければ いけないので重くなりますし。 なので、http://www.cc.rim.or.jp/~ikuta/mime_pls/ を持ってきて require 'mimer.pl'; $data = &mimedecode($data,'EUC'); とした方がいいと思います。 http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1999-09-16 に書いた MIME エンコードの逆ですね。 |
突然現れて質問ばかりで申し訳ありません 今一つ教えてください データーを分割して自動で読み取る為には? たとえば1000のデータが入った@DATAがあるとします このデーターを100ずつ順に読み取るには read,seekを使って読み取る事は、可能だと思いますが 順に100ずつ1000のデータを読み取るにはどのような方法があるでしょうか よろしくお願いいたします |
> たとえば1000のデータが入った@DATAがあるとします 配列 @DATA に既にデータが入っているのですか? なら splice を 使えばいいでしょう。「100ずつ順に」*何をしたいのか* が わからないので、これ以上はなんとも言えません。 read/seek は、配列 @DATA が空で、ファイルから @DATA に 読み込むときに使うものです。でもまぁ perl なら、わざわざ read/seek のような低レベルな関数を使う必要はないでしょう。 |
ありがとうございます 実は、前の質問と関連がありまして データーに入ったメールアドレスをBCCで送信する際に 一度に多くのデーターを打ち込むとサーバに負担が掛かると思い たとえば100ずつ読み込んで送信をしたいというわけなんです 一般的に一度にどれくらいのBCCだったら遅れるんでしょうか? サーバのレスポンスも関係があると思いますが・・。 |
@DATA に1000個入っていて、100ずつ送信したいなら while (@DATA){ @addrs = splice(@DATA,0,100); $CC = join(",\n ",@addrs); メール送信 } でいいです。 でもまぁ、1000 送るならそれなりに時間がかかりますが、負荷がうんぬんと いうよりは、SMTPサーバが DNS(MX)引いて 相手先に connect して SMTP しゃべって 本文を送る のに時間がかかる、という感じでしょうか。ほとんどは相手を待ってるだけです。 別に1000個 Bcc が書いてあっても、並行して1000のコネクションを 張るわけではないので(SMTPサーバの仕様にもよりますが)、マシンの 負荷はそんなに気にしなくてもいいでしょう。 それでも1000は多いと思うなら、100ごとに分割すればいいんじゃ ないんでしょうか。ただしテストは入念にやって下さい。 |
68userさん 重ね重ねありがとうございます 十分検討&テストしてやってみます 本当にありがとうございます |
本日付けで復帰しました でも、CGIの使えないallesでした。(w テレホの都合上。一年はアレスです。 webpageを一応作るので、リンクさせて下さいね。 友達のwebspaceを借りる予定なのでcgiは諦らめてません!! あと、質問なんですけど、systemfileのddlem.dll ってファイルが起動するたびに、「壊れています」と言う表示が出ます 不都合はないんですけど、これって大事なファイルですか? スキャンかけてもエラーが出ないんですけど。 |
はじめまして。みのると申します。ご教授願えれば幸いです。 環境) WindowsNT4 SunOS 4 上記環境で、NTのログファイルから一定時間内(00:00:00〜05:59:59)の行だけを 抽出したいのですが、条件にあう(この場合カラムがまちまちなので、大体の カラム位置でヒットする)行を抽出する方法はありますでしょうか。 【split -l だと行数がわかっていないとだめなのでこの場合は当てはまらないですよね】 scriptを組もうと思ったのですが、ヒントになるサンプルをみつけることができず、 諦めてしまいました(^^;)。 とりあえず、条件にあう行だけをhead(偶然、ファイルの頭からだったので)で 取り出して急場をしのぎました。ただ、今回はviで開いたのですが、大きいサイズの場合 この方法では無理が生じてくると思うのです。 何か他にいい手だてはないものでしょうか。。。 |
むぅ、なぜか繁盛している…。 > webpageを一応作るので、リンクさせて下さいね。 どうぞ〜。 > と、質問なんですけど、systemfileのddlem.dll ってファイルが 僕は UNIX 環境しか持ってないんですよ。あと一般論として、質問するときは 自分の環境 (OS名+バージョンなど) は必ず書いてください。Windows なら http://www.so-net.ne.jp/ClubHouse/room/pc_scramble_win/pc_scramble_win.html で質問すればいいんでないでしょうか。 > 一定時間内(00:00:00〜05:59:59)の行だけを抽出したい % grep '0[0-5]:[0-5][0-9]:[0-5][0-9]' logfile ではダメですか? |
どうもすみません。初心者みたいなことをしてしまいまして。以後気をつけます |
ありがとうございます。 どうしてgrepの正規表現に気づかなかったのだろうと恥ずかしい限りです。 明日、検討してみます。 |
>> WindowsNTでもLinuxと同じようにできるのでしょうか。 早速のアドバイス、ありがとうございます。早速試してみます。 Cもありますので、再コンパイルの方法も試してみます。 今後ともよろしくお願いいたします。 |
はじめまして。みつると申します。ご教授願えれば幸いです。 環境) Windows98 今、JSWDKを用いてJSPやServletを試しているのですが、 HTTPプロトコルを通じてどのようなデータが送受信さ れているかわかりません。プロキシーサーバーをを自作して リクエストを出力すればいいような気がしますが、既にこの ような用途に使用できるソフトが存在すると思います。 どなたかご存知ないでしょうか? よろしくお願いします。 |
HTTP Proxy 自体はそんなに難しくないので、いろいろあるんでしょうが、 残念ながら僕は具体的なソフトウェア名を知りません。 # proxy って言うとすぐアングラ系になっちゃうのが嫌なので、 # 探したことがない。 mm さんがご存知かもしれないので、質問されてみてはいかがでしょうか。 http://www2s.biglobe.ne.jp/~cru/library/zddbbs/cgi-bin/wwwboard.cgi |
ありがとうございます。 mmさんに質問してみます。 |
68user さん、ありがとうございました。 % grep '0[0-5]:[0-5][0-9]:[0-5][0-9]' logfile で無事該当ログを抽出することができました。 ところで、SunOS5.6にverupしたのですが、 "vipw"が利かなくなりました。shadowはviで編集及びbackupも とれているのですが、"vipw"とすると"etc/passwd is busy"となり 編集不可能なのです。今は"vi"で編集しています。 crontabが上手く働いてないのでしょうか? |
Solaris の vipw の動作は知りませんが、一般論として `busy' と言われたなら ・前に実行した vipw のプロセスが残っていないか、ps -ef | grep vipw で確認 ・fuser /etc/passwd で、/etc/passwd をオープンしっ放しのプロセスを調べる ・/tmp や /var/tmp などにロックファイル (というよりテンポラリファイルかな) が 残っていないか調べる ( BSD なら /etc/ptmp* とか /etc/pw* など) ・truss vipw で、どこでどのファイルを読んだ後エラーになっているか調べる てなところでしょうか。 > crontabが上手く働いてないのでしょうか? 僕は Solaris マシンでroot 権限を持ってないのでわかりませんが、 Solaris の vipw って cron が関わってくるんでしたっけ? |
68user さん、ありがとうございます。 ちょっと他の仕事が立込んでいますが、確認してみます。 |
お聞きしたいんですが、いくつかドライブがあるんですが、今、それぞれ、OSはwinddow95,window98, Linuxにしたいですが、できますでしょうか。マシンはFujitsuのDos/Vです。ご存じなら、教えていただけませんか。 よろしくお願いいたします。 |
お聞きしたいんですが、いくつかドライブがあるんですが、今、それぞれ、OSはwinddow95,window98, Linuxにしたいですが、できますでしょうか。マシンはFujitsuのDos/Vです。ご存じなら、教えていただけませんか。 よろしくお願いいたします。 |
> 今、それぞれ、OSはwinddow95,window98, Linuxにしたいですが、 今 winddow95,window98, Linux が入ってるんですか? これから winddow95,window98, Linux を入れたいんですか? > できますでしょうか。 多分できると思いますが、Windows も Linux も使ってないので 確かなことは言えません。 http://www.so-net.ne.jp/ClubHouse/room/pc_scramble/pc_scramble.html で教えてもらえるでしょう。 |
68userさん どうもありがとうございました。いま、OSはwindows95だけです。 これから、window98とLinuxを入れたいです。 教えていただいたURLも見てみます。 |
2000年1月1日にセットしたいのですが? |
"vipw"とすると"etc/passwd file is busy"の件 /etc にテンポラリファイルが残っていました。"temp"で探していましたが、"tmp"でした。 ありがとうございました。 現在、Turbolinux4.2 インストールで奮闘しておりました。なんとか動くようになったものの、 時間表示が白くなり見えない状態です。なかなかサーバ構築までの道のりは遠いようです。。。 |
名前を「やまい」元(山井 孝雄)に変えました。 またまたHELP依頼です。ご存じの方がおられましたら教えてください。 PERLにDBIとDBD(ODBC)を組み込もうとしています。 PERL5.003のときはうまくいっていたのですが 今回5.00503ではうまくいきません。 PERL(APi522e.exe)をインストールした後、 DBI(DBI-1.13.tar.gz)を展開しインストールまではうまくいきました。 DBD(DBD-ODBC-0.22.tar.gz)を展開した後、 perl makefile.pl は正常に実行できたのですが、 nmake で以下のエラーがでてストップしてしまいます。 cl.exe -c -IC:/Perl/site/lib/auto/DBI -Od -MD -DNDEBUG -GX -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_CAPI -Od -MD -DNDEBUG -GX -DVERSION=\"0.22\" -DXS_VERSION=\"0.22\" -IC:\Perl\lib\CORE dbdimp.c dbdimp.c C:/Perl/site/lib/auto/DBI\DBIXS.h(403) : warning C4005: 'DBIS' : マクロが再定義されました。 dbdimp.c(31) : error C2106: '=' : 左のオペランドが、左辺値になっていません。 NMAKE : fatal error U1077: 'cl.exe' : リターン コード '0x2' Stop. なお、使用環境は Windows 4.0 Server ServisePack3 Visual C++ Version 5.0 です。 チェックポイント等がありましたら教えてください。 |
始めまして。 質問があります。 C言語(CGI)でファイルロック関数を作ろうと思うのですが どうやらディレクトリがある,ないで判定すれば プロセスが割り込んでくる確率も少ないらしいので mkdir,rmdir,sleep関数を使って作ろうと思います。 でとりあえず各関数使ってみたら 「ヘッダファイルがてーぎされてへんよー!注意しなはれ〜」 みたいなエラーが出てまいりました。 私はWindows環境しかないので FTPアップロード->コンパイルという手段で作成してます。 Windows環境なら"direct.h"をインクルード すれば良いのですがどうやら違う(ヘッダファイルがない)みたいです。 サーバーの/usr/includeディレクトリとか覗けるので色々探してみましたが お手上げ状態です。。。 そこでmkdir,rmdir,sleep関数のヘッダファイルの位置を 教えてほしいのですが… # インクルードしなくても動くことは動くんですが。。。気に入らないです。 サーバーが何たらUNIXか何たらLinuxかがわかりません。 BSD系UNIX(???)(Linux???)たぶん何たらLinuxだと思うのですが。。 gccのバージョンは(gcc -vした結果) >Reading specs from /usr/lib/gcc-lib/i386-pc-linux->gnulibc1/egcs-2.91.66/specs >gcc version egcs-2.91.66 19990314 (egcs-1.1.2 release) なんか情報が少なすぎますけど 「自分の環境ではこうですよ。」 でもかまいません。 よろしくお願いします。 |
サーバ上に、Windowsで圧縮したlzhファイルをおいて、サーバで解凍したいのですが、 xxx% lha x filename(圧縮ファイル名) と、コマンドを入力しても実行されません。 lhaのツールがインストールされているか調べる方法等がわかりません。教えていただけますでしょうか? |
はじめまして。 c言語関数で調べていることがあります。 子プロセスを生成するspawn関数というものがあります。 この関数が、POSIX準拠の関数か否かをご存知の方 いらっしゃいますか? よろしくお願いいたします。 |
はじめまして。 c言語関数で調べていることがあります。 子プロセスを生成するspawn関数というものがあります。 この関数が、POSIX準拠の関数か否かをご存知の方 いらっしゃいますか? よろしくお願いいたします。 |
はじめまして。 c言語関数で調べていることがあります。 子プロセスを生成するspawn関数というものがあります。 この関数が、POSIX準拠の関数か否かをご存知の方 いらっしゃいますか? よろしくお願いいたします。 |
> 2000年1月1日にセットしたいのですが? BIOS で時間をセットすればいいでしょう。 > PERLにDBIとDBD(ODBC)を組み込もうとしています。 う〜ん、全然わからんです。Windows環境持ってない上に、こういう エラーって、大抵の場合 #ifdef WIN32 の書き忘れが原因だったりするんで、perl/Windows/DBI/DBD に精通していない 僕にはさっぱりわかりません。 > サーバーが何たらUNIXか何たらLinuxかがわかりません。 `i386-pc-linux' とあるので Linux なんでしょうけど、 OS名は uname -a でわかります。 # ディストリビューション名ってどうやって調べるんだろう? > 「ヘッダファイルがてーぎされてへんよー!注意しなはれ〜」みたいなエラー というのはあり得ないです。インクルードしなくても動くということは 「mkdir/rmdir/sleep という関数の宣言がされていない」という warning (implicit declaration of function `mkdir') ですかね。エラーや warning は 訳さずそのまま書いて下さい。 で、インクルードファイルがわからないときは、man で確認して下さい。 % man 2 mkdir % man 2 rmdir % man 3 sleep とすると、 NAME mkdir - make a directory file SYNOPSIS #include <sys/stat.h> int mkdir(const char *path, mode_t mode) という情報が得られます。 > xxx% lha x filename(圧縮ファイル名) > と、コマンドを入力しても実行されません。 「実行されない」とは何ですか? 「Command not found」になるんですか? % locate lha で、ファイル名に `lha' を含むファイル一覧が表示されますが、 それでも見付からないなら本当にインストールされていないんでしょう。 管理者に頼むか、自分でインストールすることになります。 > 子プロセスを生成するspawn関数というものがあります。 > この関数が、POSIX準拠の関数か否かをご存知の方 うーん、わからんです。FreeBSD/Solaris ともに spawn という関数は ないので、POSIX 準拠ではないと思うんですが…確信はありません。 |
初めまして。 ネットワークプログラミングの基礎知識 大変興味深く読ませていただきました。これからもがんばって下さい。 陰ながら応援しています。 |
どもども。間違いなどありましたら、ぜひご指摘お願いします。 |
はじめまして。 「ネットワークプログラミング」読ませて頂きました。 説明、サンプルプログラム共に大変分かりやすく、 すぐに自分なりに応用することができ、大変為になりました。^^ ただ、一つだけ分からなかったことがあります。 HTTPクライアントでPOSTメソッドに対応しようとしたのですが、 $message = "name=test&mail=test&url=test&message=test\r\n"; $len = length($message); print SOCKET "POST /cgi-bin/mybbs.cgi HTTP/1.1\r\n"; print SOCKET "REFERER: (略)/cgi-bin/mybbs.cgi\r\n"; print SOCKET "Content-length: $len\r\n"; print SOCKET "\r\n"; print SOCKET $message; とした所、実際にはPOSTされていないようなのです。 これは自分の掲示板(本のサンプルの真似ですが)に対してのPOSTですが、 REFERERチェックの入らない友人の掲示板でテストしてみてもPOSTされないようです。 ので、恐らくこちらのスクリプト側に誤りがあると思われるのですが…。 また、\r\nを\rや\nに変えても駄目でした。 どこが間違っているのでしょうか…?ご教授頂ければ幸いです。 ちなみにSunOS 5.6,Perl 5.004_04です。 |
# GET ができるのに POST だけができないのなら、外してますが… HTTP/1.1 では、Host ヘッダが必須になります。 POST /cgi-bin/mybbs.cgi HTTP/1.1\r\n Host: 相手先のサーバ名\r\n Content-length: $len\r\n \r\n $message でどうですか? これが原因なら、HTTP/1.0 にすればうまくいくはずです。 また、サーバのレスポンスは「400 Bad Request」となっているはずです。 それでもダメなら、 #!/usr/local/bin/perl $|=1; sysread(STDIN, $input,$ENV{CONTENT_LENGTH}); print "Content-type: text/plain\n\n"; print "$input\n"; という、データを受けて表示するだけの CGI を相手に、いろいろ 試してみて下さい。 |
いつも拝見しております。みのるです。(環境:SunOS5.6) いきなりで大変心苦しいのですが、"passwd"が実行不可となってしまいました。 急に -r-sr-sr-x 3 root 96392 Feb 24 1999 nispasswd* -r-sr-sr-x 3 root 96392 Feb 24 1999 passwd* -r-sr-sr-x 3 root 96392 Feb 24 1999 yppasswd* となりroot権限で"passwd"コマンドが利かなくなってしまい、 chmod 555 passwd でアクセス権を変更したのですが、 「passwd(SYSTEM): ○○○○ does not exist アクセス権が与えられていません。」とエラーになってしまいます。 シンボリックリンクにすればよいのでしょうか??? |
> -r-sr-sr-x 3 root 96392 Feb 24 1999 passwd* これで正しいです。suid/sgid が立ってないと root 以外のユーザが パスワード変更できなくなります。とりあえず % chmod 6555 /usr/bin/passwd で元に戻して下さい。それでも動かないなら、そのときの症状を書いて下さい。 |
見逃してた… spawn系の関数は、MS-DOSに特有のものです。 |
下記コマンドでも同じエラーになりました。 昨日、リンクを外してしまったのですが、、、それが原因でしょうか。。。 昨日の時点では、同じノードでした。 # chmod 6555 /bin/passwd # ls -ali | grep passwd 313716 -r-xr-xr-x 1 root 96392 Nov 16 11:57 nispasswd* 313666 -r-sr-sr-x 1 root 96392 Feb 24 1999 passwd* 313717 -r-xr-xr-x 1 root 96392 Nov 16 11:57 yppasswd* |
mmさん、ありがとうございます。 UNIX系では、無いのですかねぇ〜。 残念です。 |
> 昨日、リンクを外してしまったのですが、、、それが原因でしょうか。。。 多分これが原因じゃないとは思うんですが、元に戻すには # rm nispasswd yppasswd; ln passwd nispasswd; ln passwd yppasswd です。で、どういうエラーなのかいまいち掴めないんですが、 > 「passwd(SYSTEM): ○○○○ does not exist アクセス権が与えられていません。」 ○○○○ には何が入るんですか? ユーザ名? もし NIS 使ってたり、shadow 化してるなら、原因を突き止めづらいですね。 まわりのサーバと /etc のパーミッションを見比べてみてはどうでしょう。 # こーゆーときは truss が便利なんだけど、suid プログラムには # truss 使えないのね…。 > spawn系の関数は、MS-DOSに特有のものです。 なるほど。ラクダ本の TCP サーバの例で sub spawn というのが あるんで、C の新しい関数で似たものがあるのかと思ってました。 |
始めまして。 「ネットワークプログラミングの基礎知識」 非常に面白かったです。 これからもがんばってください。>68userさん さっそく質問なんですが。 うちにあるLinux(Vine 1.1)のApache1.3.3は CGIが「自分 グループ 他人」の「他人」の権限で 動くんです。 ところがCGIが他人の権限で動くのはまずいらしい ので自分権限で動くようにしたいのですがどうのように 設定ファイルを書きかえれば良いのでしょうか。。 調べてみた所,User命令 (http://japache.infoscience.co.jp/japanese_1_3/manual/mod/core.html#user) とかでやるんでしょうか? |
> これからもがんばってください。 どもども。ありがとうございます。 > CGIが「自分 グループ 他人」の「他人」の権限で動くんです。 正確には、nobody 権限で動く、でしょうね。 > ところがCGIが他人の権限で動くのはまずいらしいので これは管理者の方針によります。web しか置いていないサーバでは 各ユーザ権限で動かす方が安全でしょうけど、学校のようにメールや いろんなデータが置いてあるサーバで各ユーザ権限で動かすのは 危険 (CGIに穴があるとメールなども全て見られてしまう)、 という考え方もあります。 > 調べてみた所,User命令 それは、例えば apache を nobody 権限でなく www (というユーザ) の権限で動かしたい場合に使います。 例えば locate のデータなども、nobody 権限で作成されるので、 本来 apache は nobody 権限でなく www などの専用アカウントを 作って、その権限で動かした方が安全です。 で、結論としては http://japache.infoscience.co.jp/japanese_1_3/manual/suexec.html を使います。これを使うと CGI/SSI ともに各ユーザ権限で動きます。 長々と語っておいてアレですが、僕は suExec を設定したことはないです。 上のリンクにはコンパイルがどうこうって書いてありますが、必要なのかなぁ。 ソース持ってきて % ./configure --enable-suexec とするのではダメなんでしょうか。いろいろ試してみて下さい。 これとは別に、cgiwrap というのを使う方法もあります。 ftp://ftp.win.or.jp/pub/network/www/cgiwrap これだと CGI だけ各ユーザ権限で動きます。コンパイルして /usr/local/apache/cgi-bin/cgiwrap にインストールして、 http://localhost/cgi-bin/cgiwrap/~username/cginame.cgi とすると、/~username/cginame.cgi が username の権限で動きます。 httpd.conf に AliasMatch "^/([^/]+)/cgi-bin/(.*)$" "/cgi-bin/cgiwrap/$1/$2" などと書いておくと、/~username/cgi-bin/hoge.cgi にアクセスしただけで 各ユーザ権限で動かすこともできますね。 ん〜長くなってしまった。 |
>なるほど。ラクダ本の TCP サーバの例で sub spawn というのが spawn ってどういう意味なんだろうと以前から疑問だったので調べたら、 魚などの産卵という意味なのですね。 MS-DOSの spawn は、exec(3)を真似たものだと思います。 MS-DOSの主なコンパイラで使えるようです。 exec系のライブラリもありますが、例えばBorland C++の場合 int spawnve(int mode, char *path, char *argv[], char *envp[]); で、mode に P_WAIT を指定すると、親プロセスはそのままにして、 空きメモリで子プロセスを実行し、終了後に親プロセスに制御を戻します。 mode を P_OVERLAY にすると、execve() と同じになります。 |
いつもありがとうございます。みのるです。 > 「passwd(SYSTEM): ユーザアカウント does not exist アクセス権が与えられていません。」の件。 リンク等、元に戻す前に、"passwd"コマンド復活しました。現在、以下の状態です。 313666 -r-sr-sr-x 3 root 96392 Feb 24 1999 nispasswd* 313666 -r-sr-sr-x 3 root 96392 Feb 24 1999 passwd* 313666 -r-sr-sr-x 3 root 96392 Feb 24 1999 yppasswd* ただ、原因はまだ解りません。trussが使えたので、見てみてはいるのですが、不明です。 ここで質問なのですが、"root"以外のユーザでも、コマンド書換(もしくはアクセス権付与)は 可能でしょうか?私どものサーバセキュリティ上に問題があるような気がしてなりません。 |
> trussが使えたので なるほど。root なら使えるんですね。 > "root"以外のユーザでも、コマンド書換(もしくは > アクセス権付与)は可能でしょうか? root 以外の一般ユーザが /usr/bin/passwd を書き換えたり、 パーミッションを変更させることができるか、ということですか? もちろん普通は不可能ですが、セキュリティホールがある場合は その限りではありません。 「passwd が効かなくなった=クラック」というわけでも ないので、しばらく様子を見てはどうでしょう。 |
>68user 1999/11/17(水) 18:50 >> CGIが「自分 グループ 他人」の「他人」の権限で動くんです。 >正確には、nobody 権限で動く、でしょうね。 nobody権限というんですか。。 知らなかった(^^; >> ところがCGIが他人の権限で動くのはまずいらしいので >これは管理者の方針によります。 むむー なるほど。 ケースバイケースとかいうやつですか。 >で、結論としては > http://japache.infoscience.co.jp/japanese_1_3/manual/suexec.html >を使います。これを使うと CGI/SSI ともに各ユーザ権限で動きます。 > >長々と語っておいてアレですが、僕は suExec を設定したことはないです。 >上のリンクにはコンパイルがどうこうって書いてありますが、必要なのかなぁ。 >ソース持ってきて > % ./configure --enable-suexec >とするのではダメなんでしょうか。いろいろ試してみて下さい。 suEXEC。これですか Apacheのバージョンアップとともに試してみます。 上手くいったら報告に参りたいと思います。 >これとは別に、cgiwrap というのを使う方法もあります。 > ftp://ftp.win.or.jp/pub/network/www/cgiwrap > >これだと CGI だけ各ユーザ権限で動きます。コンパイルして >/usr/local/apache/cgi-bin/cgiwrap にインストールして、 > http://localhost/cgi-bin/cgiwrap/~username/cginame.cgi >とすると、/~username/cginame.cgi が username の権限で動きます。 >httpd.conf に > AliasMatch "^/([^/]+)/cgi-bin/(.*)$" "/cgi-bin/cgiwrap/$1/$2" >などと書いておくと、/~username/cgi-bin/hoge.cgi にアクセスしただけで >各ユーザ権限で動かすこともできますね。 suEXECのインストールに失敗したらこちらも試してみます。 |
> http://japache.infoscience.co.jp/japanese_1_3/manual/suexec.html やっぱりこれって古いのね。英語版の方を見て下さい。 http://japache.infoscience.co.jp/apache/docs/suexec.html うちでも apache1.3.9 を入れてみましたが、configure,make,make install で 簡単にインストールでき (configureのオプションを付けたり、httpd.conf の 手直しはしましたが)、suExec もうまく動きました。 > nobody権限というんですか。。 わかっておられるかもしれませんが念のため書いておきますと、他人の権限で 動くことを「nobody 権限」と呼ぶのではないです。実際に nobody という アカウントは実在しており (see /etc/passwd)、その権限で httpd は動いている、 ということです。 なんで nobody で動くかというと、httpd.conf に User nobody と書いてあるからです。 |
ちょっと時間が取れなくて 返事遅れました。(_ _) apache1.3.9は普通に? configure,make,make install でインストールできました。 suEXECも無事インストールできました。 CGIなどが各ユーザー権限で動いてました。 ありがとうございます。 >わかっておられるかもしれませんが念のため書いておきますと、他人の権限で >動くことを「nobody 権限」と呼ぶのではないです。実際に nobody という >アカウントは実在しており (see /etc/passwd)、その権限で httpd は動いている、 >ということです。 えぇ。その辺は大丈夫です。 |
ジェダイナイト、9面のシークレットエリア誰か教えて下さい。 |
ネットワークプログラミングの基礎知識、凄いです。素晴らしいです。 私のような無知にでもできてしまってちょっと怖いです。 (ほとんど切り貼り状態なんですが・・) FTPの項についてなんですが 「# FTPサーバに、子プロセスが待っているIPアドレスとポートの情報を渡す」 というのがありますよね。ftptras.plで初めて子プロセスは出てくるのでは。 それ以前の例示には「子プロセス」というコメントは必要無いのでは。 (ちょっとここで悩んでしまったので・・・。) |
> それ以前の例示には「子プロセス」というコメントは必要無いのでは。 どもども。ミスですね。直しておきます。 最初は fork しないと ftp クライアントは作れないと思ってました。 結局それは誤解だったので書き直したのですが、コメントの修正を 忘れてたようです。 # ftptrans で fork してるのも怪しい。ほんとに1プロセスで # できないのかなぁ? |
う〜〜ん。 ローカルのホスト名を得るにはどうすれば良いですか? 開いたSOCKETから手に入れる以外に適当な方法て無いですかしらん。 シェルコマンドは使わずにperlの関数だけで。 RFCの日本語訳ってほんと便利ですよね。感謝しながら読んでます。 PASVの返事て227だけみたいですね。あとは全部エラーみたい。 それと(x,x,x,x,x,x)の「括弧」が付かない場合もあるようですね。 正規表現もむつかしいけど頑張ってるとこおろです。 |
> ローカルのホスト名を得るにはどうすれば良いですか? 試してませんが、とりあえず http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.24 http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq9.html#How_do_I_find_out_my_hostname_do ここらあたりでうまくいかないですか? > あとは全部エラーみたい。 > それと(x,x,x,x,x,x)の「括弧」が付かない場合もあるようですね。 なるほど。ところで、こーゆーのがネットワークプログラムのヤな ところですよね。相手があってのものだから「これで正しいかどうか」 「完璧かどうか」がわからないという。 あと、真面目に作って配布でもするつもりなら http://hp.vector.co.jp/authors/VA002682/rfc1123j.htm も読んで下さい (もう読んでるかもしれませんが)。 # あと、data-connection の peer-port が 20(ftp-data) かどうかの # チェックもね。 |
68USERさんの中で最も得意なプログラミング言語はなんですか? |
elisp です。 …ウソです。perl か C ですけど、人に誇れるほどの レベルじゃないです。精進せねば。 |
色々ありがとうございました。 > 227だけみたい たしかに一番上の桁だけ見ろってRFCに書いてありました。 perlて俺のような無知な初心者にも優しい言語ですね! 構文規則が緩いっていうんですか、括弧とか適当でいいし。 とりあえず構文と関数のリファレンスさえあればなんとなく 出来てしまう。ありがたいことです。 まあ…そのおかげかperl使いな人も俺のような駄目パーラから 超スゴイ人まで腐るほど沢山居るらしくてperlなんか今更 「多少」使えても何の自慢にもならないみたいなんですが…。 でもでもこれからもperlで遊ぶぜえ〜。 じゃあさよならあ〜。 |
以前にPOSTに関して質問した者です。遅いレスですが…(^^; どうやら、ソケットに送るPOST〜$messageは、 個別に送った場合、途中の\r\nにHTTPDが反応してしまうようです。 なので、$sendとか、適当な変数に全部繋げて代入し、 print SOCKET $send; としなければならないようです。 HTTP/1.0を指定し、更にこの方法でやってみた所、POSTが成功しました。 ちなみに、HTTPバージョンを省略した場合は HTTP/1.1とみなされるみたいです。(全部そうとは限らない…かな?) |
> HTTPバージョンを省略した場合は HTTP/1.1とみなされるみたいです。 省略すると HTTP/0.9 になります。0.9 では GET 以外使えませんし、 ヘッダも送れません。例えば GET /~foo/index.html を送った時点で、サーバからレスポンスが返ってきます。なので、 > 途中の\r\nにHTTPDが反応してしまうようです。 これはそういうことじゃないでしょうか? なお、HTTP 0.9 で POST /~foo/index.html などとしようとすると、405 Method Not Allowed になるはずです。 |
というわけで、 > $sendとか、適当な変数に全部繋げて代入し、 > print SOCKET $send; としなければならない ということはあり得ないと思いますが、一応試してみたいので よろしければその掲示板の URL を教えて下さい。 |
おはようございます。 ネットワークプログラミングの基礎知識の C言語でHTTPクライアントを作ってみよう(2) ではperlと違いヘッダ部分が表示されてますよね? あれを本体部だけ表示するようにするにはどうしたらいいんでしょう? 色々やってみましたがどうも上手くいかなくて… 「UNIXの場合」はfgets関数をソケット読み出しにも使えますけど 某Windowsは勝手が違うんです。。 # どーみてもUNIXの方がやりやすい どんな感じかというのがhttp://www.nakka.com/inet/httpc.htmlの 赤系の色で 「/* サーバからデータを受信する処理 */」 とか書かれてる辺りです。 なんとなく見るとやりにくいのがわかるかと^^;; どうすればいいでしょうか? 思いついたのでいいですからレスください。 どうもアイデアが・・・・ |
while (1){ char buf[BUF_LEN]; int read_size; static int body_flg = 0; char *p; read_size = read(s,buf,BUF_LEN); if ( read_size > 0 ){ if ( body_flg ){ p = buf; } else if ( p = strstr(buf,"\r\n\r\n") ){ /* 空行はあるか? */ p+=4; /* \r\n\r\n の分先に進める */ read_size -= p-buf; /* サイズ調整 */ body_flg = 1; } if ( body_flg ){ write(1,p,read_size); } } else { break; } } こんな感じでどうでしょうか? |