Bug 53900

Summary: Не умеет работать с переменными вида %CommonDesktopDir% из RSAT
Product: Sisyphus Reporter: Vladislav Glinkin <glinkinvd>
Component: gpupdateAssignee: Valery Sinelnikov <greh>
Status: ASSIGNED --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: greh, nir, sin
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Vladislav Glinkin 2025-04-18 16:41:43 MSK
Версия пакета: gpupdate-0.13.2-alt1

Шаги воспроизведения:
1. Включить механизмы создания ярлыков на управляющей машине в RSAT
2. Создать ярлык для пользователя и компьютера в RSAT с размещением в All Users/Рабочий стол
3. Выполнить gpupdate на клиентской машине

Фактический результат:
2025-04-18 13:36:36.014|[E00053]| Fail for applying shortcut to file with '%'|{'dest_abspath': '%CommonDesktopDir%/test.desktop'}

Ожидаемый результат:
Выполнение gpupdate без ошибок

=====

Набор переменных Windows, которыми мы оперируем в gpupdate, ограничен:
def expand_windows_var(text, username=None):
    '''
    Scan the line for percent-encoded variables and expand them.
    '''
    variables = dict()
    variables['HOME'] = '/etc/skel'
    variables['HOMEPATH'] = '/etc/skel'
    variables['HOMEDRIVE'] = '/'
    variables['SystemRoot'] = '/'
    variables['StartMenuDir'] = '/usr/share/applications'
    variables['SystemDrive'] = '/'
    variables['DesktopDir'] = xdg_get_desktop(username, variables['HOME'])


    if username:
        variables['LogonUser'] = username
        variables['HOME'] = get_homedir(username)
        variables['HOMEPATH'] = get_homedir(username)

        variables['StartMenuDir'] = os.path.join(
            variables['HOME'], '.local', 'share', 'applications')

    result = text
    for var in variables.keys():
        result = result.replace('%{}%'.format(var),
                                 variables[var] if variables[var][-1] == '/'
                                 else variables[var] +'/')

    return result

Отсюда вытекают проблемы, когда пользователи задают в RSAT политику создания ярлыка с переменными вида %CommonDesktopDir% в путях. gpupdate просто не умеет с ними работать:
2025-04-18 13:36:36.014|[E00053]| Fail for applying shortcut to file with '%'|{'dest_abspath': '%CommonDesktopDir%/test.desktop'}

К примеру, в Windows %CommonDesktopDir% - C:\Users\Public\Desktop, доступный для всех пользователей. Для Linux, возможно, прямого аналога нет, но всё же их надо как-то обрабатывать.
Если с переменными вида %CommonDesktopDir% и %CommonStartMenuDir% ещё можно-что придумать (к примеру, настраивать их так же, как и DesktopDir, StartMenuDir), то вот с переменными вида %ProgramsDir% возникают проблемы.

В таком случае, самым простым решением, как мне кажется, является проверка наличия ключа в списке обрабатываемых ключей.
Если такого ключа нет - то мы задаём какой-то путь по умолчанию, к примеру %DesktopDir%.
Предлагаю исправление - https://github.com/altlinux/gpupdate/pull/213