Etersoft/samba
Взаимодействие Wine с CIFS-сервером
Ссылки
Документация
Устаревшее: постановка задачи
Основная задача: сообщить 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, там заполняются ShareAccess и DesiredAccess
wineserver: файл fd.c, функция check_sharing