|
なぜじゃ〜どうしてじゃ〜←狭間かんぺい調(爆) >一般ユーザで... これもだめです。68Userさんが前に書いたとおりアクセス件が無いと 怒られます。 Insecure $ENV{PATH} while running setuid at ./su.cgi line 13. と出ました。 >httpdのエラーログに、PATHがどうこう、と... アパッチのerror_logは、だんまりです。(>_<) >ここらへんがくさいです。 これも68Userさんと同じコードで試しました、がダメ。 ひとつ不思議を見つけました。 perl -c とすると、Args must match #! line at su.cgi line 1. と出ます。 んっ! とここまで書いて、他の事をいろいろ調べたらどうもこれが 前に疑問だった、suExecの機能のようです。 http://japache.infoscience.co.jp/japanese/manual/suexec.html ってことは、68Userさんの環境はsuExecが実装された環境のようで すね。 #今夜はずっとこの問題で格闘していたのでつかれた....ふげっ! aliasの件は、ダミーユーザー(ログオンしない)宛のメールを管理 者に転送するという意味です。 #やってみれば分かりますね...(^^; .bashrc等の設定ファイルに記述するのは、普通コマンドのailas なのですか? #なんかドッとつかれた....(T_T) |
|
うちでは #!/usr/local/bin/suidperl でも動きました。 > perl -c とすると、Args must match #! line at su.cgi line 1. と出ます。 suidスクリプトの実行時には、perlに渡す引数と suidperlに渡す引数が同じでなくてはいけません。 # …と、青ラクダ本に書いてありました。 > これも68Userさんと同じコードで試しました、がダメ。 /usr/bin/perl は perl5 ですか? FreeBSDの場合、FreeBSD 3.0R から /usr/bin/perl が perl5 に なったのですが(それまではperl4)、その /usr/bin/perl は suidperl が起動しないようになっていると聞きます。Linuxでも OSの方針で、suidperlを実行しないようにコンパイルされている のかもしれません。 > 68Userさんの環境はsuExecが実装された環境のようですね。 いえ、うちにはSuExecは入れてません。 何か問題が発生すると原因を切りわけていく必要があります。 httpdが原因かもしれないので、CGI経由で実行するより コマンドラインで実行すべきかと思います。 > aliasの件は、ダミーユーザー(ログオンしない)宛のメールを管理 > 者に転送するという意味です。 ん〜、まだちょっと意味がわかりかねます。 > .bashrc等の設定ファイルに記述するのは、普通コマンドのailas > なのですか? そうです。コマンドの alias と /etc/aliases は全く別物です。 ROLさん > ついにLinux起動いたしました(笑) FreeBSDじゃないんですねぇ(^^; > しかし、ここの話題についていけるようになるのに、どれだけの時間がかかるやら…(笑) やる気があればすぐですよん。 |
|
え〜、FreeBSDでは、gethostby* は libc に入ってますので、 gethostbyaddr のソースは http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1 ここらへんです。/etc/hostsなどを見て、見付からなかったらDNS引きに いきますが、それを担当するのは http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1 の struct hostent * _gethostbydnsname(addr, len, af) あたりでしょうか。で、そこらへんの絡みで、 static struct hostent * gethostanswer(answer, anslen, qname, qtype) が呼ばれますが、そこで host.h_aliases = host_aliases; host.h_addr_list = h_addr_ptrs; といったことをしています。で、host_aliases や h_addr_ptrs は gethostnamaddr.cの先頭で static char *h_addr_ptrs[MAXADDRS + 1]; static struct hostent host; static char *host_aliases[MAXALIASES]; static char hostbuf[8*1024]; などと定義されいます。ちなみに #define MAXALIASES 35 #define MAXADDRS 35 です。 > これらがすべて静的領域に確保されているとは考え難いと思います。 というわけで、全て static で宣言されているようですね。当然ですが if (hap >= &h_addr_ptrs[MAXADDRS-1]) { if (!toobig++) dprintf("Too many addresses (%d)\n",MAXADDRS); エラーチェックもしています。 > 先日某所で尋ねられた件について、ちょっと分からなかったので、 > 質問させて下さい。 もしよろしければ、その話題が出たのはどこなのか教えていただけますか? こういう楽しい話題が出るところに参加したいもので。 |
|
> いきますが、それを担当するのは > http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostnamadr.c?rev=1.10.2.1 失礼、 http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/net/gethostbydns.c?rev=1.23 こっちでした。 でも、char **である host_aliases や h_addr_ptrs が指している char * な領域ってのはどこかな? よく読んでませんが、 static char hostbuf[8*1024]; っぽいですね。 |