Bug 53920

Summary: Политика отключения cifsacl не работает
Product: Sisyphus Reporter: Vladislav Glinkin <glinkinvd>
Component: gpupdateAssignee: Valery Sinelnikov <greh>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: greh, nir, sin
Version: unstable   
Hardware: x86_64   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=52333

Description Vladislav Glinkin 2025-04-21 13:03:16 MSK
Версия пакета:
gpupdate-0.13.2-alt1

Стенды:
- Windows AD
- Клиент на Альт
- Управляющая машина на Альт

Шаги воспроизведения:
1) На Windows AD создать директорию share в корне C;\share для всех доменных пользователей с правами на чтение и запись.
2) Создать директорию test10 внутри share, с полным доступом для тестового доменного пользователя
3) Применить политики на клиенсткой машине.

Фактический результат:
# cat /etc/auto.master.gpupdate.d/S-1-5-21-2329274834-2113641840-3540045106-1108.conf
"A" -fstype=cifs,cruid=$USER,sec=krb5,noperm,cifsacl ://WIN-V75VIC6EU3O.BUGZILLA.TEST/share

Проявляется проблема с унаследования прав при использовании опции cifsacl

Ожидаемый результат:
Опции cifsacl нет в конфигурационном файле

====

Дополнительно:
Отключение параметра cifsacl некорректно работает.

Ключи:
/Software/BaseALT/Policies/GPUpdate/CIFSApplierUser      1
/Software/BaseALT/Policies/GPUpdate/CifsaclDisable       1
/Software/BaseALT/Policies/GPUpdate/GlobalExperimental   1


Проблема заключается в том, что в frontend/cifs_applier.py значение self.cifsacl_disable перезаписывается с 1 на None, из-за чего возникает проблема - drive_settings['cifsacl'] = False if self.cifsacl_disable else True всегда принимает True, т.к. self.cifsacl_disable = None

Верное значение принимает только машинный applier, который вообще отключён (проблема с машинными applier'ами, которые включаются сами по себе была упомянута здесь - https://bugzilla.altlinux.org/53871)
Добавил вывод self.cifsacl_disable в __init__ класса cifs_applier_user, а также вывод self.cifsacl_disable и drive_settings['cifsacl'] в метод _admin_context_apply:
$ gpupdate -f
self.cifsacl_disable in __init__ = 1
Apply group policies for computer.
self.cifsacl_disable in __init__ = None
self.cifsacl_disable in _admin_context_apply = None
drive_settings['cifsacl'] in  _admin_context_apply = True
self.cifsacl_disable in __init__ = None
self.cifsacl_disable in _admin_context_apply = None
drive_settings['cifsacl'] in  _admin_context_apply = True
Apply group policies for user_ou1.

Как видно, машинный applier в __init__ принимает верное значение. Пользовательский - нет.
Значение None возвращает метод get_entry из storage/dconf_registry.py:
    @classmethod
    def get_entry(cls, path, dictionary = None, preg = True):
        logdata = dict()
        result = Dconf_registry.get_storage(dictionary)

        keys = path.split("\\") if "\\" in path else path.split("/")
        key = '/'.join(keys[:-1]) if keys[0] else '/'.join(keys[:-1])[1:]

        if isinstance(result, dict) and key in result.keys():
            data = result.get(key).get(keys[-1])
            return PregDconf(
                key, convert_string_dconf(keys[-1]), find_preg_type(data), data) if preg else data
        else:
            logdata['path'] = path
            log('D208', logdata)
            return None

То, что одни и те же методы вызываются по несколько раз - тоже напрягает.