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

HAT hat @ fa2.so-net.ne.jp
2013年 3月 28日 (木) 21:39:40 JST


HATです。

お二人に提供して頂いたmaxdebugのlogにより、だいたい現象がわかりました。
再現方法もわかりました。
パッチは全く書いてません。

2つのログで同じ現象が確認できます。

FreeBSD / ZFS / netatalk 3.0.2 の場合

Mar 27 23:51:18.612910 afpd[14075] {afp_dsi.c:624} (D5:AFPDaemon): <== Start AFP command: AFP_SETFORKPARAM
Mar 27 23:51:18.612982 afpd[14075] {ad_lock.c:515} (D5:ad): ad_tmplock(reso, WR, off: 0 (-), len: 286): BEGIN
Mar 27 23:51:18.613009 afpd[14075] {ad_lock.c:72} (D5:ad): set_lock(fd: 13, F_SETLK, F_WRLCK, off: 82 (-), len: 286): BEGIN
Mar 27 23:51:18.613038 afpd[14075] {ad_lock.c:567} (D5:ad): ad_tmplock: END: 0
Mar 27 23:51:18.613084 afpd[14075] {ad_write.c:176} (E:ad): ad_rtruncate("/zdata3/none/でざいん.psd"): No such file or directory
Mar 27 23:51:18.613111 afpd[14075] {ad_lock.c:515} (D5:ad): ad_tmplock(reso, CLR, off: 0 (-), len: 286): BEGIN
Mar 27 23:51:18.613136 afpd[14075] {ad_lock.c:72} (D5:ad): set_lock(fd: 13, F_SETLK, F_UNLCK, off: 82 (-), len: 286): BEGIN
Mar 27 23:51:18.613165 afpd[14075] {ad_lock.c:567} (D5:ad): ad_tmplock: END: 0
Mar 27 23:51:18.613190 afpd[14075] {afp_dsi.c:631} (D5:AFPDaemon): ==> Finished AFP command: AFP_SETFORKPARAM -> AFPERR_PARAM


CentOS / netatalk 3.0.3 の場合

Mar 28 01:24:54.828215 afpd[21725] {afp_dsi.c:604} (D5:AFPDaemon): <== Start AFP command: AFP_SETFORKPARAM
Mar 28 01:24:54.828271 afpd[21725] {ad_lock.c:515} (D5:ad): ad_tmplock(reso, WR, off: 0 (-), len: 24221): BEGIN
Mar 28 01:24:54.828322 afpd[21725] {ad_lock.c:72} (D5:ad): set_lock(fd: 13, F_SETLK, F_WRLCK, off: 82 (-), len: 24221): BEGIN
Mar 28 01:24:54.828359 afpd[21725] {ad_lock.c:567} (D5:ad): ad_tmplock: END: 0
Mar 28 01:24:54.828683 afpd[21725] {ad_write.c:176} (E:ad): ad_rtruncate("/hogehoge/でざいん.psd"): No such file or directory
Mar 28 01:24:54.828736 afpd[21725] {ad_lock.c:515} (D5:ad): ad_tmplock(reso, CLR, off: 0 (-), len: 24221): BEGIN
Mar 28 01:24:54.828770 afpd[21725] {ad_lock.c:72} (D5:ad): set_lock(fd: 13, F_SETLK, F_UNLCK, off: 82 (-), len: 24221): BEGIN
Mar 28 01:24:54.828807 afpd[21725] {ad_lock.c:567} (D5:ad): ad_tmplock: END: 0
Mar 28 01:24:54.828840 afpd[21725] {afp_dsi.c:613} (D5:AFPDaemon): ==> Finished AFP command: AFP_SETFORKPARAM -> AFPERR_PARAM

クライアントからAFP_SETFORKPARAMという命令が届き、それが完了するまでの
間にエラーが発生します。

この命令が届くと、etc/afpd/fork.cの中のafp_setforkparams()が呼び出され、
その中のad_rtruncate()が呼び出され、今回のエラーが発生します。

このFPSetForkParmsの仕様はAppleのドキュメントに書かれています。
https://developer.apple.com/library/mac/#documentation/Networking/Reference/AFP_Reference/Reference/reference.html

FPSetForkParms
Sets the length of a fork.

フォークの長さを設定する命令だそうです。

私の想像では、リソースフォークのサイズをゼロにしようとしたが、
文字コードの間違いにより該当ファイルを発見できず、エラーが発生します。

以下の方法で、Fedora 18上で再現しました。

濁点付きリソースフォーク付きファイルをnetatalk上に用意し、
クライアント側からコマンドラインで拡張属性com.apple.ResourceForkを
削除する。
するとエラーになり、リソースフォークは消えていない。

$ ls -l@
total 24
-rw-r-----@ 1 hat  staff  225  1 10  2010 ほげ.txt
	com.apple.FinderInfo	 32 
	com.apple.ResourceFork	4764 
	com.apple.TextEncoding	 15 
	com.apple.metadata:kMDItemFinderComment	 81 

$ xattr -d com.apple.ResourceFork ほげ.txt 
xattr: [Errno 22] Invalid argument: '\xe3\x81\xbb\xe3\x81\x91\xe3\x82\x99.txt'

$ ls -l@
total 24
-rw-r-----@ 1 hat  staff  225  1 10  2010 ほげ.txt
	com.apple.FinderInfo	 32 
	com.apple.ResourceFork	4764 
	com.apple.TextEncoding	 15 
	com.apple.metadata:kMDItemFinderComment	 81 


このときのlogは、

Mar 28 21:15:31.160286 afpd[968] {afp_dsi.c:604} (D5:AFPDaemon): <== Start AFP command: AFP_SETFORKPARAM
Mar 28 21:15:31.160298 afpd[968] {ad_lock.c:515} (D5:ad): ad_tmplock(reso, WR, off: 0 (-), len: 4764): BEGIN
Mar 28 21:15:31.160306 afpd[968] {ad_lock.c:72} (D5:ad): set_lock(fd: 17, F_SETLK, F_WRLCK, off: 82 (-), len: 4764): BEGIN
Mar 28 21:15:31.160313 afpd[968] {ad_lock.c:567} (D5:ad): ad_tmplock: END: 0
Mar 28 21:15:31.160331 afpd[968] {ad_write.c:176} (E:ad): ad_rtruncate("/home/hat/test/ほげ.txt"): No such file or directory
Mar 28 21:15:31.160339 afpd[968] {ad_lock.c:515} (D5:ad): ad_tmplock(reso, CLR, off: 0 (-), len: 4764): BEGIN
Mar 28 21:15:31.160346 afpd[968] {ad_lock.c:72} (D5:ad): set_lock(fd: 17, F_SETLK, F_UNLCK, off: 82 (-), len: 4764): BEGIN
Mar 28 21:15:31.160353 afpd[968] {ad_lock.c:567} (D5:ad): ad_tmplock: END: 0
Mar 28 21:15:31.160360 afpd[968] {afp_dsi.c:613} (D5:AFPDaemon): ==> Finished AFP command: AFP_SETFORKPARAM -> AFPERR_PARAM

そっくりです。

-- 
HAT


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