samba で file_set_dosmode 関係のエラーが出る

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;
        }

これだ!

ここまで予期されているエラーにしては、ちと不親切じゃないですかね。