Bug 47634 - При выходе на уровень вверх монтируются все папки сервера
Summary: При выходе на уровень вверх монтируются все папки сервера
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: kde5-autofs-shares (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Sergey V Turchin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-09-19 12:11 MSK by Корытов Иван
Modified: 2023-10-05 15:15 MSK (History)
3 users (show)

See Also:


Attachments
Запись экрана (604.42 KB, video/x-matroska)
2023-09-19 12:11 MSK, Корытов Иван
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Корытов Иван 2023-09-19 12:11:55 MSK
Created attachment 14459 [details]
Запись экрана

Шаги для воспроизведения:
1. Открыть Dolphin
2. Перейти на сервер при помощи раздела "В сети" или по прямой ссылке вида "smb://имя_сервера"
3. Нажать ПКМ на нужной папке, выбрать "Подключение"
4. Перейти по вновь появившейся папке в разделе "В сети"
5. Нажать кнопку "Перейти вверх"

Полученный результат: файловый менеджер переходит на уровень вверх, монтируются все папки с сервера, заполняется раздел "В сети" (особенно при 10+ общих папках)

Ожидаемый результат: файловый менеджер переходит на уровень вверх, ничего больше не происходит
Comment 1 Artem Varaksa 2023-09-25 19:31:37 MSK
Уточнённые шаги
===============

1. Настроить на проверяемой системе kde5-autofs-shares по шагам из https://www.altlinux.org/Альт_Рабочая_станция_К_8_советы:
# apt-get install -y kde5-autofs-shares
# echo "/mnt/samba /etc/auto.smb -t 34567" >> /etc/auto.master
# systemctl enable --now autofs

2. Настроить на любой другой машине общие папки samba. Например, это можно сделать с помощью usershares:
# apt-get install -y samba-usershares
# systemctl enable --now smb nmb
$ chmod a+rx /home/test
$ for i in `seq 1 10`; do mkdir "/home/test/$i"; net usershare add --long "$i" "/home/test/$i" "comment $i" Everyone:f guest_ok=y; done

3. Выполнить описанные выше шаги.



Воспроизводимость
=================

Воспроизводится на виртуальных машинах:

[p10] kworkstation-10.2-x86-64, education-10.1-x86-64-kde
kde5-dolphin-23.04.3-alt4.x86_64
kde5-autofs-shares-0.2.2-alt1.noarch
autofs-5.1.8-alt4.x86_64

[sisyphus] kworkstation-10.2-x86-64, education-10.1-x86-64-kde
kde5-dolphin-23.04.3-alt4.x86_64
kde5-autofs-shares-0.2.2-alt1.noarch
autofs-5.1.8-alt6.x86_64
Comment 2 Sergey V Turchin 2023-10-02 15:21:30 MSK
(Ответ для Корытов Иван на комментарий #0)
> Ожидаемый результат: файловый менеджер переходит на уровень вверх, ничего
> больше не происходит
Это невозможно, т.к. automount именно так работает.
Comment 3 Корытов Иван 2023-10-05 14:32:20 MSK
(Ответ для Sergey V Turchin на комментарий #2)
> (Ответ для Корытов Иван на комментарий #0)
> > Ожидаемый результат: файловый менеджер переходит на уровень вверх, ничего
> > больше не происходит
> Это невозможно, т.к. automount именно так работает.

Если сильно захотеть, то можно. Но только суть немного поменяется (а-ля полуавтоматическая текстовая карта). 

Нужно передавать для монтирования не все общие папки сервера, а только те, что указаны в файле ~/.autofs.shares пользователя. autofs заботливо передает переменные окружения, которые сообщают о пользователе, который вызвал триггер в файловой системе.

Работает даже с двумя пользователями, никаких лишних общих папок не монтируется при выходе наверх. Только те, что были добавлены через контекстное меню. Префикс в виде имени сервера сделан для избежания коллизий с общими папками с одинаковыми названиями, но на разных серверах. Нижнее подчеркивание можно заменить на любой другой символ, разрешенный файловой системой (@, $ и т.д.). Пробелы в имени общей папки учитываются. При должном желании можно оставить только имена папок и решать вопрос с коллизией более грамотно.

Изменения в /etc/auto.smb:
> ...
> key="$@"
> ...
> cat $AUTOFS_HOME/.autofs.shares 2>/dev/null | awk -v key="$key" -v opts="$opts" -F "/" -- '
>        BEGIN   { ORS="" }
>        {
>                 srv = $3
>                 loc = $4
>                 autokey = srv "_" loc
>
>                 if (key == autokey)
>                 {
>                         print opts, "/", ":\"//" srv "/" loc "\"\n";
>                         exit
>                 }
>        }
>        END     { }
>        '

Изменения в /usr/bin/kde5-autofs-shares-mount:
> DST=`echo "$SHARE" | sed -e "s|^smb:/|${DST_PREFIX}|" | sed -E 's|(.*)/|\1_|'`

Изменения в /usr/bin/kde5-autofs-shares-manage:
> DST=`echo "$SHARE" | sed -e "s|^smb:/|${DST_PREFIX}|" | sed -E 's|(.*)/|\1_|'`

Как мне кажется, наличие немного странного пути к папке нивелирует внезапно появляющиеся десятки папок, которые не требовал монтировать пользователь. И которые он потом не может отмонтировать без прав администратора. Да, не будет возможности пройти по пути сервер->папка, если вдруг она отмонтируется из-за сетевой ошибки, например.

Можно фильтровать список по autofs.shares и списку от smbclient, но т.к. autofs будет следить за папкой /mnt/samba/<сервер>, то второй пользователь не сможет на том же сервере примонтировать другую папку, т.к. autofs уже составил список по первому пользователю и не запрашивает файл карты.

В какой еще операционной системе кнопкой "вверх" в проводнике можно примонтировать все общие папки сервера?) Я таких не встречал.

З.Ы. Я бы не написал это багрепорт, если бы эта программа не была указана в документации дистрибутива как один из способов монтирования общих папок. Выглядит нелепо на фоне импортозамещаемой ОС.
Comment 4 Sergey V Turchin 2023-10-05 14:44:14 MSK
(Ответ для Корытов Иван на комментарий #3)
> Изменения
Я не понимаю таких изменений. Изучите diff.

> /etc/auto.smb:
Повесьте на него баг.
Comment 5 Корытов Иван 2023-10-05 15:15:04 MSK
(Ответ для Sergey V Turchin на комментарий #4)
> (Ответ для Корытов Иван на комментарий #3)
> > Изменения
> Я не понимаю таких изменений. Изучите diff.
> 
> > /etc/auto.smb:
> Повесьте на него баг.

Спасибо, но diff я знаю. Если вы разучились читать код, то мне вас жаль. Это лишь был пример, а не готовый патч, которые тут все так любят.