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

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

    <bug>
          <bug_id>35453</bug_id>
          
          <creation_ts>2018-09-28 14:42:58 +0300</creation_ts>
          <short_desc>system-auth write ad: не создаются (A) DNS записи для хоста</short_desc>
          <delta_ts>2019-02-27 18:12:25 +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-auth</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Sheplyakov">asheplyakov</reporter>
          <assigned_to name="Anton V. Boyarshinov">boyarsh</assigned_to>
          <cc>boyarsh</cc>
    
    <cc>cas</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>174571</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-09-28 14:42:58 +0300</bug_when>
    <thetext>Начальные условия

а) AD домен (для определенности FOO.EXAMPLE) с единственным контроллером на samba 4.8.5,
б) клиенсткая машина с ALT (sisyphus или p8), для определенности ее имя cl3


Действия

На клиентской машине 

1) установливаем необходимые пакеты:

   sudo apt-get install -y task-auth-ad-sssd

2) создаем /etc/krb5.conf вида

   [libdefaults]
   dns_lookup_kdc = true
   dns_lookup_realm = false
   rdns = false
   default_realm = FOO.EXAMPLE
   ticket_lifetime = 24h
   renew_lifetime = 7d
   forwardable = true
   default_ccache_name = KEYRING:persistent:%{uid}

3) создаем /etc/resolv.conf такого вида

   domain foo.example
   nameserver ${DC_IP}

   где ${DC_IP} -- IPv4 адрес контроллера домена

4) создаем /etc/samba/smb.conf такого содержания

   [global]
      security = ads
      realm = FOO.EXAMPLE
      workgroup = FOO
      netbios name = CL3
      kerberos method = system keytab
      wins support = no
      template shell = /bin/bash
      idmap config * : range = 10000-20000000
      idmap config * : backend = tdb

5) задаем имя хоста

   sudo hostname cl3.foo.example

6) выполняем команду

   sudo system-auth write ad FOO.EXAMPLE cl3 FOO administrator $ADMIN_PASSWD

   где $ADMIN_PASSWD -- пароль администратора домена



Ожидаемый результат:

(кроме всего прочего) в DNS добавляется A запись для клиентской машины


Наблюдаемый результат:

# host cl3.foo.example
Host cl3.doo.example not found: 3(NXDOMAIN)

При этом nss и kerberos аутентификация работает:

# getent passwd administrator
administrator:*:597600500:597600513:Administrator:/home/FOO.EXAMPLE/administrator:/bin/bash



Предполагаемая причина

Точнее, их две

1) system-auth игнорирует ошибки `net ads join` (см. [1]):

   $net_cmd ads join -U&quot;$user%$password&quot; | grep -v &apos;^Using short domain name&apos;

   shell вернет код выхода grep, а не net

2) следующий за этим фрагмент кода (см. [2]) заведомо неработоспособен:

   if [ -n &quot;$host_name&quot; ]; then
           $net_cmd ads dns register -U&quot;$user%$password&quot; &quot;$FQDN&quot;
   fi

   Переменная FQDN не определена в текущей функции. Она определена в функции set_hostname как local, см. [3]



[1] http://git.altlinux.org/gears/a/alterator-auth.git?p=alterator-auth.git;a=blob;f=alterator-auth/sbin/system-auth;h=d0f2a068a7a80effcee6c22190f03e83b4f57f73;hb=8c9920918c2f4617cbe1e208850b5af586fb0da0#l516

[2] http://git.altlinux.org/gears/a/alterator-auth.git?p=alterator-auth.git;a=blob;f=alterator-auth/sbin/system-auth;h=d0f2a068a7a80effcee6c22190f03e83b4f57f73;hb=8c9920918c2f4617cbe1e208850b5af586fb0da0#l523

