В настоящее время я работаю над приложением небольшого побочного проекта, которое использует средство наблюдения за файлами для отслеживания изменений в указанных папках. Одним из наиболее распространенных способов использования приложения является сетевая папка, такая как samba. Примером одного из таких применений может быть:
- Один Windows-клиент
- Один клиент MacOS
- Один Linux-клиент
- Один сервер Ubuntu с сервисом Samba
Когда клиент Windows добавляет файл в общий ресурс, уведомляются только клиент MacOS и клиент Linux. Однако наблюдатели за файлами на каждом клиенте (включая клиент Windows) обнаружат новый файл. Чтобы предотвратить получение клиентом Windows («создателем» файла) уведомления, мне нужно, чтобы приложение могло знать, кто создал файл.
// какой-то странный псевдокод
функция onFileCreated(e) {
если (e.File.Creator == GetHostName())
возвращаться;
SendToastNotification (электронный файл);
}
В настоящее время каждый клиент входит в систему под одним и тем же пользователем Samba, и атрибут Owner отображает пользователя Samba (как и должно быть). Я не совсем понимаю внутреннюю работу Samba, но вот несколько подходов, о которых я думаю:
- У каждого клиента есть свой пользователь на сервере Samba (было бы утомительно добавлять больше клиентов в будущем)
- Каждый клиент несет ответственность за знание того, что он только что записал файл в общий ресурс Samba (потребуются привилегии высокого уровня для доступа к обработчикам файлов).
- Когда файл загружается в общий ресурс, сервер Samba каким-то образом может добавить произвольный пользовательский атрибут файла, обозначающий имя хоста любого клиента, создавшего файл (наилучший сценарий, если это возможно)
Возможно, есть варианты получше. Спасибо заранее.