岡本@大阪医科大学です。 Netatalk 1.5のバグおよび対策パッチの作製をおしらせします。 [症状] Vine Linux 2.5(i686) 上で netatalk-1.5.2 や netatalk-1.5.3.1 を動かしているとき、 Macintosh 側で古いシステム(System 7.5。こちらでは漢字Talk 7.5.5で確認)を 使って Linux -> Mac にファイルを転送すると、ファイルが壊れる。Mac -> Linux ではだいじょうぶ。 なお、Mac OS 9.2 には問題なく転送できる。 [原因] etc/afpd/fork.c にバグ [対策] 以下のパッチを netatalk-1.5.3.1/ で patch -p1 < する。 漢字Talk 7.5.5 と Mac OS J1-9.2.2 で動作確認済 (完全な動作を保証するものではありませんのであしからず)。 以下のパッチと日本語EUC化パッチを当てた netatalk-1.5.3.1-1.{src,i386}.rpm for Vine 2.5 を http://www.osaka-med.ac.jp/~med012/HomePage/Vine25/ に置いておきます。 それと、netatalk-1.5.3.1の日本語化に関してメールをいただきましたシノバーさん にお礼を申し上げます。 [パッチファイル] --- netatalk-1.5.3.1/etc/afpd/fork.c.orig Tue May 21 12:58:57 2002 +++ netatalk-1.5.3.1/etc/afpd/fork.c Tue May 21 14:36:20 2002 @@ -852,13 +852,6 @@ goto afp_read_err; } - /* subtract off the offset */ - size -= offset; - savereqcount = reqcount; - if (reqcount > size) { - reqcount = size; - err = AFPERR_EOF; - } saveoff = offset; /* if EOF lock on the old reqcount, some prg may need it */ @@ -882,6 +875,14 @@ if ((obj->proto == AFPPROTO_DSI) && (*rbuflen < reqcount) && !nlmask) { DSI *dsi = obj->handle; + /* subtract off the offset */ + size -= offset; + savereqcount = reqcount; + if (reqcount > size) { + reqcount = size; + err = AFPERR_EOF; + } + if (obj->options.flags & OPTION_DEBUG) { printf( "(read) reply: %d/%d, %d\n", *rbuflen, reqcount, dsi->clientID); --- Akihiro Okamoto (med012@xxxxxxxxxxxxxxxxxxx) Osaka Medical College, Biochemistry http://www.osaka-med.ac.jp/~med012/HomePage/