[3] http://git.altlinux.org/gears/a/alterator-auth.git?p=alterator-auth.git;a=blob;f=alterator-auth/sbin/system-auth;h=d0f2a068a7a80effcee6c22190f03e83b4f57f73;hb=8c9920918c2f4617cbe1e208850b5af586fb0da0#l454


Проверка гипотезы

# net ads leave -Uadministrator%t0psecret
# hostname
cl3.foo.example

# net ads join -Uadministrator%t0psecret
Enter administrator&apos;s password:
ldb: unable to stat module /usr/lib64/samba/ldb : No such file or directory
Using short domain name -- FOO
Joined &apos;CL3&apos; to dns domain &apos;foo.example&apos;
DNS Update for cl3.foo.example failed: ERROR_DNS_UPDATE_FAILED
DNS update failed: NT_STATUS_UNSUCCESSFUL

# echo $?
0

(ага, NT_STATUS_UNSUCCESSFUL, но exit 0)

Заметим, что в выхлопе `net ads join` кроме строки &apos;Using short domain name&apos; есть еще что-то, поэтому grep -q &apos;^Using short domain name&apos; вернет 0, и далее выполнится

net ads dns register -Uadministrator%t0psecret &quot;&quot;

которая завершится с ошибкой 

No DNS domain configured for . Unable to perform DNS Update.
DNS update failed!

(которую успешно проигнорирует system-auth)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174625</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-10-01 16:55:54 +0300</bug_when>
    <thetext>
net_ads_join вызывает _net_ads_join_dns_updates [1] чтобы создать/обновить
(A) DNS запись хоста.


net_update_dns_ext /* iplist = NULL, num_addrs = 0, remove_host = false */
net_update_dns /* hostname = NULL */
_net_ads_join_dns_updates
net_ads_join


net_update_dns_ext пытается определить имя хоста из netbios name [2].
Как правило netbios name совпадает с кратким именем хоста (максимальная
длина netbios name -- 15 байт, не всякое допустимое DNS имя влезет),
потому net_update_dns_ext пытается &quot;угадать&quot; полное (FQDN) имя. Делает
это функция name_to_fqdn [3], которая использует getaddrinfo, а
следовательно, DNS. Но в DNS еще нет A записи для клиентского хоста,
ее как раз и должна создать net_update_dns_ext. Потому net_update_dns_ext
пытается использовать краткое имя хоста, из-за чего net_update_dns_internal
возвращает ошибку NT_STATUS_INVALID_PARAMETER [4]

Т.к. у `net ads join` нет аргумента, позволяющего явно указать FQDN хоста,
то попытка `net ads join` создать (A) DNS запись обречена на провал.

Есть 2 возможных решения:

1) запускать `net ads join --no-dns-updates`, а затем `net ads dns register`
2) научить `net ads join` использовать имя Kerberos домена в качестве
   DNS домена, если не удалось угадать DNS домен другим образом.

2) займет явно больше времени (правки в `source3/` upstream принимает крайне
   неохотно, только для исправления каких-то серьезных проблем)



[1] http://git.altlinux.org/gears/s/samba-DC.git?p=samba-DC.git;a=blob;f=source3/utils/net_ads.c;h=c83aced9f812380df85682c08e29de48a1794d6b;hb=ec86b464b83e7e5d6163f54fca6869d855a32910#l1632

[2] http://git.altlinux.org/gears/s/samba-DC.git?p=samba-DC.git;a=blob;f=source3/utils/net_ads.c;h=c83aced9f812380df85682c08e29de48a1794d6b;hb=ec86b464b83e7e5d6163f54fca6869d855a32910#l1296

[3] http://git.altlinux.org/gears/s/samba-DC.git?p=samba-DC.git;a=blob;f=source3/lib/util.c;h=5f786f95d3e2eccd113a39eec585d195713c5747;hb=ec86b464b83e7e5d6163f54fca6869d855a32910#l1682

