[FreeBSD-users-jp 92593] Re: w -n?

2009-11-16 スレッド表示 HIGASHI Taku
私のところ(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?

2009-11-16 スレッド表示 candy
御回答ありがとうございます。

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?

2009-11-16 スレッド表示 candy
いつもありがとうございます。

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--


神田