[netatalk-ja:0134] Re: 3.0.2でPhotoshop CS5で濁音のファイルがセーブできない

HAT hat @ fa2.so-net.ne.jp
2013年 4月 1日 (月) 22:44:33 JST


HATです。

> convert_stringの使い方がいまいち良くわかりませんが、
> 添付のパッチでどうでしょうか?
> なお、developブランチで作業しました。
> 
> 一応削除できるようになったと思います。

動作確認してませんが、ちょっとみたところでは問題アリです。
convert_string_allocate()は単純な文字コード変換しかしないので、
Unix側のファイルシステム上の名前と一致しないケースがあります。
たぶんファイル名に「/」が含まれている場合にエラーになるんじゃないでしょうか。
Mac側が要求してくるファイル名はmangleされているケースもあるので、
demangleの処理も必要になります。

あと、元の文字コードをCH_UTF8_MACに固定しているのが気になります。
クライアントがMac OS 9以前だとすると、ここは旧mac charsetになっている
はずです。

ただ、AFP2.1/2.2のドキュメントを確認すると、
http://www.jammed.com/~jwa/hacks/security/asip/ASAppleTalkFiling2.1_2.2.pdf
FPSetForkParmsコマンドが定義されていません。
AFP3以降の新コマンドかもしれません。
だとすると、CH_UTF8_MACに固定しておいて問題ないことになりますが、
そもそもAppleのドキュメントは信用できないので悩みどころです。

ちょっと考えたところでは、使う関数はetc/afpd/desktop.cの中のmtoupath()が
最適だと思います。この関数は、
demangleの処理が入っており、
CH_UTF8_MACとvol->v_maccharsetのどちらを使うか判定できて、
convert_charset()に渡すflagsの処理も行います。

> また、リネームの方は未検証です。
> テストの仕方がまだわかりません。

両方同時に修正すると混乱するので、まずof_alloc()だけバグ修正してから、
of_rename()に手を付けませんか?
AFP2.1/2.2のドキュメントにFPMoveAndRenameというのがあるので、
もしかしたらMac OS 9以前もof_rename()を呼び出すかもしれません。
だとすると、ちゃんとCH_UTF8_MACかどうか判定する必要があります。

-- 
HAT


netatalk-ja メーリングリストの案内