岡本@大阪医科大学です。
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/