<!doctype article public "-//OASIS//DTD DocBook V3.1//EN">
<article>

<artheader>
<title>poppassd のインストール方法</title>
<author>
 <firstname>田中啓</firstname>
 <surname></surname>
 <affiliation>
  <address>pegira@po.jah.ne.jp</address>
 </affiliation>
</author>
<pubdate>1999/01/27</pubdate>
<abstract><para>
<!--０．poppassd のインストールの方法 (1.2-8)-->
Linux がインストールされているマシンに poppassd をインストールする方法を記述
します。ただし、「NIS」を使用していない場合に限定します。
</para></abstract>
</artheader>

<sect1 id="intro">
<title>poppassd ってなに？</title>
<para>
メールサーバのパスワードを変更する事ができる「電子メールクライアントソフト」が
あります (Eudora , NUPOP , P ちゃん , p-chng , POPパスワード , POPパスワード
チェンジャ 等)。しかし、サーバ側で対応したデーモン(サービス)が動作していない
と「電子メールクライアントソフト」からパスワードを変更することはできません。
ちなみにメールをサーバに送信できるのは、サーバで「SMTP デーモン」が動いているからです。
同じくメールをサーバから受信できるのは、サーバで「POP3 デーモン」が動いているからです。
よって、パスワードを変更するデーモンをサーバにインストールしておくと、サーバに telnet して、 
<command>/usr/bin/passwd</command> コマンドを使用してパスワードを変更するといった面倒な操作
をしなくても、パスワードを変更できるようになります。
</para><para>
poppassd とは unix 用のパスワードを変更するデーモンまたはそのプロトコルの名前です。
</para>
</sect1>

<sect1 id="protocol">
<title>poppassd のプロトコル</title>
<para>
単純なプロトコルです。
FTP サーバーが応答するように、サーバーの応答が必ずあるはずです。
サーバの応答の先頭の数字が意味を持ってます。
</para><para>
<screen>
  100番台：前進
  200番台：成功
  300番台：さらに情報が必要
  400番台：一時的な失敗
  500番台：永久的な失敗
</screen>
</para><para>
サンプルを以下に示します。
</para><para>
<screen>
  S: 200 hello\r\n
  E: user yourloginname\r\n
  S: 300 please send your password now\r\n
  E: pass yourcurrentpassword\r\n
  S: 200 My, that was tasty\r\n
  E: newpass yournewpassword\r\n
  S: 200 Happy to oblige\r\n
  E: quit\r\n
  S: 200 Bye-bye\r\n
  S: &lt;closes connection&gt;
  E: &lt;closes connection&gt;
</screen>
</para>
</sect1>

<sect1 id="env">
<title>試した環境</title>
<para><screen>
  Machine    : CPU=Pentium200 Memory=40MB HDD=1GB
  OS         : linux kernel 2.0.35 (Slackware3.6)
  C-Compiler : gcc version 2.7.2.3
  Library    : libc 5.4.46
</screen>
</para><para>
ディストリビューション Slackware3.6 でインストールした「Linux マシン(BOX)」なので、
パスワードシステムは「shadow パスワード」システムになっています。
</para>
</sect1>

<sect1 id="source">
<title>poppassd のソースの入手</title>
<para>
poppassd は Eudora というメールクライアントソフトに添付されています。
Eudora を販売している会社である Qualcomm 社の FTP サイト 
<ulink url="ftp://ftp.qualcomm.com/eudora/servers/unix/password/">
ftp://ftp.qualcomm.com/eudora/servers/unix/password/</ulink> 
にもソースが置いてあります。
Linux 用のソースは 
<ulink url="ftp://ftp.qualcomm.com/eudora/servers/unix/password/linux.tar">
ftp://ftp.qualcomm.com/eudora/servers/unix/password/linux.tar</ulink> 
のファイルです。
ただし、この Qualcomm 社の poppassd は「shadow パスワード」に対応していません。
</para><para>
しかし、世の中には「shadow パスワード」に対応した poppassd を作っている人がいます。
Roy Smith さんと Daniel L. Leavitt さんの作った poppasd を改良した John Norstad さんです。
1993/8/31 にリリースされたバージョン 1.2 が最新バージョンです。
John Norstad さんの poppassd は sunsite 等に収録されています。
<ulink url="ftp://sunsite.sut.ac.jp/pub/archives/linux/system/mail/pop/poppassd-src.tar.gz">
ftp://sunsite.sut.ac.jp/pub/archives/linux/system/mail/pop/poppassd-src.tar.gz</ulink>
</para><para>
その後、John Norstad さんのバージョン 1.2 を元にして Christoph Lameter さんが改良しました。
改良版のバージョン 1.2-8 が 1997/11/13 にリリースされました。
主な変更内容はパスワードの変更方法を <command>/usr/bin/passwd</command> コマンドから 
<command>/usr/sbin/newusers</command> コマンドへ変更した事です。
</para><para>
この変更により、<command>/usr/bin/passwd</command> コマンドが受け付けない短いパスワードや、
アルファベットだけの
シンプルなパスワードが入力された場合に poppassd がハングアップするバグ等が修正されています。
Christoph Lameter さんは Debian （Linux のディストリビューションの一つ）のメンテナーでもあります。
バージョン 1.2-8 は Debian のパッケージ等に収録されています。
</para><para>
結論
Debian のパッケージに入っているソースを使用します。
Debian JP Project のサイト等からソースファイルをダウンロードします。
<ulink url="ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/">
ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/</ulink> 等から
<ulink 
url="ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/poppassd_1.2.orig.tar.gz">
ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/poppassd_1.2.orig.tar.gz</ulink>
 と
