[FreeBSD-users-jp 92593] Re: w -n?
私のところ(FreeBSD 7.2-RELEASE-p4)では問題無いです。 ざっくりソースを眺めましたが、-nが指定されたときに設定される nflagが未初期化(初期値不定)であることから、以下の処理に 入ってしまうのではないでしょうか。 if (!nflag) { /* 逆引き処理 */ } では。 On Tue, 17 Nov 2009 14:48:52 +0900 ca...@kgc.co.jp wrote: こんにちは。 最近の(?) FreeBSD は w(1) の -n オプション(逆引きしない)が効かないような気がするのですが、 皆様のところはいかがですか? $ uname -srm FreeBSD 7.2-RELEASE i386 $ w -n 2:38PM up 4 days, 2:09, 2 users, load averages: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE WHAT candyp1 xx.example.jp 2:38PM - w -n $ w 2:38PM up 4 days, 2:09, 2 users, load averages: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE WHAT candyp1 xx.example.jp 2:38PM - w FreeBSD 6.1-RELEASE でも同様でした。 結構困ります。 ちなみに FreeBSD 4 の頃は期待通り動いてました。 $ uname -srm FreeBSD 4.11-RELEASE-p26 i386 $ w -n 2:37PM up 505 days, 4:38, 1 user, load averages: 2.08, 2.02, 2.01 USER TTY FROM LOGIN@ IDLE WHAT candyp0 ???.45.67.89 2:28PM - w -n $ w 2:37PM up 505 days, 4:38, 1 user, load averages: 2.07, 2.02, 2.00 USER TTY FROM LOGIN@ IDLE WHAT candyp0 xx.example.jp 2:28PM - w ソースコードを見ましたがよくわかりません。 神田
[FreeBSD-users-jp 92595] Re: w -n?
御回答ありがとうございます。 From: HIGASHI Taku ool...@cslab.co.jp Subject: [FreeBSD-users-jp 92593] Re: w -n? Date: Tue, 17 Nov 2009 15:28:46 +0900 私のところ(FreeBSD 7.2-RELEASE-p4)では問題無いです。 FreeBSD 7.2-RELEASE-p4 i386 で試しましたが、 w -n でもホスト名が表示されてしまいました。 何が違うのでしょうね? ざっくりソースを眺めましたが、-nが指定されたときに設定される nflagが未初期化(初期値不定)であることから、以下の処理に 入ってしまうのではないでしょうか。 if (!nflag) { /* 逆引き処理 */ } ちょっと gdb で追いかけてみました。 nflag は global 変数なので 0 で初期化されているはずです。 また問題なのは -n 指定時なので、nflag は必ず 1 に設定され、 上記コードは実行されません。 どうも /var/run/utmp からして既にホスト名で入ってるようなので、 ep-utmp.ut_host にはホスト名が入ることになります。 それで FreeBSD 4.11 の w.c は -n 指定時わざわざそれを gethostbyname(3) して inet_ntoa(3) して表示しています。 -n の動作は「逆引きしない」ではなく「正引きして表示する」が実情なようです。 7.2R のコードではその部分がそっくり存在しないような気がします。 神田
[FreeBSD-users-jp 92597] Re: w -n?
いつもありがとうございます。 From: Hajimu UMEMOTO u...@mahoroba.org Subject: [FreeBSD-users-jp 92594] Re: w -n? Date: Tue, 17 Nov 2009 16:06:25 +0900 utmp に IP アドレスで記録されいれば、-n が機能するはずで す。 了解しました。 この辺の挙動は 4.X の頃から変わってないと思います。 ただし、utmp に自前で書くプログラムだと、どういう風に書くかによるでしょ う。例えば、sshd は自前で書いていたと思います。また、sshd は、PAM を使 うかどうかによって、この辺の挙動が変わるかもしれません。 4.11 の utmp にもホスト名で入ってました。 ただ、先のメールに書いた通り、4.11 の w.c には 「ホスト名っぽかったら正引きする」 コードが入っているので IP address 表示されます。 ただ今回の目的は「ssh 接続元の IP address を知る」なので、 ・ utmp には逆引きしたホスト名が入ってる場合がある ・ w -n はそれを正引きする ・ 逆引きの正引きが元 IP address とは限らない よって w -n 使うのは不適当。 $ sockstat | grep -w sshd | 目グレップ または $ sockstat | grep candy あたりが妥当な線ですかね。 勉強になりました。 今後タイプ量が増えますな。 wn ってコマンド作ればいいか。 ---8--- /usr/local/bin/wn --8-- #!/bin/sh sockstat | grep -w $USER ---8-8888-- 神田