Основная задача: сообщить samba-серверу о режиме разрешения другим доступа к файлу, и получить ответ, разрешён ли доступ нам. Из этого следует, что файл должен быть открыт с соответствующими правами.
Из-за реализации открытия файлов в Linux через модуль ядра можно это это сообщить только дополнительным вызовом (при этом придётся повторно открывать файл).
Особая сложность при сообщении о доступе из wineserver – поскольку потребуется открывать файл параллельно с открытием через системный вызов.
Возможно единственный вариант передачи нужной нам информации – через блокировки.
Вариант реализации | Плюсы | Минусы |
SAMBA-сервер | Будет работать с любой ОС Проще всего в реализации – добавить обращение к libwine-etersoft и всё (нельзя из-за GPL) | Требуется сборка сервера под каждую платформу Неправильное (временное) решение |
CIFS-модуль ядра | Может работать с любым CIFS-сервером (и Windows в том числе) Изменения в CIFS-модуле не страшно отдать под GPL | Будет работать только в Linux Проблемы со сборкой модулей под все ядра Всё равно менять wineserver для обращения к модулю |
wineserver – реализовать в нём обращение по CIFS | Самый правильный и независимый способ, позволит в дальнейшем всю функциональность реализовать. | Самый сложный вариант, много работы Нет проверенной клиентской библиотеки (libcli_smb) для SAMBA4 (но есть libsmbclient из SAMBA3 с необходимой функциональностью Проблема с несовместимостью лицензий (LGPL для wineserver и GPL для libcli_smb) |
SAMBA4: обработка открытия файла осуществляется в odb_tdb_open_file, откуда вызывается share_conflict для сверки shared и access.
модуль ядра cifs: CIFSSMBOpen, там заполняются Share Access? и Desired Access?
wineserver: файл fd.c, функция check_sharing
Ссылок на эту страницу нет