<ulink 
url="ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/poppassd_1.2-8.diff.gz">
ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/poppassd_1.2-8.diff.gz</ulink> 
をダウンロードします。
または Debian の CD-ROM のソースディレクトリからコピーしても良いでしょう。
</para>
</sect1>

<sect1 id="install">
<title>poppassd のインストール方法</title>

<para>
<orderedlist>
<listitem><para>
適当な作業ディレクトリに <filename>poppassd_1.2.orig.tar.gz</filename> をコピーします。
または ftp で Get します。
</para></listitem>

<listitem><para>
<filename>poppassd_1.2.orig.tar.gz</filename> を展開します。
</para><para>
<programlisting>
  tar zxvf poppassd_1.2.orig.tar.gz
</programlisting>
</para><para>
<filename class="directory">poppassd-1.2.orig/</filename> ディレクトリに以下の
ファイルが展開されます。
</para><para>
<programlisting>
  -rw-r--r--   1 hogehoge users         363 May  7  1995 Makefile
  -rw-r--r--   1 hogehoge users         138 May  7  1995 README
  -rw-r--r--   1 hogehoge users        4817 May  7  1995 info
  -r--r--r--   1 hogehoge users         685 Sep 16  1996 poppassd-src.tar.gz.lsm
  -rw-r--r--   1 hogehoge users       21102 May  7  1995 poppassd.c
</programlisting>
</para></listitem>

<listitem><para>
バージョン  1.2 から 1.2-8 にバージョンアップするためのパッチファイル
(<filename>poppassd_1.2-8.diff</filename>)を作成します。
</para><para>
<filename>poppassd_1.2-8.diff.gz</filename> を <command>gzip</command> で展開すれば
パッチファイルを作成する事ができます。
</para><para>
<programlisting>
  gzip -d poppassd_1.2-8.diff.gz
</programlisting>
</para><para>
<filename>poppassd_1.2-8.diff</filename> パッチファイルができました。
</para><para>
<programlisting>
  -rw-r--r--   1 hogehoge users       21211 Jan 11 12:09 poppassd_1.2-8.diff
</programlisting>
</para></listitem>

<listitem><para>
<filename class="directory">poppassd-1.2.orig/</filename> にパッチファイルを
コピーします。
</para><para>
<programlisting>
  cp poppassd_1.2-8.diff poppassd-1.2.orig/
</programlisting>
</para></listitem>

<listitem><para>
カレントディレクトリを <filename class="directory">poppassd-1.2.orig/</filename> 
に移動します。
</para><para>
<programlisting>
  cd poppassd-1.2.orig/
</programlisting>
</para></listitem>

<listitem><para>
パッチをあてます。
</para><para>
<command>patch</command> コマンドを使ってパッチをあてました。
</para><para>
<programlisting>
  patch -p1 &lt; poppassd_1.2-8.diff
