首页 > 解决方案 > samba 将文件名算法(hash2)修改为 python 中的 unix 文件名

问题描述

我的任务很简单,我有一个文件列表,其中一些文件被 samba 破坏,我必须使用一些 python 脚本在 linux 环境中处理这些文件。我想构建一个将 samba hash2 损坏的形式转换为原始 unix 路径的函数。

读取服务器的 smb 配置后,使用 hash2 和 1 个字符前缀 + 魔术字符 '~' 生成损坏的文件。

在 samba 文档中:https : //www.samba.org/samba/docs/current/man-html/smb.conf.5.html 没有提到如何计算 hash2,我在其他地方找不到任何答案.

此外,是用于计算 hash2 的完整路径还是仅最后一个目录名称?例如:

Z:/aaa/bbb/ccc/T3XBGA~5/3 - Two Shell - LabBaby™.mp3 //mangled form

/aaa/bbb/ccc/Two Shell - SoulCity E.P./3 - Two Shell - LabBaby™.mp3 //original unix path

如您所见,由于该文件夹中只有一个文件使用了 unicode 字符,因此发生了重整,但是 unix 路径的哪一部分用于计算此哈希?以及如何进行反向转换?

提前致谢

编辑: 在阅读 samba 源代码时,我意识到我说 dir name 由于 unicode ™ 字符而被破坏是错误的,在这种情况下,它被破坏是因为目录名称有 2 个点并以 '.' 结尾

    // mangle_hash2.c
    if (dot_p) {
        /* if the extension contains any illegal characters or
           is too long or zero length then we treat it as part
           of the prefix */
        for (i=0; i<4 && dot_p[i+1]; i++) {
            if (! FLAG_CHECK(dot_p[i+1], FLAG_ASCII)) {
                dot_p = NULL;
                break;
            }
        }
        if (i == 0 || i == 4) {
            dot_p = NULL;
        }

https://github.com/samba-team/samba/blob/24fb40a812184fa57458ae9f0f4ffbced1dee09a/source3/smbd/mangle_hash2.c#L707

标签: pythonpython-3.xunixhashsamba

解决方案


推荐阅读