Bug 40903

Summary: Прошу рассмотреть возможность добавить дополнительную опцию
Product: Sisyphus Reporter: Anton Shevtsov <shevtsov.anton>
Component: alterator-authAssignee: Evgeny Sinelnikov <sin>
Status: ASSIGNED --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: amakeenk, boyarsh, sin
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Anton Shevtsov 2021-09-13 09:38:50 MSK
Суть проблемы.
Всегда, для ввода в домен использовал 
net ads join ..,. -S адрес_pdc

более правильный, как мне сказали, способ это 
system-auth write ad ....

Но в обычном виде, я всегда натыкаюсь на  
/usr/sbin/system-auth: строка 595: 15461 Ошибка сегментирования                   $net_cmd ads join -U"$user%$password" --no-dns-updates

Дело в том, что у нас десятки AD серверов, в винде нужный AD сервер выбирается на основе sites, в линухе же судя по логу - первый какой ответил, либо рандомно. 
Хотя предпочтительный ad_site указано для sssd.conf, но в данном случае оно видимо не используется. Таким образом хватается первый попавшийся хостнейм AD сервера иполучаем тыквы в виде сегфолта т.к. сервера хоть и наши, но могут быть закрыты фаерволами или еще каким либо административными барьерами. Поэтому я всегда уазывал для net ads имя target server. В случае с system-auth такой возможности нет.

Я предлагаю ее добавить 

diff -u /usr/sbin/system-auth /usr/sbin/system-auth.old 
--- /usr/sbin/system-auth       2021-09-13 11:22:01.900287879 +0500
+++ /usr/sbin/system-auth.old   2021-09-13 10:13:31.517935645 +0500
@@ -598,7 +598,6 @@
     local user="$2"
     local password="$3"
     local host_name="$4"
-    local target_server="$5"
 
     [ -x /usr/bin/kinit ] || fatal "krb5-kinit is required for join to Active Directory domain"
     [ -x "$net_cmd" ] || fatal "$net_cmd from samba-common or samba-common-tools package is required for join to Active Directory domain"
@@ -627,8 +626,8 @@
        set_hostname "$host_name.$ldomain"
 
        # Join to domain
-       [ -n "$target_server" ] && $net_cmd ads join -U"$user%$password"  --no-dns-updates ||  $net_cmd ads join -U"$user%$password" -S "$target_server" --no-dns-updates
-
+       $net_cmd ads join -U"$user%$password" --no-dns-updates
+
        [ "$?" -ne 0 ] && return 1
 
        # Register machine in domain DNS
@@ -782,7 +781,7 @@
                 # Store configuration parameters: domain [hostname] [workgroup]
                 write_ad_conf "$1" "$2" "$3"
                 # Join computer to domain
-                join_ad_domain "$1" "$4" "$5" "$2" "$6"
+                join_ad_domain "$1" "$4" "$5" "$2"
                 [ "$?" -ne 0 ] && exit 1
                 # prepare auth service
                 if [ -e "$sssd_conf" ]; then

и тогда строка подключения будет выглядеть как-то так

/usr/sbin/system-auth write ad ADM72.LOCAL alt-test-04l ADM72 domainadmin pa$$word my_ad_server.adm72.local

т.е. добавится последний, опциональный параметр.
Comment 1 Anton Shevtsov 2021-09-13 09:42:01 MSK
перепутал исходный с новым

--- /usr/sbin/system-auth.old   2021-09-13 10:13:31.517935645 +0500
+++ /usr/sbin/system-auth       2021-09-13 11:22:01.900287879 +0500
@@ -598,6 +598,7 @@
     local user="$2"
     local password="$3"
     local host_name="$4"
+    local target_server="$5"
 
     [ -x /usr/bin/kinit ] || fatal "krb5-kinit is required for join to Active Directory domain"
     [ -x "$net_cmd" ] || fatal "$net_cmd from samba-common or samba-common-tools package is required for join to Active Directory domain"
@@ -626,8 +627,8 @@
        set_hostname "$host_name.$ldomain"
 
        # Join to domain
-       $net_cmd ads join -U"$user%$password" --no-dns-updates
-
+       [ -n "$target_server" ] && $net_cmd ads join -U"$user%$password"  --no-dns-updates ||  $net_cmd ads join -U"$user%$password" -S "$target_server" --no-dns-updates
+
        [ "$?" -ne 0 ] && return 1
 
        # Register machine in domain DNS
@@ -781,7 +782,7 @@
                 # Store configuration parameters: domain [hostname] [workgroup]
                 write_ad_conf "$1" "$2" "$3"
                 # Join computer to domain
-                join_ad_domain "$1" "$4" "$5" "$2"
+                join_ad_domain "$1" "$4" "$5" "$2" "$6"
                 [ "$?" -ne 0 ] && exit 1
                 # prepare auth service
                 if [ -e "$sssd_conf" ]; then
Comment 2 Evgeny Sinelnikov 2023-03-23 22:58:15 MSK
В последней доработке добавлена возможно аутентификации через кеш ключей kerberos, поэтому опциональные разумнее делать именно опциями, вроде --target-server.

Давайте, я добавлю соответствующий функционал.