samba 4 にしてから(一部の)ファイルコピーがうまくいかないと思ったら、smbd
が以下のエラーを出している。
smb_set_file_dosmode: file_set_dosmode of ~ failed: Function not implemented
dosmode ? そんなもの要らん!……ということであれば、smb.conf
に以下の項目を書けばよい模様。
store dos attributes = No
で、デフォルトが Yes なんだけど、実装されてない (not implemented) ってどういうこと?
……というわけでソースを眺める。(samba-4.21.3)
どうやら smb_set_file_dosmode (source3/smbd/smb2_trans2.c)
から file_set_dosmode (source3/smbd/dosmode.c)
を呼び出して、その中で何かが ENOSYS (Function not implemented)
を返したということらしい。
明示的に ENOSYS
を返している箇所はなさそうなので、それらしいところを探すと、……
/* Store the DOS attributes in an EA by preference. */
status = SMB_VFS_FSET_DOS_ATTRIBUTES(conn,
metadata_fsp(smb_fname->fsp),
dosmode);
if (NT_STATUS_IS_OK(status)) {
smb_fname->st.cached_dos_attributes = dosmode;
ret = 0;
goto done;
}
/*
* Only fall back to using UNIX modes if
* we get NOT_IMPLEMENTED.
*/
if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED)) {
errno = map_errno_from_nt_status(status);
return -1;
}
これだ!
ここまで予期されているエラーにしては、ちと不親切じゃないですかね。