一次寻根之旅

问题描述:自己做了一个文件系统,在一定情况下文件读取会报错,尝试了很多错误值,但是windows总报权限错误
1.确定文件系统返回值:利用strace查看调用过程
首先通过smbstatus查找到链接samba的进程号


一次寻根之旅_第1张图片
查看samba状态.png
一次寻根之旅_第2张图片
ps&strace.png

通过strace的输出可以看到文件系统的返回值为EBUSY


一次寻根之旅_第3张图片
process.png

2.windows samba收到的错误码:利用Wireshark跟踪到windows侧收到的错误码为NT_STATUS_ACCESS_DENIED


一次寻根之旅_第4张图片
Wireshark.png

3.samba 源码调查:通过上面两步确定到linux文件系统的返回值跟windows侧收到的错误码不一样。然后在samba的源码中查找了一下,发现有一个错误码的对照表Errmap_unix.c。

总结:linux fs的错误码与windows收到的错误码部分对照表

Linux fs windows
EAGAIN NT_STATUS_NETWORK_BUSY
EINTR NT_STATUS_RETRY
EPERM NT_STATUS_ACCESS_DENIED
EIO NT_STATUS_IO_DEVICE_ERROR
EEXIST NT_STATUS_OBJECT_NAME_COLLISION

你可能感兴趣的:(一次寻根之旅)