vine-users ML アーカイブ



[vine-users:050887] netatalk 1.5 のバグ

  • From: Akihiro Okamoto <med012@xxxxxxxxxxxxxxxxxxx>
  • Subject: [vine-users:050887] netatalk 1.5 のバグ
  • Date: Mon, 27 May 2002 14:06:29 +0900
岡本@大阪医科大学です。

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/