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

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

    <bug>
          <bug_id>60593</bug_id>
          
          <creation_ts>2026-09-17 12:40:23 +0300</creation_ts>
          <short_desc>alterator-net-domain: пароль Administrator попадает в лог в /tmp, ldapsearch -h не работает в openldap 2.6, write не сообщает об ошибке</short_desc>
          <delta_ts>2026-09-25 14:52:46 +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>alterator-net-domain</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Farygin">rider</reporter>
          <assigned_to name="Mikhail Efremov">sem</assigned_to>
          <cc>boyarsh</cc>
    
    <cc>sem</cc>
    
    <cc>slev</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>299426</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2026-09-17 12:40:23 +0300</bug_when>
    <thetext>Три дефекта в backend3/net-domain, найденные при перепроверке #33437 на текущем Сизифе. Свожу в один баг, поскольку все они в одном файле; если удобнее разбирать порознь — скажите, разнесу.

Стенд: клоны шаблонов poligon (sisyphus-server, textmode), dist-upgrade 2026-09-17, x86_64. Версии: alterator-net-domain-0.7.3-alt4, alterator-openldap-0.9-alt2, openldap-servers-2.6.13-alt1, alt-domain-server-0.5.3-alt1, samba-dc-4.22.11-alt3, alterator-5.4.6-alt1. Код цитируется по ветке sisyphus (packages/gears/a/alterator-net-domain.git).

1. test_kdc зовёт ldapsearch с ключом -h, которого больше нет в openldap
--------------------------------------------------------------------
    alterator-net-domain/backend3/net-domain:127: &quot;$_ldapsearch&quot; -x -h localhost -b &quot;$dn&quot; -D &quot;$slapd_rootdn&quot;  &quot;ou=kdcroot&quot; -w&quot;$slapd_rootpw&quot; | ...
    alterator-net-domain/backend3/net-domain:133: &quot;$_ldapsearch&quot; -x -h localhost -b &quot;$dn&quot; -D &quot;$slapd_rootdn&quot; &quot;objectClass=krbRealmContainer&quot; -w&quot;$slapd_rootpw&quot; | ...

В openldap 2.6 (openldap-servers-2.6.13-alt1) опция -h удалена:

    # ldapsearch -x -h localhost -b dc=altdom,dc=test ou=kdcroot
    ldapsearch: invalid option -- &apos;h&apos;

Поэтому обе проверки всегда ложны и в ЦУС статус KDC всегда ERROR, даже на исправно работающем домене:

    # alterator-cmdline /net-domain action read
    kdc:ERROR: Failed to ldapsearch ou=kdcroot -- no KDC base in LDAP

С -H запись находится:

    # ldapsearch -x -H ldap://localhost -b dc=altdom,dc=test -D &quot;$rootdn&quot; -w&quot;$pw&quot; ou=kdcroot | grep numEntries
    # numEntries: 1

Рядом, в test_ldap (строки 82, 88), уже используется -H — нужно привести строки 127 и 133 к тому же виду (`-H ldap://localhost`). Примерный патч (пересборкой не проверялся, на стенде проверялась только сама команда ldapsearch):

    -	&quot;$_ldapsearch&quot; -x -h localhost -b &quot;$dn&quot; ...
    +	&quot;$_ldapsearch&quot; -x -H ldap://localhost -b &quot;$dn&quot; ...

2. Пароль Administrator попадает в лог в /tmp (проблема безопасности)
--------------------------------------------------------------------
При создании AD-домена вывод samba-tool пишется в лог в /tmp:

    alterator-net-domain/backend3/net-domain:303:     local log=&quot;/tmp/samba-dc-provision-$(date +%d.%m.%Y-%H:%M:%S)-$domain_name.log&quot;

Случайный пароль Administrator из лога вырезается фильтром:

    alterator-net-domain/backend3/net-domain:350: 	) | grep -v &apos;^Admin[[:space:]]\+password:&apos; &gt;&gt;&quot;$log.process&quot;

Фильтр рассчитан на строку вида `Admin password: ...` в начале строки, а нынешний samba-tool печатает её в формате INFO:

    INFO ... #496: Admin password: ...

Такая строка под шаблон `^Admin[[:space:]]\+password:` не подходит и остаётся в логе. В результате на стенде пароль администратора домена лежал открытым текстом в /tmp/samba-dc-provision-17.09.2026-10:14:34-test.alt.log с правами 0644 — то есть читаемым любому локальному пользователю, и в /tmp, который не чистится до перезагрузки.

Там же, в ветке создания AD-домена, есть отладочный сброс окружения бэкенда:

    alterator-net-domain/backend3/net-domain:773: 	    env &gt; /tmp/net-domain.txt

Окружение бэкенда содержит параметры формы (in_ad_password читается тут же, строка 792), то есть в этот файл попадает и пароль, введённый администратором в ЦУС. Этот пункт — по чтению кода, сам файл на стенде я не смотрел; строку, судя по всему, надо просто убрать.

Ожидаемый результат: пароли не пишутся в файлы в /tmp; если лог провижна нужен — он должен лежать в /var/log с правами 0600, а фильтрация пароля не должна зависеть от формата строки samba-tool (надёжнее подставлять пароль явно через --adminpass и не полагаться на вырезание из вывода).

3. write для ALT-домена возвращает успех при упавшем slapd
---------------------------------------------------------
    # alterator-cmdline /net-domain action write domain altdom.test domain_type altdomain
    EXIT=0   (никакой ошибки пользователю не показано)
    # systemctl is-active slapd krb5kdc smb bind
    failed failed inactive active

В коде служба поднимается без проверки результата, дальше выполняется запись домена и публикация сервиса:

    alterator-net-domain/backend3/net-domain:745: 		    service_control &apos;slapd&apos;   on/start
    alterator-net-domain/backend3/net-domain:756: 		    write_domain &quot;$in_domain&quot; &quot;1&quot; &amp;&amp; \

Провал старта виден только потом, в `action read` (ldap:ERROR: Connect to ldaps://... failed). Для сравнения, в ветке AD результат провижна проверяется и отдаётся через write_error (строки 352-362).

Ожидаемый результат: если slapd/krb5kdc не поднялись, write должен отдавать write_error с указанием службы и места, куда смотреть (journalctl -u slapd), а не сообщать об успехе.

(Конкретно в моём прогоне slapd не стартовал из-за #48706 — кавычек в SLAPDURLLIST; но реакция бэкенда на упавшую службу от причины падения не зависит.)

Четвёртый дефект, найденный там же — сырой текст `%(_ &apos;NOT OK (samba service is stopped)&apos;)` в строке 640 — уже заведён как #55385, здесь не повторяю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300200</commentid>
    <comment_count>1</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2026-09-25 14:52:46 +0300</bug_when>
    <thetext>Подтверждаю по коду alterator-net-domain 0.7.3-alt4 (установленный backend3/net-domain): строки 127/133 — ldapsearch -x -h localhost (openldap 2.6: &quot;ldapsearch: invalid option -- &apos;h&apos;&quot;), строка 350 — grep -v &apos;^Admin[[:space:]]\+password:&apos;, строка 773 — env &gt; /tmp/net-domain.txt (в окружении есть пароль администратора). Сам провижн через модуль не запускал.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>