[4] http://git.altlinux.org/gears/s/samba-DC.git?p=samba-DC.git;a=blob;f=source3/utils/net_ads.c;h=c83aced9f812380df85682c08e29de48a1794d6b;hb=ec86b464b83e7e5d6163f54fca6869d855a32910#l1156</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174687</commentid>
    <comment_count>2</comment_count>
      <attachid>7796</attachid>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-10-02 16:51:02 +0300</bug_when>
    <thetext>Created attachment 7796
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174719</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-10-03 17:33:24 +0300</bug_when>
    <thetext>task 214012 (http://git.altlinux.org/tasks/214012/logs/events.1.1.log)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179046</commentid>
    <comment_count>4</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2019-02-27 18:12:25 +0300</bug_when>
    <thetext>Исправлено в 0.37-alt1.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7796</attachid>
            <date>2018-10-02 16:51:02 +0300</date>
            <delta_ts>2018-10-02 16:51:02 +0300</delta_ts>
            <desc>patch</desc>
            <filename>0001-ad-correctly-update-DNS-record-of-the-newly-joined-h.patch</filename>
            <type>text/plain</type>
            <size>3320</size>
            <attacher name="Alexey Sheplyakov">asheplyakov</attacher>
            
              <data encoding="base64">RnJvbSBkYjIzNzU2Y2FiMTYyYjNmZWE2Y2ExNjA1M2FkMjZmMzRiOTNlMTM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgU2hlcGx5YWtvdiA8YXNoZXBseWFrb3ZAYWx0bGlu
dXgub3JnPgpEYXRlOiBUdWUsIDIgT2N0IDIwMTggMTY6NDQ6NDQgKzA0MDAKU3ViamVjdDogW1BB
VENIXSBhZDogY29ycmVjdGx5IHVwZGF0ZSBETlMgcmVjb3JkIG9mIHRoZSBuZXdseSBqb2luZWQg
aG9zdAoKQWZ0ZXIgam9pbmluZyB0aGUgZG9tYWluIG5ldF9hZHNfam9pbiB0cmllcyB0byB1cGRh
dGUgdGhlIEEgRE5TIHJlY29yZApvZiB0aGUgbmV3bHkgam9pbmVkIGhvc3QgWzFdLiBUaGUgY2Fs
bCBzdGFjayBsb29rcyBsaWtlIHRoaXMKCm5ldF91cGRhdGVfZG5zX2V4dCAvKiBpcGxpc3QgPSBO
VUxMLCBudW1fYWRkcnMgPSAwLCByZW1vdmVfaG9zdCA9IGZhbHNlICovCm5ldF91cGRhdGVfZG5z
IC8qIGhvc3RuYW1lID0gTlVMTCAqLwpfbmV0X2Fkc19qb2luX2Ruc191cGRhdGVzCm5ldF9hZHNf
am9pbgoKbmV0X3VwZGF0ZV9kbnNfZXh0IGd1ZXNzZXMgdGhlIChETlMpIGhvc3RuYW1lIGZyb20g
aXRzIG5ldGJpb3MgbmFtZSBbMl0uClR5cGljYWxseSBuZXRiaW9zIG5hbWUgbWF0Y2hlcyB0aGUg
c2hvcnQgKEROUykgaG9zdG5hbWUgKG1heGltYWwgbGVuZ3RoCm9mIGEgbmV0YmlvcyBuYW1lIGlz
IDE1IGJ5dGVzLCB3aGljaCBtaWdodCBiZSB0b28gc2hvcnQgZm9yIGEgRlFETikuClRodXMgbmV0
X3VwZGF0ZV9kbnNfZXh0IGNhbGxzIG5hbWVfdG9fZnFkbiBbM10gdG8gZ3Vlc3MgdGhlIEZRRE4u
Ckhvd2V2ZXIgbmFtZV90b19mcWRuIG1ha2VzIHVzZSBvZiBnZXRhZGRyaW5mbyB0byBvYnRhaW4g
dGhlIEZRRE4sIHdoaWNoCmlzIGRlZW1lZCB0byBmYWlsIHNpbmNlIHRoZSAoQSkgRE5TIHJlY29y
ZCBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldC4KVGh1cyBuZXRfdXBkYXRlX2Ruc19leHQgdHJpZXMg
dG8gcHJvY2VlZCB3aXRoIHRoZSBzaG9ydCBob3N0bmFtZSwKaG93ZXZlciBuZXRfdXBkYXRlX2Ru
c19pbnRlcm5hbCBiYWlscyBvdXQgWzRdIHdpdGgKTlRfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVS
IGZvciBpdCBjYW4ndCBmaWd1cmUgb3V0IHRoZSAoRE5TKSBkb21haW4gbmFtZS4KClRodXMgYW4g
YXR0ZW1wdCB0byBjcmVhdGUgdGhlIEEgRE5TIHJlY29yZCBvbiB0aGUgKHZlcnkgZmlyc3QpIGpv
aW4KaXMgZGVlbWVkIHRvIGZhaWwgKGFuZCBgbmV0IGFkcyBqb2luYCBkb2VzIG5vdCBhY2NlcHQg
dGhlIEROUyBkb21haW4KbmFtZSBhcyBhbiBhcmd1bWVudCkuCgpUaGVyZSBhcmUgdHdvIHBvc3Np
YmxlIGFwcHJvYWNoZXMgdG8gc29sdmUgdGhlIHByb2JsZW06CgoxKSBVc2UgYG5ldCBhZHMgam9p
biAtLW5vLWRucy11cGRhdGVzYCB0byBqb2luIHRoZSBkb21haW4sIGFuZCBtYWtlIChBKQogICBE
TlMgcmVjb3JkIHdpdGggYG5ldCBhZHMgZG5zIHJlZ2lzdGVyYAoyKSBUZWFjaCBgbmV0IGFkcyBq
b2luYCB0byB1c2UgdGhlIG5hbWUgb2YgdGhlIEtlcmJlcm9zIGRvbWFpbiAoaW4gbG93ZXIKICAg
Y2FzZSkgYXMgdGhlIEROUyBkb21haW4gbmFtZSwgaWYgZ3Vlc3NpbmcgdGhlIEZRRE4gZmFpbGVk
LgoKT3B0aW9uIDIpIGlzIGRlZmluaXRlbHkgbW9yZSBjb21wbGljYXRlZCBhbmQgbW9zdCBsaWtl
bHkgd2lsbCBiZSByZWplY3RlZApieSB0aGUgdXBzdHJlYW0gKHRoZXkgZG9uJ3QgcXVpdGUgbGlr
ZSBjaGFuZ2luZyBgc291cmNlM2AgdW5sZXNzIHRoYXQKZml4ZXMgYSBzZXJpb3VzIHByb2JsZW0p
LiBIZW5jZSB0aGlzIHBhdGNoLgoKWzFdIGh0dHA6Ly9naXQuYWx0bGludXgub3JnL2dlYXJzL3Mv
c2FtYmEtREMuZ2l0P3A9c2FtYmEtREMuZ2l0O2E9YmxvYjtmPXNvdXJjZTMvdXRpbHMvbmV0X2Fk
cy5jO2g9YzgzYWNlZDlmODEyMzgwZGY4NTY4MmMwOGUyOWRlNDhhMTc5NGQ2YjtoYj1lYzg2YjQ2
NGI4M2U3ZTVkNjE2M2Y1NGZjYTY4NjlkODU1YTMyOTEwI2wxNjMyClsyXSBodHRwOi8vZ2l0LmFs
dGxpbnV4Lm9yZy9nZWFycy9zL3NhbWJhLURDLmdpdD9wPXNhbWJhLURDLmdpdDthPWJsb2I7Zj1z
b3VyY2UzL3V0aWxzL25ldF9hZHMuYztoPWM4M2FjZWQ5ZjgxMjM4MGRmODU2ODJjMDhlMjlkZTQ4
YTE3OTRkNmI7aGI9ZWM4NmI0NjRiODNlN2U1ZDYxNjNmNTRmY2E2ODY5ZDg1NWEzMjkxMCNsMTI5
NgpbM10gaHR0cDovL2dpdC5hbHRsaW51eC5vcmcvZ2VhcnMvcy9zYW1iYS1EQy5naXQ/cD1zYW1i
YS1EQy5naXQ7YT1ibG9iO2Y9c291cmNlMy9saWIvdXRpbC5jO2g9NWY3ODZmOTVkM2UyZWNjZDEx
M2EzOWVlYzU4NWQxOTU3MTNjNTc0NztoYj1lYzg2YjQ2NGI4M2U3ZTVkNjE2M2Y1NGZjYTY4Njlk
ODU1YTMyOTEwI2wxNjgyCls0XSBodHRwOi8vZ2l0LmFsdGxpbnV4Lm9yZy9nZWFycy9zL3NhbWJh
LURDLmdpdD9wPXNhbWJhLURDLmdpdDthPWJsb2I7Zj1zb3VyY2UzL3V0aWxzL25ldF9hZHMuYzto
PWM4M2FjZWQ5ZjgxMjM4MGRmODU2ODJjMDhlMjlkZTQ4YTE3OTRkNmI7aGI9ZWM4NmI0NjRiODNl
N2U1ZDYxNjNmNTRmY2E2ODY5ZDg1NWEzMjkxMCNsMTE1NgotLS0KIGFsdGVyYXRvci1hdXRoL3Ni
aW4vc3lzdGVtLWF1dGggfCA0ICsrLS0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyks
IDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYWx0ZXJhdG9yLWF1dGgvc2Jpbi9zeXN0ZW0t
YXV0aCBiL2FsdGVyYXRvci1hdXRoL3NiaW4vc3lzdGVtLWF1dGgKaW5kZXggYjYzMDY2YS4uODFk
NWIzMyAxMDA3NTUKLS0tIGEvYWx0ZXJhdG9yLWF1dGgvc2Jpbi9zeXN0ZW0tYXV0aAorKysgYi9h
bHRlcmF0b3ItYXV0aC9zYmluL3N5c3RlbS1hdXRoCkBAIC01MTUsMTMgKzUxNSwxMyBAQCBqb2lu
X2FkX2RvbWFpbigpCiAJc2V0X2hvc3RuYW1lICIkaG9zdF9uYW1lLiRsZG9tYWluIgogCiAJIyBK
b2luIHRvIGRvbWFpbgotCSRuZXRfY21kIGFkcyBqb2luIC1VIiR1c2VyJSRwYXNzd29yZCIgfCBn
cmVwIC12ICdeVXNpbmcgc2hvcnQgZG9tYWluIG5hbWUnCisJJG5ldF9jbWQgYWRzIGpvaW4gLVUi
JHVzZXIlJHBhc3N3b3JkIiAtLW5vLWRucy11cGRhdGVzCiAKIAlbICIkPyIgLW5lIDAgXSAmJiBy
ZXR1cm4gMQogCiAJIyBSZWdpc3RlciBtYWNoaW5lIGluIGRvbWFpbiBETlMKIAlpZiBbIC1uICIk
aG9zdF9uYW1lIiBdOyB0aGVuCi0JCSRuZXRfY21kIGFkcyBkbnMgcmVnaXN0ZXIgLVUiJHVzZXIl
JHBhc3N3b3JkIiAiJEZRRE4iCisJCSRuZXRfY21kIGFkcyBkbnMgcmVnaXN0ZXIgLVUiJHVzZXIl
JHBhc3N3b3JkIiAiJGhvc3RfbmFtZS4kbGRvbWFpbiIKIAlmaQogCiAJIyBEZXN0cm95IHRpY2tl
dAotLSAKMi4xMC4yCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>