</programlisting>
</para><para>
パッチが正常にあたると以下のようにファイルが変更されるはずです。
</para><para>
<programlisting>
  -rw-r--r--   1 hogehoge users         375 Jan 11 12:12 Makefile
  -rw-r--r--   1 hogehoge users         363 May  7  1995 Makefile.orig
  -rw-r--r--   1 hogehoge users         138 May  7  1995 README
  drwxr-xr-x   2 hogehoge users        1024 Jan 11 12:12 debian/
  -rw-r--r--   1 hogehoge users        4817 May  7  1995 info
  -r--r--r--   1 hogehoge users         685 Sep 16  1996 poppassd-src.tar.gz.lsm
  -rw-r--r--   1 hogehoge users       11888 Jan 11 12:12 poppassd.c
  -rw-r--r--   1 hogehoge users       21102 May  7  1995 poppassd.c.orig
</programlisting>
</para></listitem>

<listitem><para>
メイクします。
</para><para>
<command>make</command> コマンドでメイクします。
</para><para>
<programlisting>
  make
</programlisting>
</para><para>
メイクすると実行ファイル poppassd ができます
(エラーが出てメイクに失敗した場合は「make でエラーが出る場合」を参照してください)。
</para></listitem>

<listitem><para>
インストールします。
</para><para>

<orderedlist>
<listitem><para>
<command>su</command> コマンドでスーパーユーザになります
(root のパスワードを入れるのを忘れないように)。
</para><para>
<programlisting>
  su
</programlisting>
</para></listitem>

<listitem><para>
<command>make install</command> で poppassd を <filename class="directory">
/usr/sbin/</filename> にインストールします。
</para><para>
<programlisting>
  make install
</programlisting>
</para></listitem>

<listitem><para>
<filename>/etc/services</filename> を変更します。
</para><para>
<filename>/etc/services</filename> ファイルに
</para><para>
<programlisting>
  poppassd     106/tcp
</programlisting>
</para><para>
の 1 行を追加します(TCP ポート 106 番のサービスが poppassd であるという意味です)。
</para></listitem>

<listitem><para>
<filename>/etc/inetd.conf</filename> を変更します。
</para><para>
<filename>/etc/inetd.conf</filename> ファイルに
</para><para>
<programlisting>
  poppassd stream tcp nowait root /usr/sbin/poppassd poppassd
</programlisting>
</para><para>
の一行を追加します。
6 番めの「<option>/usr/sbin/poppassd</option>」はあなたが poppassd をインストールした
パスを書く必要があります(<command>/usr/sbin/poppassd</command> で poppassd 
サービスを起動するという設定です)。
</para><para>
tcpd を使用している場合は
</para><para>
<programlisting>
  poppassd stream tcp nowait root /usr/sbin/tcpd /usr/sbin/poppassd
</programlisting>
</para><para>
の方が望ましいです(Slackware3.6 の場合は tcpd を使用するのが一般的です)。
</para></listitem>

<listitem><para>
inetd デーモンに設定が変更された事を通知します
(reboot すれば新しい設定で動作します)。
</para><para>
<programlisting>
  kill -HUP &lt;/usr/sbin/inetd のプロセスID&gt;
</programlisting>
</para><para>
または
</para><para>
<programlisting>
  reboot
</programlisting>
</para></listitem>
</orderedlist>
</para></listitem>

<listitem><para>
manpage をインストールします。
</para><para>
<filename class="directory">debian/</filename> ディレクトリに Christoph Lameter 
さんが書いた <filename>poppassd.8</filename> があるのでインストールしましょう
(英語のマニュアルが必要でない場合はインストールしなくても良いです)。
</para><para>

<orderedlist>
<listitem><para>
<command>su</command> コマンドでスーパーユーザになります。
</para><para>
<programlisting>
  su
</programlisting>
</para></listitem>
<listitem><para>
<command>install</command> コマンドでインストールします。
</para><para>
カレントディレクトリを <filename class="directory">debian/</filename> ディレクトリ
に移動してから下記の様なコマンドでインストールしましょう。
</para><para>
<programlisting>
  install -c -m 644 poppassd.8 /usr/man/man8
</programlisting>
</para></listitem>
<listitem><para>
<command>man</command> コマンドを使用して poppassd のマニュアルを読めるかをテストします。
</para><para>
<programlisting>
  man poppassd
</programlisting>
</para><para>
マニュアルが表示されれば poppassd の manpage のインストールに成功です。
</para></listitem>
</orderedlist>

</para></listitem>
</orderedlist>
</para>
</sect1>

<sect1 id="errors">
<title>make でエラーが出る場合</title>
<para>
筆者の環境では make でエラーが出ました。
エラーメッセージは
</para><para>
<screen>
  poppassd.c:146: conflicting types for `crypt'
  /usr/include/unistd.h:639: previous declaration of `crypt'
