<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>53900</bug_id>
          
          <creation_ts>2025-04-18 16:41:43 +0300</creation_ts>
          <short_desc>Не умеет работать с переменными вида %CommonDesktopDir% из RSAT</short_desc>
          <delta_ts>2025-04-18 23:32:52 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>gpupdate</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vladislav Glinkin">glinkinvd</reporter>
          <assigned_to name="Valery Sinelnikov">greh</assigned_to>
          <cc>greh</cc>
    
    <cc>nir</cc>
    
    <cc>sin</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>263189</commentid>
    <comment_count>0</comment_count>
    <who name="Vladislav Glinkin">glinkinvd</who>
    <bug_when>2025-04-18 16:41:43 +0300</bug_when>
    <thetext>Версия пакета: 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 &apos;%&apos;|{&apos;dest_abspath&apos;: &apos;%CommonDesktopDir%/test.desktop&apos;}

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

=====

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


    if username:
        variables[&apos;LogonUser&apos;] = username
        variables[&apos;HOME&apos;] = get_homedir(username)
        variables[&apos;HOMEPATH&apos;] = get_homedir(username)

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

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

    return result

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

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

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

    </bug>

</bugzilla>