yppasswd の謎


SunOS4.1.4 にはパスワード変更コマンドとして、/bin/passwd と、その NIS 版の /bin/yppasswd があります。これらは、cmp で比較するとわかる通り、全く同じバイナリで、argv[0] を見て動作を切替えていると思われます。それならば、なぜ passwdyppasswd をハードリンクにしないのでしょうか?
リンクカウントは5

/bin/passwd は、同ディレクトリの chfn, chsh, ypchfn, ypchsh とハードリンクされていて、リンクカウントは 5 になっています。一方、yppasswd は同じバイナリなのにハードリンクされず取り残されています。

インストールメディアの構成が原因か?

この原因はインストールメディアの構成にあると思われます。 passwd, chfn, chsh, ypchfn, ypchsh の5つについては、SunOS4.1.4(Solaris1.1.2) CD-ROM の usr カテゴリの中に tar形式で収められています。この tar形式のファイルを展開すると、上記5つのバイナリはハードリンクになります。

一方、yppasswd は、usr ではなく networking という別のカテゴリ中に収められています。別々の tar ファイルにハードリンクのカタワレを収めることはできないので、 yppasswd だけ別ファイルになってしまいます。

おそらく、Sun の開発バージョンでは passwdyppasswd はちゃんとハードリンクされていて、これを tar で収める時に切れてしまったのではないかと思います。

しかし、そうだとしても…

yppasswd を、シンボリックリンクとして networking カテゴリに収めれば良かったのではないでしょうか。

・別のカテゴリに入れるにしても、ypchfnypchsh は networking に入れるべきではないでしょうか。

つまり、

  passwd,   chsh,   chfn    --  usr カテゴリ(ハードリンク)
  yppasswd, ypchsh, ypchfn  --  networking カテゴリ(ハードリンク)

とする方が自然だと思います。


Y2K パッチを当てる際にも…

現在 passwd については、2000年問題関係で 105146-02 という patch が出ています。この patch を当てる際にも、ハードリンクに注意するべきです。

105146-02 の中には passwdREADME ファイルが入っているだけですが、passwd/bin にコピー後は、chfn, chsh, ypchfn, ypchsh そして yppasswd とハードリンクして、リンクカウントが 6 になっていることを確認しましょう。

  $ ls -l /bin/passwd
  -rwsr-xr-x   6 root     staff       32768 Aug 19  1998 /bin/passwd

(ls は GNU ls のため、グループ名も表示されています)


To 謎の処理系 SunOS 4.1.4 Home
yamamori