</screen>
</para><para>
でした。
「<filename>poppassd.c</filename> をコンパイルしようとしたんだけど 146 行で宣言している 
`<function>crypt</function>' が以前に宣言された型と違います」というエラーです。
<filename>poppassd.c</filename> ファイルの 146 行の内容は
</para><para>
<programlisting>
  char *crypt (char *, char *);   /* To permit long shadow passwords */
</programlisting>
</para><para>
です。
</para><para>
<function>crypt()</function> 関数の宣言は <filename>unistd.h</filename> に含まれて
います。<filename>poppassd.c</filename> では <filename>unistd.h</filename> をインク
ルードしています。よって、冗長なので削除したりコメントアウトしても問題ありません。
<filename>poppassd.c</filename> ファイルの 146 行を削除しましょう。
コメントアウトするためには以下の様に変更します。
</para><para>
<programlisting>
  C 言語の /* */ でコメントアウトする場合

  /* char *crypt (char *, char *);*/   /* To permit long shadow passwords */

  C++ 言語の // でコメントアウトする場合

  // char *crypt (char *, char *);   /* To permit long shadow passwords */
</programlisting>
</para><para>
変更したら、また <command>make</command> コマンドでメイクします。
</para><para>
すると、またエラーが出ました。
エラーメッセージは
</para><para>
<programlisting>
  cc -o poppassd  poppassd.o -lcrypt
  /usr/i486-linux/bin/ld: cannot open -lcrypt: No such file or directory
</programlisting>
</para><para>
でした。
「リンクしようとしたけど <filename>crypt</filename> というライブラリファイルが無い」
というエラーです。<filename>crypt</filename> ライブラリに含まれていそうで poppassd 
が使用している関数は <function>crypt()</function> だと推測されます
(ソースを読んで推測しました)。
<function>crypt()</function> 関数は <filename>libc.so</filename> (<filename>libc.so
</filename> の実体は <filename>libc.so.5.4.46</filename>) に含まれているので 
<option>-lcrypt</option> 指定は必要ありません。
よって Makefile ファイルの 6 行目のライブラリの指定をコメントアウトします。
メイクファイルのコメントマークは # です。
</para><para>
<programlisting>
  LIBS    = -lcrypt # -lshadow
</programlisting>
</para><para>
の一行を
</para><para>
<programlisting>
  LIBS    = # -lcrypt # -lshadow
</programlisting>
</para><para>
に変更しました。
</para><para>
変更したら、また <command>make</command> コマンドでメイクします。
筆者は上記の 2 ヶ所の変更でメイクに成功しました。
</para><para>
注意）<filename>libc.so</filename> に含まれている関数はライブラリのバージョンによって
違う場合があります。<filename>libc.so.5.4.46</filename> 以外のライブラリを使用している
場合は <filename>libcrypt.so</filename> 等が必要な場合があります。
例えば、ライブラリが glibc2 の場合は <filename>libc.so.6</filename> に 
<function>crypt()</function> 関数が入っていませんので <filename>libcrypt</filename> を
リンクする必要があります。
</para>
</sect1>

<sect1 id="caution">
<title>インストールに成功して、テストの結果にも問題無いが、パスワードが
変更されない場合</title>
<para>
poppassd は <command>/usr/sbin/newusers</command> コマンドを使用してパスワードを
変更しています。<command>/usr/sbin/newusers</command> コマンドがインストールされてない
場合、 syslog に下記の様な
エラーメッセージを出力しているはずです。
</para><para>
<programlisting>
  poppassd&lsqb;695&rsqb;: can't exec /usr/sbin/newusers: No such file or directory
</programlisting>
</para><para>
上記に該当する場合は <command>/usr/sbin/newusers</command> コマンドをインストールする
事により問題が解決します。
</para><para>
<command>/usr/sbin/newusers</command> コマンドは「shadow パスワード」パッケージに
入っています。Slackware3.6 に含まれている「shadow パスワード」パッケージのファイル名は 
<filename>shadow-980724.tar.gz</filename> です。
あなたのシステムのパスワードシステムが「shadow パスワード」でない場合でも、
「shadow パスワード」に対応していない <command>/usr/sbin/newusers</command> をインストール
すれば問題を解決できます。
</para>
<sect2 id="newusers">
<title>/usr/sbin/newusers のインストールの方法</title>
<para>
<orderedlist>
<listitem><para>
適当なディレクトリに <filename>shadow-980724.tar.gz</filename> をコピーします。
または ftp で Get します。
</para></listitem>

<listitem><para>
<filename>shadow-980724.tar.gz</filename> を展開します。
</para><para>
<programlisting>
  tar -zxvf shadow-980724.tar.gz
</programlisting>
</para></listitem>

<listitem><para>
<command>configure</command> で <filename>Makefile</filename> 等を作成します。
</para><para>
<command>configure</command> が正常に動作すれば、あなたのマシンのパスワード
システムに対応したバイナリを作成するように <filename>Makefile</filename> を
作成します。
</para><para>
<programlisting>
  configure
</programlisting>
</para></listitem>

<listitem><para>
メイクします。
</para><para>
<programlisting>
  make
</programlisting>
</para><para>
メイクに成功したら <filename class="directory">src/</filename> ディレクトリに 
<command>newusers</command> ができあがっているはずです。
</para><para>
<programlisting>
  -rwxr-xr-x   1 hogehoge users        2837 Jan 20 21:46 newusers
</programlisting>
</para></listitem>
</orderedlist>
</para>
</sect2>

<sect2 id="install2">
<title>インストールします</title>
<para>
<orderedlist>
<listitem><para>
スーパーユーザモードになってから
</para><para>
<programlisting>
  su
</programlisting>
</para></listitem>

<listitem><para>
<command>install</command> コマンドでインストールします。
</para><para>
カレントディレクトリを <filename class="directory">src/</filename> ディレクトリに
移動してから下記の様なコマンドでインストールしましょう。
</para><para>
<programlisting>
  install -o root -g bin -m 500 newusers /usr/sbin
</programlisting>
</para></listitem>
</orderedlist>
</para>
</sect2>
</sect1>

<sect1 id="test">
<title>poppassd のテスト方法</title>
<para>
サーバで
</para><para>
<programlisting>
  telnet localhost 106
</programlisting>
</para><para>
して poppassd に接続します。
あとはプロトコルを手で入力して確かめましょう。
</para><para>
成功例です。
</para><para>
<programlisting>
  trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^&rsqb;'.
  200 kiwi poppassd v1.2 hello, who are you?
  user hogehoge
  200 your password please.
  pass pswd1234
  200 your new password please.
  newpass newpass0
  200 Password changed, thank-you.
  quit
  200 Bye.
  Connection closed by foreign host.
</programlisting>
</para><para>
現在のパスワードが正しくない場合の例。
</para><para>
<programlisting>
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^&rsqb;'.
  200 kiwi poppassd v1.2 hello, who are you?
  user hogehoge
  200 your password please.
  pass pswd1233（正しくないパスワード）
  200 your new password please.
  newpass newpass0
  500 Invalid user or password
  Connection closed by foreign host.
</programlisting>
</para>
</sect1>

<sect1 id="links">
<title>poppassd 関連のリンク</title>
<para>
<itemizedlist>
<listitem><para>
本家 Qualcomm： <ulink url="http://www.qualcomm.com/">http://www.qualcomm.com/</ulink>
</para></listitem>
<listitem><para>
Debian： <ulink url="http://www.debian.org/">http://www.debian.org/</ulink>
</para></listitem>
<listitem><para>
DebianJP： <ulink url="http://www.jp.debian.org/">http://www.jp.debian.org/</ulink>
</para></listitem>
</itemizedlist>
</para>

<para>
<variablelist>
<varlistentry>
<term>poppassd のクライアントソフト</term>
<listitem><para>
p-chng： <ulink url="http://www.nets.or.jp/~chaya/">http://www.nets.or.jp/~chaya/</ulink>
</para><para>
POPパスワード： <ulink url="http://member.nifty.ne.jp/nya-n/">
http://member.nifty.ne.jp/nya-n/</ulink>
</para><para>
POPパスワードチェンジャ： <ulink url="http://www.vector.co.jp/soft/win95/net/se054124.html">
http://www.vector.co.jp/soft/win95/net/se054124.html</ulink>
</para></listitem>
</varlistentry>
</variablelist>
</para>
</sect1>

<sect1 id="copyright">
<title>筆者メールアドレス等</title>
<para>
<literallayout>
名前　　　　：田中 啓（たなか ひらく）
電子メール　：pegira@po.jah.ne.jp
ウェブページ：http://www.jah.ne.jp/~pegira/
校正　　　　：中野武雄、長谷川靖
配布条件　　：GPL
</literallayout></para>
<para>
(SGML conversion: yuji senda, 2001/03/12)
</para>
</sect1>

</article>
