HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //usr/lib/python3.9/site-packages/ipaclient/install/__pycache__/client.cpython-39.opt-1.pyc
a

�N(iG�@s:dZddlmZmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlmZddlmZmZddlmZmZmZddlmZddlmZm Z m!Z!dd	l"m#Z#m$Z$m%Z%dd
l"m&Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-m.Z.dd
l/m0Z0m1Z1ddl2m3Z3ddl4m5Z5m6Z6m7Z7m8Z8ddl9m:Z:ddl;m<Z<ddl=m>Z>ddl?m@Z@ddlAmBZBmCZCmDZDmEZEmFZFddlGmHZHddlImJZJddlKmLZLddlMmNZNmOZOmPZPddlQmRZRddlSmTZTmUZUmVZVmWZWddlXmYZYddlAmZZZddl[m\Z\ddl]m^Z^m_Z_m`Z`dd lambZbdd!lcmdZdeed�Zfe�geh�ZidZjdZkd"Zld#Zmd$Znd%Zoda&dapdaqd&ardasdatdaudavdawdaxdaydazd'd(�Z{d)d*�Z|d+d,�Z}d-d.�Z~d/d0�Zd1d2�Z�d3d4�Z�e>j�ekfd5d6�Z�d7d8�Z�d�d9d:�Z�d�d=d>�Z�d?d@�Z�dAdB�Z�dCdD�Z�dEdF�Z�dGdH�Z�dIdJ�Z�dKdL�Z�d�dMdN�Z�dOdP�Z�dQdR�Z�dSdT�Z�d�dUdV�Z�dWdX�Z�dYdZ�Z�d[d\�Z�d]d^�Z�d_d`�Z�dadb�Z�dcdd�Z�dedf�Z�dgdh�Z�didj�Z�dkdl�Z�d�dmdn�Z�dodp�Z�dqZ�drZ�dsZ�dtZ�e>j�Z�e>j�Z�dudv�Z�dwdx�Z�dydz�Z�d{d|�Z�d}d~�Z�dd��Z�d�d��Z�d�d�d��Z�d�d��Z�d�d��Z�d�d�d��Z�d�d��Z�d�d�d��Z�d�d��Z�d�Z�d�Z�d�Z�d�d��Z�d�d��Z�d�d��Z�d�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�e{d�d���Z�d�d��Z�d�d��Z�d�d��Z�eNGd�d��d�e'j�e%j�e`jȃ�Z�eNGd�d��d�e%jʃ�Z�Gd�d��d�e�e�e^j̃Z�dS)�z\
IPA client install module

Provides methods for installation, uninstallation of IPA client
�)�print_function�absolute_importN)�RawConfigParser)�urlparse�
urlunparse)�api�errors�x509)�
sysrestore)�FQDN�IPAAPI_USER�MAXHOSTNAMELEN)�
certmonger�	certstore�service)�hostname)�is_ipa_client_configured�is_ipa_configured)�kinit_keytab�kinit_password�kinit_pkinit)�enroll_only�prepare_only)�%delete_persistent_client_session_data)�normalize_hostname�,no_matching_interface_for_ip_address_warning�validate_hostname�verify_host_resolvable)�services)�	constants)�paths)�tasks)�certdb�kernel_keyring�ipaldap�ipautil�dnsutil)�ScriptError)�DN)�typing)�group�knob�extend_knob)�step)�CalledProcessError�realm_to_suffix�run�
user_input)�SSHPublicKey��version)�SetseboolError�)�	automount�timeconf�sssd)�	discovery)�
IPAChangeConf���zB/bin:/sbin:/usr/kerberos/bin:/usr/kerberos/sbin:/usr/bin:/usr/sbinFcs�fdd�}|S)Ncs�t��\}}t�|�tjdd�}||d<||d<�||�tj�dd�zt�|�Wntyvt	�
d|�Yn0zt�|�Wnty�Yn0t|d�dS)NZkrbcc)�prefix�krb_name�
ccache_dir�KRB5_CONFIGzCould not remove %s�.ipabkp)
�tempfileZmkstemp�os�closeZmkdtemp�environ�pop�remove�OSError�logger�error�rmdir�remove_file)�options�tdict�fdr@rA��func��</usr/lib/python3.9/site-packages/ipaclient/install/client.py�innerks 

zcleanup.<locals>.innerrT)rSrVrTrRrU�cleanupjsrWc
Csjzt�|�WnVtyd}z>|jdkr6WYd}~dSt�d||�t�d|�WYd}~n
d}~00dS)z�
    Deletes a file. If the file does not exist (OSError 2) does nothing.
    Otherwise logs an error message and instructs the user to remove the
    offending file manually
    :param filename: name of the file to be removed
    r<NzFailed to remove file %s: %szKPlease remove %s manually, as it can cause subsequent installation to fail.)rErIrJ�errnorKrL)�filename�erTrTrUrN�s
�rNcCst�d||t|��dS)Nz%s failed to %s: %s)rKrL�str)�name�actionrLrTrTrU�log_service_error�sr^cCs6|dur|Stj�tj�r2t�tj�jdkr2tjSdS)z�
    If a CA certificate is passed in on the command line, use that.

    Else if a CA file exists in paths.IPA_CA_CRT then use that.

    Otherwise return None.
    Nr)rE�path�existsr �
IPA_CA_CRT�stat�st_size)Z	cert_pathrTrTrU�
get_cert_path�s�rdcCs<|��}|��}|s|r8|�|jd|�|�|jd|�dS)N�enabled�running)�
is_enabled�
is_running�backup_state�service_name�r�
statestorererfrTrTrU�
save_state�s
rmcCs�|�|jd�}|�|jd�}|rNz|��Wn tyLt�d|j�Yn0|r�z|��Wn ty~t�d|j�Yn0dS)Nrerf�6Failed to configure automatic startup of the %s daemonzFailed to restart the %s daemon)�
restore_staterj�enable�	ExceptionrK�warning�startrkrTrTrUro�s$�
�roc
Cs�dtjtjtjgtjgd�dtjgd�g}i}d}|D]j}g||d<dD]T}z<||D].}tj�|�rX||d�	|�|dkrXd	}qXWqJt
y�YqJ0qJq6||fS)
z�Checks whether nss_ldap or nss-pam-ldapd is installed.
     If anyone of mandatory files was found returns True and list of all files
     found.
    �configure_ldap_conf)�function�	mandatory�optional�configure_nslcd_conf)rurvFru)rvrwrvT)r �	LDAP_CONFZ
NSS_LDAP_CONFZLIBNSS_LDAP_CONFZ
PAM_LDAP_CONFZ
NSLCD_CONFrEr_�isfile�append�KeyError)Zfiles_to_checkZfiles_foundZretvalruZ	file_typerYrTrTrU�nssldap_exists�s2��	��

r}cCs�tj�|�sdSt�d�}t�}t|��<}|D]&}|�|�}|dur.|�|�	d��q.Wd�n1sj0Y|r�t
d�|d�t
|���|d��ndSdS)NFz^\s*(PORT|HOST).*r6z4'{}' contains deprecated and unsupported entries: {}�, ��rvalT)rEr_rz�re�compile�set�open�match�addr*r'�format�join�sorted)�confZ
error_rval�patZunsupported�f�line�morTrTrU�check_ldap_conf�s"


0��r�c	Cs�z�t��}|��|��}d}|D]H}|�|�}z |�d�}|dkrN|}WqlWq"tjyhYq"Yq"0q"|dur�|�|�|��n
t�	d�Wnt
y�t�	d�Yn0dS)zIHelper function for uninstall.
    Deletes IPA domain from sssd.conf
    N�id_provider�ipazNIPA domain could not be found in /etc/sssd/sssd.conf and therefore not deletedzKIPA domain could not be deleted. No access to the /etc/sssd/sssd.conf file.)�
SSSDConfig�
import_config�list_active_domains�
get_domain�
get_option�
NoOptionErrorZ
delete_domain�writerKrr�IOError)�
sssdconfig�domainsZipa_domain_namer\�domain�providerrTrTrU�delete_ipa_domains0




��r�cCstjdtdd�t|�S)a
    Consider IPA client not installed if nothing is backed up
    and default.conf file does not exist. If on_master is set to True,
    the existence of default.conf file is not taken into consideration,
    since it has been already created by ipa-server-install.
    z+Use 'ipalib.facts.is_ipa_client_configured'r<��
stacklevel)�warnings�warn�DeprecationWarningr��	on_masterrTrTrU�is_ipa_client_installed0s�r�TrTcCs$tjdtdd�t�||||||�S)a:
    This function was deprecated. Use ipaplatform.tasks.

    Edits the specified nsswitch.conf database (e.g. passwd, group, sudoers)
    to use the specified service(s).

    Arguments:
        fstore - FileStore to backup the nsswitch.conf
        database - database configuration that should be ammended,
                    e.g. 'sudoers'
        service - list of services that should be added, e.g. ['sss']
        preserve - if True, the already configured services will be preserved

    The next arguments modify the behaviour if preserve=True:
        append - if True, the services will be appended, if False, prepended
        default_value - list of services that are considered as default (if
                        the database is not mentioned in nsswitch.conf), e.g.
                        ['files']
    z7Use ipaplatform.tasks.tasks.configure_nsswitch_databaser<r�)r�r�r�r!�configure_nsswitch_database)�fstoreZdatabaserZpreserver{Z
default_valuerTrTrUr�?s�
�r�c
Cs�td�}|�d�|�d�dddd�|��g}|�d|�|�d|�|�d	|�|�d
|d�|�d|�|�d
d�t�|d���|�dd�g}|�|�	d|�|��g�t
j}	|�|	�|�
|	|�t�|	d�dS)N�
IPA Installer� = ��[�]�comment�#File modified by ipa-client-install�r\�type�value�basedn�realmr��serverr�hostZ
xmlrpc_urizhttps://{}/ipa/xml�	enable_ra�True�global�)r;�setOptionAssignment�setSectionNameDelimiters�	emptyLine�	setOptionr�r%�
format_netloc�extend�
setSectionr �IPA_DEFAULT_CONF�backup_file�newConfrE�chmod)
r��
cli_basedn�	cli_realm�
cli_domain�
cli_serverrZipaconf�optsZdefopts�target_fnamerTrTrU�configure_ipa_conf]s:

��



��
�
�
r�cCsBt�}|�tj�|�ddd�ttjd�}|�|�|��dS)z�Set the enable_ra option in /etc/ipa/default.conf to False

    Note that api.env will retain the old value (it is readonly).
    r�r��False�wN)r�readr r�r�r�r�rF)�parser�fprTrTrU�
disable_ra�s
r�cCs�td�}|�d�dddd�|��|�dd�|�d|�|��|�d	d
jtdd|�d
d��|�dd
jtdd|�d
d��|�dd�|�dd�|�dd�|��|�dd�|�dd�|�dd�|�dd�|��g}	|r�|js�|j�r|jr�|	�|�dd ��n"|	�|�dd!�t	�
|d"����n|	�|�d#|��|	�|���|D]h}
z|�|
�|�|
|	�WnFt
�y�}z,t�d$|
t|��d%d&|
fWYd}~Sd}~00�q>|�r�d"d&d'�|�fSd(S))Nr�� r�r�r��ldap_version�3�baseZnss_base_passwdz{dn}{suffix}��cnZusers�r�Zaccountsz?sub)Zdn�suffixZnss_base_group�r��groupsZ
nss_schemaZ
rfc2307bisZnss_map_attributezuniqueMember memberZnss_initgroups_ignoreuserszroot,dirsrvZnss_reconnect_maxsleeptime�8Znss_reconnect_sleeptime�1Zbind_timelimit�5�	timelimit�15�uri�ldap://localhost�	ldap://{}rZnss_srv_domain�Creation of %s failed: %sr6�LDAPr~�rNN)r;r�r�r�r�r(�forcer�r{r%r�r�r�rqrKrLr[r�)r�r�r�r�r��dnsokrO�files�ldapconfr�rYrZrTrTrUrt�sd
�


��
��






��

(rtc
Cstd�}|�d�dddd�|��|�dd�|�d|�|��|�d	ttd
d|���|�dttd
d|���|�dd�|��g	}	|r�|js�|jr�|jr�|	�|�dd��q�|	�|�dd�	t
�|d����n|	�|�dd��|	�|���|D]\}
z|�|
�|�
|
|	�Wq�t�yH}z"t�d|
t|��WYd}~dSd}~00q�tjj}|���r�z|��Wn4t�y�}zt|jd|�WYd}~n
d}~00z|��Wn:t�y�}z t�d|jt|��WYd}~n
d}~00nt�d|j�dSddd�|�fS)Nr�r�r�r�r�r�r�r�zbase passwdr�r�z
base groupr�r�r�r�r�r�rZDNSr�)r6NN�restartz7Failed to enable automatic startup of the %s daemon: %s�.%s daemon is not installed, skip configurationr�ZNSLCDr~)r;r�r�r�r[r(r�r�r{r�r%r�r�r�rqrKrLr�
knownservices�nslcd�is_installedr�r^rjrp�debugr�)
r�r�r�r�r�r�rOr�Z	nslcdconfr�rYrZr�rTrTrUrx�sj
�


�
�
��


$
��rxcCs�td�}|�d�dddd�|��dddd�dddd�dddd�ddd	d�ddd
d�dddd�dddd�ddd
d�|��|��dddd�|d�d�dddt|�d�ddddd�g}tj}|�|�d}z|�||�Wn�t	�y&}z4t
�d|�t
�d|j|t|�d��WYd}~dSd}~0t
�yr}z4t
�d|�t
�d|j|t|�d��WYd}~dSd}~0t�y�}z(t
�d|j|t|�d��WYd}~dSd}~00t�|d�dS)Nr�)r��	r�z$ File modified by ipa-client-installr�z< We do not want to break your existing configuration, hence:z   URI, BASE, and SASL_MECHz(   have been added if they were not set.z@   In case any of them were set, a comment has been inserted andz9   "# CONF_NAME modified by IPA" added to the line above.z? To use IPA server with openLDAP tools, please comment out yourz; existing configuration for these options and uncomment thez& corresponding lines generated by IPA.ZaddifnotsetZURI�optionz
ldaps://{}r)r]r\r�r�ZBASEZ	SASL_MECHZGSSAPIz%Configuring {path} failed with: {err}zCould not parse %s�%s)r_�errFz%s does not exist.r�T)r;r�r�r�r[r �OPENLDAP_LDAP_CONFr��
changeConf�SyntaxErrorrK�infor�r�rqrEr�)r�r�r�r�r�r�Z	error_msgrZrTrTrU�configure_openldap_confs�
�������������K
r�c	Csjtj�tj�sdStd�}|�d�|�dd�t	�
|d���|��g}|�tj|�t
�d|d�dS)ze
    DNS Discovery didn't return a valid IPA server, hardcode a value into
    the file instead.
    Nr�r�r�r�rzHChanged configuration of /etc/ldap.conf to use hardcoded server name: %s)rEr_rzr ryr;r�r�r�r%r�r�r�rKr�)r�r�r�rTrTrU�hardcode_ldap_server{s

���r�cCsJtj�tjtj�tj�d�}t�|tj�t�	tjd�t
�tj�dS)Nz	.templater�)rEr_r�r ZUSR_SHARE_IPA_CLIENT_DIR�basenameZKRB5_FREEIPA�shutil�copyr�r!Zrestore_context)�templaterTrTrU�configure_krb5_snippet�s�rc

Cs�t�td�}
|
�d�|
�d�|
�d�|
�d�dddd�|
��g}tj�	t
j�rp|�d	d
t
jdd�g�|
�
d
|�g}|r�|r�|r�|�|
�
dd�g�n|�|
�
dd�g�|�|
�
dd�|
�
dd�|
�
dd�|
�
dd�|
�
dd�|
�
dd�g�t���r t�d�|�|
�
dd��|�|
�d|�|
��g�g}
|�rP|�rP|�r�|D]X}|
�|
�
dt�|d��|
�
dt�|d��|
�
d t�|d!��|
�
d"t�|d#��g��qT|
�|
�
d$|��|
�|
�
d%d&t
j��|
�|
�
d'd&t
j��|d(|
d�g}|�|
�d)|��|�|
���|
�
d*�|�|�|
�
||�|
�
||�g}||k�rt|�|
�
d*�|�|�|
�
||�g�|�|
�d+|�|
��g�t�d,|�t�d-|
�|��|
�||�t�|d.�dS)/Nr�)r�r�r�)�{�})�z  �    r�r�r�Z
includedirr�r�)r\r�r��delimZ
default_realmZdns_lookup_realmZfalse�trueZrdnsZdns_canonicalize_hostnameZdns_lookup_kdcZticket_lifetimeZ24hZforwardableZudp_preference_limit�0z"Enabling persistent keyring CCACHEZdefault_ccache_namezKEYRING:persistent:%{uid}Zlibdefaults�kdc�XZ
master_kdcZadmin_serveri�Zkpasswd_serveri�Zdefault_domain�pkinit_anchorszFILE:%sZpkinit_poolZ
subsectionZrealmsz.{}Zdomain_realmz%Writing Kerberos configuration to %s:r�r�)rr;r�r�ZsetSubSectionDelimitersZ	setIndentr�rEr_r`r ZCOMMON_KRB5_CONF_DIRr�r�r#Zis_persistent_keyring_supportedrKr�r{r�r%r��KDC_CA_BUNDLE_PEM�
CA_BUNDLE_PEMr��dumpr�r�)r�r�r��cli_kdcr�rY�
client_domain�client_hostnamer��configure_sssdZkrbconfr�ZliboptsZkroptsr�ZroptsZdroptsrTrTrU�configure_krb5_conf�s�



��	��
�
�
�





�



�
�
�
�
��
	�����

�

�
�rc
Csntjj}|jsXz|��Wn8tyR}z t�d|jt	|��WYd}~n
d}~00dS|sjt�
d�dSd||f}|jr�t�|�z|�
�|��WnBty�}z*t�d|jt	|��t�
d�WYd}~n
d}~00t	td|f|��}	tj�tjd�}
z"tjtjdd	|	|g||
d
d�WnFt�yh}z,t�d�td
�|j|�td��WYd}~n
d}~00dS)Nz1Failed to conditionally restart the %s daemon: %szGAn RA is not configured on the server. Not requesting host certificate.�
host/%s@%sz:Failed to configure automatic startup of the %s daemon: %sz6Automatic certificate management will not be available�CNzpwdfile.txtZNSSDB�Local IPA host�x)ZcertpathZstorage�nickname�subject�dns�	principal�passwd_fnameZresubmit_timeoutzcertmonger request failedz*{} request for host certificate failed: {}r)rr�r�request_certZtry_restartrqrKrLrjr[rrrZadd_principal_to_casrprsr(rEr_r�r �
IPA_NSSDB_DIRZrequest_and_wait_for_cert�	exceptionr'r��CLIENT_INSTALL_ERROR)r��subject_baser�rrO�
ca_enabled�cmongerrZrrrrTrTrU�configure_certmongers`
�


���


��r#c

Cs>zt��}|��Wn�ty�}z�tj�tj�rj|jrjt	�
dt|��t	�
d�t	�d�WYd}~dSt
|t�rvnt	�
d�t	�d�t	�d�t��}|��WYd}~n
d}~00z|�|�}	WnFtj�yt	�d|�t	�d�t��}|��|�|�}	Yn0|j�r t|�|j�r8tj�tj��sP|j�r�tj�tj��r�z|�d	�WnHtj�ytYn4tj�y�t	�
d
�t	�d�t	�d�Yn0|�d	�|j�rz|�d
�Wn4tj�y�Yn tj�y�t	�
d�Yn0|�d
�t� |�|	�!dd�|j�s<||k�r<|	�"d|�|j�sx|j#�r`|	�"dd�$|��n|	�"ddd�$|��nb|	�"dd�|	�"d|d�z|�%d�}
Wn tj&�y�|�d�}
Yn0|
�"dd�|�'|
�t(|d�t(|d�|j�rt(|d	�|	�"d|�|	�"d|�|�)�|�)�k�r6|	�"d|�|	�!dd�|	�!dd �|j*�sd|	�!dd!�n|	�!d"d!�|	�"d#d$�|	�"d%tj+�|j,�r|	�"d&d$�|j-�r�tt.t/�0|d��d�}|	�"d'd(�1||d��|j2�r�|	�"d)d*�nt3|d�}|	�"d)|�|j4�r|	�"d+d$�|	�5d$�|�6|	�|�7tj�dS),Nz+SSSD config exists but cannot be parsed: %sz/Was instructed to preserve existing SSSD configz=Correct errors in /etc/sssd/sssd.conf and re-run installationr6zxUnable to parse existing SSSD config. As option --preserve-sssd was not specified, new config will override the old one.zOThe old /etc/sssd/sssd.conf is backed up and will be restored during uninstall.zNew SSSD config will be createdzLDomain %s is already configured in existing SSSD config, creating a new one.Zsshz2Unable to activate the SSH service in SSSD config.z@Please make sure you have SSSD built with SSH support installed.z6Configure SSH support manually in /etc/sssd/sssd.conf.�sudoz3Unable to activate the SUDO service in SSSD config.r��idZdns_discovery_domainZ
ipa_serverr~z	_srv_, %sZipa_server_moder�rZnssZmemcache_timeoutiXZpam�
ipa_domain�ipa_hostnameZ
krb5_realmZauthZchpass�access�permitZcache_credentialsTZldap_tls_cacert�
dyndns_updateZ
dyndns_serverzdns+tls://{}:853#{}Zdyndns_iface�*Zkrb5_store_password_if_offline)8r�r�rqrEr_r`r �	SSSD_CONFZ
preserve_sssdrKrLr[r��
isinstancer�r�Z
new_configZ
new_domainZDomainAlreadyExistsErrorr��sssd_enable_ifp�conf_sshrz�
SSH_CONFIG�	conf_sshd�SSHD_CONFIG�new_service�ServiceAlreadyExists�ServiceNotRecognizedError�activate_service�	conf_sudor!Zenable_sssd_sudoZadd_provider�
set_option�primaryr��get_serviceZNoServiceError�save_service�sssd_enable_service�lowerr)ra�dns_updates�dns_over_tls�listr&�resolve_ip_addressesr��all_ip_addresses�get_server_connection_interface�krb5_offline_passwordsZ
set_active�save_domainr�)
r�r�r�r�rOrrr�rZr�Znss_service�	server_ip�ifacerTrTrU�configure_sssd_confXs���

��
���������

�


�



��
�

rHcCspz|�|�WnLtjy"Yn:tjyZt�d|�t�d|�t�d|�YdS0|�|�|�|�S)Nz3Unable to activate the '%s' service in SSSD config.z?Please make sure you have SSSD built with %s support installed.z5Configure %s support manually in /etc/sssd/sssd.conf.)	r3r�r4r5rKrLr�r6r:)r�r\rTrTrUr<s$���
r<cCs�t|d�}|durdSz|�d�}Wntjy>t�}Yn0dd�|�d�D�}|�ddh�rl|�d�|�t�|r�|�t	j
�|�dd	�t
|���|�|�dS)
aEnable and configure libsss_simpleifp plugin

    Allow the ``ipaapi`` user to access IFP. In case allow_httpd is true,
    the Apache HTTPd user is also allowed to access IFP. For smart card
    authentication, mod_lookup_identity must be allowed to access user
    information.
    ZifpNZallowed_uidscSsh|]}|��r|���qSrT)�strip)�.0�srTrTrU�	<setcomp>'�z"sssd_enable_ifp.<locals>.<setcomp>�,r�rootr~)r<r�r�r�r��split�
isdisjointr�rrZ
HTTPD_USERr8r�r�r;)r�Zallow_httpdrZuidsrTrTrUr.s


r.c

Cs�|sdSzt|d�}Wn8tyN}z t�d|t|��WYd}~dSd}~00tdd�|D��}tdd�|D��}g}d}|D]j}	|	�d�}	|	��}
|
r�|
�d	�r�|�	|	�q�|
�
�d
��}||vr�d}q�||vr�d	|	}	|�	|	�q�|��D]&\}}|du�r�|�	d||f��q�|�r6|�	d�|�	|	�|D]}	|	�d�}	|�	|	��q:|�	d�|�
�zt|d
�}Wn:t�y�}z t�d|t|��WYd}~dSd}~00|�d�|��|�
�dS)NT�r�Failed to open '%s': %sFcss|]}|��VqdS�N�r=�rJ�keyrTrTrU�	<genexpr>>rMz$change_ssh_config.<locals>.<genexpr>css|]}|��VqdSrTrUrVrTrTrUrX?rM�
�#rz%s %srr�)r�r�rKrLr[�tuple�rstriprI�
startswithr{rPr=�itemsrFr�r�)
rY�changesZsectionsr�rZZchange_keysZsection_keys�linesZ
in_sectionr�Zpliner�r�rTrTrU�change_ssh_config4sV






racCs^tj�tj�s t�dtj�dS|�tj�dd�}|�rDt|�nt	|�t�dtj�dS)N�$%s not found, skipping configurationcSsXttjd��8}|D]"}t�d|�rWd�dSqWd�n1sJ0YdS�NrRz
^Include\sTF)r�r r0r�r��r�r�rTrTrU�ssh_version_supports_includeqs
2z:configure_ssh_config.<locals>.ssh_version_supports_include�
Configured %s)
rEr_rzr r0rKr�r��create_ssh_ipa_config�modify_ssh_config)r�rOrerTrTrU�configure_ssh_configjs
ricCs�ddi}t|jotj�tj��}t|jo:tj�tj�o:|�}|jrV|rVdtj|d<|jrx|rxdtj|d<tj|d<|j	r�d|d<t
tj|d	d
g�dS)N�PubkeyAuthentication�yesz%s %%HZKnownHostsCommandz
%s -p %%p %%hZProxyCommandZGlobalKnownHostsFileZVerifyHostKeyDNSZHost�Match)�boolr9rEr_rzr �SSS_SSH_KNOWNHOSTS�SSS_SSH_KNOWNHOSTSPROXY�SSSD_PUBCONF_KNOWN_HOSTS�trust_sshfprar0)rOr_�enableknownhosts�enableproxyrTrTrUrh�s,��
��
��
rhcCs�t|jotj�tj��}t|jo2tj�tj�o2|�}t�	tj�
tj�tjt
|rTdndtj|rbdndtjtj|jrvdndd��t�tjd�dS)zAdd the IPA snippet for sshrrZ)ZENABLEKNOWNHOSTSZKNOWNHOSTSCOMMANDZENABLEPROXYZKNOWNHOSTSPROXYZ
KNOWNHOSTSZVERIFYHOSTKEYDNSr�N)rmr9rEr_rzr rnror%�copy_template_filer�ZSSH_IPA_CONFIG_TEMPLATE�SSH_IPA_CONFIG�dictrprqr�)rOrrrsrTrTrUrg�s(��

��rgc
Cs�tjj}tj�tj�s(t�	dtj�dS|�
tj�dd�}|�rLt|�nt|�|�
�r�z|��Wn2ty�}zt|jd|�WYd}~n
d}~00dS)NrbcSsXttjd��8}|D]"}t�d|�rWd�dSqWd�n1sJ0YdSrc)r�r r2r�r�rdrTrTrU�sshd_version_supports_include�s
2z<configure_sshd_config.<locals>.sshd_version_supports_includer�)rr��sshdrEr_rzr r2rKr�r��create_sshd_ipa_config�modify_sshd_configrhr�rqr^rj)r�rOrxrwrZrTrTrU�configure_sshd_config�s
r{cCs�dddddd�}|jr�tj�tj�r�d}tjdd�tjdd�dtjdd�f}|D]Z}tjd	d
tjg}|��D]}|�	d�|�	d|�qnt
j|d
d�}|jdkrR|}q�qR|dur�|�
|�n
t�d�ttj|dg�t�dtj�dS)Nrk�no)rjZKerberosAuthenticationZGSSAPIAuthenticationZUsePAMZChallengeResponseAuthenticationZnobody)�AuthorizedKeysCommandZAuthorizedKeysCommandUser)r}ZAuthorizedKeysCommandRunAsz%s %%u)ZPubKeyAgentZPubKeyAgentRunAsz-t�-f�-oz%s=%sF)�
raiseonerrrz�Installed OpenSSH server does not support dynamically loading authorized user keys. Public key authentication of IPA users will not be available.rlrf)r9rEr_rzr �SSS_SSH_AUTHORIZEDKEYSZSSHD�devnullr^r{r%r0�
returncode�updaterKrrrar2r�)rOr_Zauthorized_keys_changesZ
candidates�	candidate�args�item�resultrTrTrUrz�sD�����

�rzcCs\d}|jr*tj�tj�r*t�d��tj�}t	�
tj�tj�tj
t|d��t�dtj
�dS)zAdd the IPA snippet for sshdrzZ            AuthorizedKeysCommand {}
            AuthorizedKeysCommandUser nobody
        )ZSSSD_SSHD_OPTIONSrfN)r9rEr_rzr r��textwrap�dedentr�r%rtr�ZSSHD_IPA_CONFIG_TEMPLATE�SSHD_IPA_CONFIGrvrKr�)rOZsssd_sshd_optionsrTrTrUrys
���ryc
Cs�t�d�tjddd|jg}|jr6|�d|jdg�|jsF|�d�|�	dd	d
�z`zt
|�}Wn4ty�}zt�dt
|��WYd}~nd}~00t�d|j�W|�dd	�n|�dd	�0dS)
Nz
Configuring automount:�--debugz-Uz
--locationz--serverrz	--no-sssd�installationr7Tz"Automount configuration failed: %sr�)rKr�r �IPA_CLIENT_AUTOMOUNT�locationr�r�r9r{rir0rqrLr[Z
output_log�delete_state)rOrlr�r�rZrTrTrU�configure_automounts

�
&r�cCs�|jp|}t�d|�d}tj�tj�rXztj	tjgdd�}Wnt
yPYn0|j}|�dd|�|�ddt
jj���t�|�t
jj��t
jj��dS)	NzConfiguring %s as NIS domain.rT�Zcapture_output�network�	nisdomain�
domainnamere)r�rKr�rEr_r`r ZBIN_NISDOMAINNAMEr%r0r.�outputrirr�r�rgr!�
set_nisdomainrpr�)rOr�rlZnis_domain_namer�rTrTrU�configure_nisdomain3s(
�

�
r�cCs`|�d�r@|�dd�pd}|r,t�d|�n
t�d�t�|�|�dd�}|s\tjj�	�dS)Nr�r�rzRestoring %s as NIS domain.zUnconfiguring the NIS domain.r�re)
�	has_staterorKr�r!r�rr�r��disable)rlZ
old_nisdomainrerTrTrU�unconfigure_nisdomainUs


r�cCsht��D]N}t�|�}tjtjfD]2}|�|g�D] }|d|kr2|Sq2q"qtd|��dS)N�addrz$IP %s not assigned to any interface.)�	netifaces�
interfaces�ifaddresses�AF_INET�AF_INET6�get�RuntimeError)Zip_addr�	interface�if_addrs�family�iprTrTrU�get_iface_from_ipgs
r�c
Cs�|r|g}nt��}g}|D]�}t�|�}tjtjfD]p}|�|g�D]^}z(|�t�|d��t	�
d|d�WqFty�}zt	�
d|�WYd}~qFd}~00qFq6q|S)Nr�zIP check successful: %szIP check failed: %s)r�r�r�r�r�r�r{r%�CheckedIPAddressrKr��
ValueError)rGr��ipsr�r�r�r�rZrTrTrU�get_local_ipaddressesqs
(r�c
Cs~t�dt�t�d|�ttd��}|�|�Wd�n1sB0Yd}z@|jrvt�tj	dddd|d	tg�nt�tj	d	tg�d
}W�n�t
�yT}�z�t�dt|���zR|jr�t�tj	dddd|d	tg�nt�tj	tg�z�t��}|�
�|��}|D]�}|�|�}	z|	�d�}
Wntj�yBY�q
Yn0|tjjk�r
|
d
k�r
z>|	�d�d
u�r�|	�dd�|�|	�|�tj�W�q�Wntj�y�Y�q�Yn0�q
Wn@t�y}z&t�dt|��t�d�WYd}~n
d}~00d
}Wn6t
�y>}zt�dt|��WYd}~n
d}~00WYd}~n
d}~00zt�t�Wnt�yxYn0|S)Nz Writing nsupdate commands to %s:r�r�Fz-pZ853z-Sz-Hz-gTznsupdate (GSS-TSIG) failed: %sr�r�r*Zdyndns_authZnonez'Unable to update SSSD configuration: %sz{Failed to configure SSSD for unauthenticated DNS dynamic updates. SSSD might be unable to update DNS entries for this host.z#Unauthenticated nsupdate failed: %s)rKr��UPDATE_FILEr�r�r?r%r0r ZNSUPDATEr.r[r�r�r�r�r�r�r�envr�r8rEr,rqr�rErI)�
update_txtrOr�r�r�rZr�r�r\r�r�rTrTrU�do_nsupdate�sh(�
�

�<r�z)
update delete $HOSTNAME. IN A
show
send
z,
update delete $HOSTNAME. IN AAAA
show
send
z6
update add $HOSTNAME. $TTL IN A $IPADDRESS
show
send
z9
update add $HOSTNAME. $TTL IN AAAA $IPADDRESS
show
send
c
Cs�z
t�}Wn4ty>}zt�d|�d}WYd}~n
d}~00|jr\|durVtd��|}n�|jr�g}|jD]}|�t�	|��qln�zt
|�}Wn2ty�}zt�d|�WYd}~dSd}~00zt|�}Wn4t�y}zt�d|�WYd}~dSd}~00|�st�d�dSt|�d}|j
�r:|d|7}|t�tt|d��7}|t�tt|d��7}|D]F}t||dd�}	|jd	k�r�t}
n|jd
k�r�t}
|t�|
|	�7}�qjt|||��s�t�d�t||�dS)NzCannot update DNS records. %sz!Unable to get local IP addresses.z2Failed to determine this machine's ip address(es).�debug
�server %s 853
)�HOSTNAME�)r�Z	IPADDRESSZTTLr>�zFailed to update DNS records.)r�r.rKrLrBr��ip_addressesr{r%r�rCr�rr?�template_str�DELETE_TEMPLATE_Arv�DELETE_TEMPLATE_AAAAr4�ADD_TEMPLATE_A�ADD_TEMPLATE_AAAAr��verify_dns_update)r�rrOr�rZZ
update_ipsr�rGr�Zsub_dictr�rTrTrU�
update_dns�s\


��
r�c
Csldd�|D�}g}tjjtjjfD]�}t�d|tj�|��zt�||�}Wndtj	j
tj	jfytt�d�Yq"tj	jy�t�d�Yq"tj
jy�t�d�Yq"0|D]4}z|�|j�Wq�ty�|�|j�Yq�0q�q"tj�|�}i}dd�|D�}	|D]�}
t|
�}t�d|�zt�|�}Wnjtj	j
tj	jf�y`t�d�Ynxtj	j�y�t�d	�YnXtj
j�y�t�d�Yn80|	�|�|D]&}|j|k�s�|�|g��|j��q��q|�r�t�d
|d�|��|�rt�d|d�|��|	�r(t�d
d�|	��|�rht�d�|��D]&\}
}|D]}
t�d|
|
|��qL�q@dS)zz
    Verify that the fqdn resolves to all IP addresses and
    that there's matching PTR record for every IP address.
    cSsg|]}t|��qSrT�r[�rJr�rTrTrU�
<listcomp>rMz%verify_dns_update.<locals>.<listcomp>zDNS resolver: Query: %s IN %szDNS resolver: No record.z0DNS resolver: No nameservers answered the query.zDNS resolver error.cSsg|]}t|��qSrTr�r�rTrTrUr�2rMzDNS resolver: Query: %s IN PTRz/DNS resolver: No nameservers answered thequery.z)Missing A/AAAA record(s) for host %s: %s.r~z'Extra A/AAAA record(s) for host %s: %s.z.Missing reverse record(s) for address(es): %s.zIncorrect reverse record(s):z"%s is pointing to %s instead of %sN)rZ	rdatatype�AZAAAArKr�Zto_textr&�resolveZresolverZNoAnswerZNXDOMAINZ
NoNameserversrZDNSExceptionrI�addressr�r{r\Z	from_textr[Zresolve_address�target�
setdefaultrrr�r^)Zfqdnr�Zmissing_ipsZ	extra_ipsZrecord_typeZanswersZrdataZ	fqdn_nameZ
wrong_reverseZmissing_reverser��ip_str�targetsr�rTrTrUr�sp�

�
��
�r�c
Cs\d}t�|dtjtj�D�]}|\}}}}}zt�|||�}Wn6tjyt}	z|	}WYd}	~	qWYd}	~	n
d}	~	00ztz|�|�|��}
|
d}WnDtjy�}	z*|	}WYd}	~	W|r|��qWYd}	~	n
d}	~	00W|r�|��n|r�|��0zt|�WSt	t
f�y6}	z|	}WYd}	~	qd}	~	00qd}|�rP|d|7}t
|��dS)zMConnect to IPA server, get all ip addresses of interface used to connect
    Ni�rz&Cannot get server connection interfacez: %s)�socketZgetaddrinfoZ	AF_UNSPECZSOCK_STREAMrL�connectZgetsocknamerFr�r.r�)
r�Z
last_error�res�afZsocktype�protoZ
_canonnameZsarKrZZsocknamer��msgrTrTrUrCUs@�
"
�
�
rCc
Cslzt|�d}WnZtjy4t�d|�d}Yn8tjyj}zt�d||�d}WYd}~n
d}~00|j�r>t�t	j
�}|�ddd�tt
jd|�ttt�|��d�}d	||f}|jr�d
nd}	t�t	j�D]2}
tj�t	j|
�}|t	jkr�q�|�|�t|�q�t�t	jt	jttj�t	j d�||	d
��t
jd}|�!��rZ|�"�|�#�t
jd}
|
�$��r�t%t	j&d��(}gd�}|�'d�|��Wd�n1�s�0Y|
�(�gd�}|�t	j)�t%t	j)d��.}|�'d�|��t�*t	j)d�Wd�n1�s0Yt
jj+�,�t
jj+�-�t�.d�|j/�s\|j0�s\|j1�s\|�sht2|||�dS)NTz*Hostname (%s) does not have A/AAAA record.Fz)DNS resolution for hostname %s failed: %sr?re�unboundrzforward-addr: %s#%srz# z
ca-bundle.crt)ZTLS_CERT_BUNDLE_PATHZ
FORWARD_ADDRSZMODULE_CONFIG_ITERATORzsystemd-resolvedZNetworkManagerr�)�!# auto-generated by IPA installerz[main]z	dns=none
rY)r�zsearch .znameserver 127.0.0.55
r�zyDNS encryption support was enabled. Unbound is configured to listen on 127.0.0.55:53 and forward to upstream DoT servers.)3rrZDNSNotARecordErrorrKrrZDNSResolverErrorr?r
�	FileStorer �IPA_CLIENT_SYSRESTORErirmrr�r[r@r&rA�no_dnssec_validationrE�listdir�UNBOUND_CONFIG_DIRr_r��UNBOUND_CONFr�rNr%rtZUNBOUND_CONF_SRCrvZOPENSSL_CERTS_DIRrh�stopr�rgr�ZNETWORK_MANAGER_IPA_CONFr�Zreload_or_restartZRESOLV_CONFr�r�rpr�r�r>rBr�r�)r�rrOrlZdns_ok�exr�rFZforward_addrZmodule_config_iteratorrY�filepath�srZnmr�Zdns_noneZcfgrTrTrU�
client_dnsvs���


���




0.
����r�cCsZ|jrV|jD]H}zt�|�WqtyR}zt�d|�WYd}~dSd}~00qdS)Nr�FT)r�r%r�r�rKrL)rOr�rZrTrTrU�check_ip_addresses�s
r�cCsNtj�|�sdSg}t�|�D�]}|�d�s0qtj�||�}zt|d�}WnBty�}z*t�	d|t
|��WYd}~qWYd}~n
d}~00|D]�}	|	��}	|	r�|	�d�r�q�zt
|	�}
WnBttfy�}z&t�d|	|�WYd}~q�WYd}~n
d}~00t�d|�|�|
�q�|��qz,tjjjdt�|�dd	�|D�d
dd�WnVtj�ydYnBt�y�}z(t�d
t
|��t�	d�WYd}~dSd}~00|j�rJd}d}|j�r�|d|7}|d|7}|D]N}
|
��}
|
du�r|d|||
f7}|
� �}
|
du�r�|d|||
f7}�q�|d7}t!|||��sJt�	d�dS)Nz.pubrRrSrZzDecoding line '%s' failed: %szAdding SSH public key from %sZhost_modcSsg|]}|���qSrT)Zopenssh)rJZpkrTrTrUr��rMz#update_ssh_keys.<locals>.<listcomp>Fz2.26)ZipasshpubkeyZ	updatednsr4zhost_mod: %sz&Failed to upload host SSH public keys.r�r�r�z%update delete %s. IN SSHFP
show
send
zupdate add %s. %s IN SSHFP %s
z
show
send
z#Could not update DNS SSHFP records.)"rEr_�isdirr��endswithr�r�r�rKrrr[rIr]r2r��UnicodeDecodeErrorr�r�r{rFr�Backend�	rpcclient�forwardr%�fsdecoderZEmptyModlistrq�create_sshfpr?Zfingerprint_dns_sha1Zfingerprint_dns_sha256r�)rZssh_dirrOr�Zpubkeysr�rYr�rZr�ZpubkeyZttlr�ZsshfprTrTrU�update_ssh_keys�st
""
�


�
�r�cCst�d�dS)Na/Please make sure the following ports are opened in the firewall settings:
     TCP: 80, 88, 389
     UDP: 88 (at least one of TCP/UDP ports 88 has to be open)
Also note that following ports are necessary for ipa-client working properly after enrollment:
     TCP: 464
     UDP: 464, 123 (if NTP enabled))rKr�rTrTrTrU�print_port_conf_infos�r�rcCs�|rd|}nd}|D]\}|d|t|j�f7}|d|t|j�f7}|d||jf7}|d||jf7}|d7}q|dd�}|S)	Nz%s
rz%sSubject:     %s
z%sIssuer:      %s
z%sValid From:  %s
z%sValid Until: %s
rY���)r(rZissuerZnot_valid_before_utcZnot_valid_after_utc)r��certs�indentrK�certrTrTrU�cert_summary$s

r�c
Cs�tj�|�}z�z|��t�||||�}Wn�tjyJtj|d��Ynjtj	y�}z tj	|j
t|�d��WYd}~n:d}~0ty�}zt�
t|���WYd}~n
d}~00W|��n
|��0|S)N��entry)r�rL)r$Z
LDAPClientZfrom_hostname_plainZgssapi_bindr�get_ca_certsrZNotFound�NoCertificateError�NetworkErrorZldap_urir[rq�	LDAPErrorZunbind)r�Zbase_dnr�r!Zconnr�rZrTrTrU�get_certs_from_ldap4s(&r�cCs�zt|d�}Wn"ty0tjd|d��Yn0|jdkrLtjd|d��|j}tj�|�sntjd|d��tj�|�s�tjd|d��t	�
d|�zt�|�}Wnty�tj
|d��Yn0|S)	z�
    Get the CA cert from a user supplied file and write it into the
    paths.IPA_CA_CRT file.

    Raises errors.NoCertificateError if unable to read cert.
    Raises errors.FileError if unable to write cert.
    �filezunable to parse file url '%s'��reasonzurl is not a file scheme '%s'zfile '%s' does not existzfile '%s' is not a filez'trying to retrieve CA cert from file %sr�)rrqr�	FileError�schemer_rEr`rzrKr�r	�load_certificate_list_from_filer�)�url�parsedrYr�rTrTrU�get_ca_certs_from_fileEs"	
r�cCs�|rt�d�t�d|�zttjdd|gdd�}WntyRtj|d��Yn0|j	}zt
�|�}Wnty�tj|d��Yn0|S)z�
    Use HTTP to retrieve the CA cert and write it into the paths.IPA_CA_CRT
    file. This is insecure and should be avoided.

    Raises errors.NoCertificateError if unable to retrieve and write cert.
    z9Downloading the CA certificate via HTTP, this is INSECUREz+trying to retrieve CA cert via HTTP from %sr�-Tr�r�)
rKrrr�r0r ZBIN_CURLr.rr�Z
raw_outputr	Zload_certificate_listrq)r�r�r��stdoutr�rTrTrU�get_ca_certs_from_httpgs
r�c
Csdt�d|�zt|||d�}Wn2tyP}zt�d|��WYd}~n
d}~00dd�|D�}|S)a�
    Retrieve th CA cert from the LDAP server by binding to the
    server with GSSAPI using the current Kerberos credentials.
    Write the retrieved cert into the paths.IPA_CA_CRT file.

    Raises errors.NoCertificateError if cert is not found.
    Raises errors.NetworkError if LDAP connection can't be established.
    Raises errors.LDAPError for any other generic LDAP error.
    Raises errors.OnlyOneValueAllowed if more than one cert is found.
    Raises errors.FileError if unable to write cert.
    z+trying to retrieve CA cert via LDAP from %sFz"get_ca_certs_from_ldap() error: %sNcSs g|]}|ddur|d�qS)r<FrrT)rJ�crTrTrUr��rMz*get_ca_certs_from_ldap.<locals>.<listcomp>)rKr�r�rq)r�r�r�r�rZrTrTrU�get_ca_certs_from_ldap�s
r�cCs�|durt�dtd|��dSt|�}t|�}||kr�t�dtj�t�dtd|��t�dtd|��|rxt�d�q�|r�tdd�s�tj	d	d
��n
t�
d�dS)Nr�zSuccessfully retrieved CA certz^The CA cert available from the IPA server does not match the
local certificate available at %szExisting CA cert:zRetrieved CA cert:zOverriding existing CA cert
zcDo you want to replace the local certificate with the CA
certificate retrieved from the IPA server?TzRetrieved CA)r\z4Existing CA cert and Retrieved CA cert are identical)rKr�r�r�rrr rar1rZCertificateInvalidErrorr�)�existing_ca_certsZnew_ca_certsZask�overriderTrTrU�validate_new_ca_certs�s>������rc
s�tjd}�fdd�}�fdd�}�fdd�}�j}	�jduoH�jdu}
d}d}�jr�|�}
zt|
�}Wnntjy�}zt	�
d	|��WYd}~nDd}~0ty�}z$t	�
d	|�tj|
d
��WYd}~n
d}~00t	�
d��n�t
j�tj��rnt
j�tj��rXzt�tj�}Wn<t�yT}z"tjdtj|fd
��WYd}~n
d}~00ntjdtj�d�d
��|
�r|�r�t	�d�n�|�}
|	}|	�r�td|
dd��s�tjdd��zt|
|�}Wn>t�y}z$t	�
d	|�tj|
d
��WYd}~n
d}~00t||d|��n�|�}
zt�||�}t|||	�W�nrtj�yt}zt	�
d	|��WYd}~�nDd}~0tjtjf�yn}z�t	�
d	t|��|�}
|�r�t	�d�n�|	�r�td|
dd��s�tjdd��n~|	�s�j�st	�d�tjdd��nXzt|
�}Wn>t�yL}z$t	�
d	|�tj|
d
��WYd}~n
d}~00t|||	�WYd}~nJd}~0t�y�}z(t	�
d	t|��tj|
d
��WYd}~n
d}~00|du�r�|du�r�t�d|��|du�r�ztj||dd�Wn�t�y|}zrt
j�|��rTzt
�|�Wn4t �yR}zt	�d||�WYd}~n
d}~00tjd||fd
��WYd}~n
d}~00t
�!|tj�zt
�"tjd�Wn<t�y�}z"tjd tj|fd
��WYd}~n
d}~00dS)!a}
    Examine the different options and determine a method for obtaining
    the CA cert.

    If successful the CA cert will have been written into paths.IPA_CA_CRT.

    Raises errors.NoCertificateError if not successful.

    The logic for determining how to load the CA cert is as follow:

    In the OTP case (not -p and -w):

    1. load from user supplied cert file
    2. else load from HTTP

    In the 'user_auth' case ((-p and -w) or interactive):

    1. load from user supplied cert file
    2. load from LDAP using SASL/GSS/Krb5 auth
       (provides mutual authentication, integrity and security)
    3. if LDAP failed and interactive ask for permission to
       use insecure HTTP (default: No)

    In the unattended case:

    1. load from user supplied cert file
    2. load from HTTP if --force specified else fail

    In all cases if HTTP is used emit warning message
    z.newcstdt���ddddf�S)NZldapr�rr%r�rT�r�rTrU�ldap_url�s�zget_ca_certs.<locals>.ldap_urlcstdd�jdddf�S)Nr�r)r�ca_cert_filerT)rOrTrU�file_url�s
�zget_ca_certs.<locals>.file_urlcstdt���ddddf�S)N�httpz/ipa/config/ca.crtrrrTrrTrU�http_url�s�zget_ca_certs.<locals>.http_urlNr�r�z!CA cert provided by user, use it!z(Unable to load existing CA cert '%s': %sr�zExisting ca cert 'z' is not a plain filez$OTP case, CA cert preexisted, use itz)Do you want to download the CA cert from z ?
(this is INSECURE)Fz*HTTP certificate download declined by user)�messagezKUnable to download CA cert from LDAP
but found preexisting cert, using it.
zOUnable to download CA cert from LDAP.
Do you want to download the CA cert from z?
(this is INSECURE)z�In unattended mode without a One Time Password (OTP) or without --ca-cert-file
You must specify --force to retrieve the CA cert using HTTPz*HTTP certificate download requires --forcez4expected CA cert file '%s' to exist, but it's absentr���modezFailed to remove '%s': %sz&cannot write certificate file '%s': %sz*Unable set permissions on ca cert '%s': %s)#r ra�
unattendedr�passwordrr�rr�rKr�rqr�rEr_r`rzr	r�r�r1r�rr�r�r[rrr�rLZ
InternalError�write_certificate_list�unlinkrJ�renamer�)r�rOr�r�r�Zca_filerrr	�interactiveZotp_authr�ca_certsr�rZr�e2rT)rOr�rUr��s� 
"����
��"��������"�"�
����r�a

/* Kerberos SSO configuration */
pref("network.negotiate-auth.trusted-uris", ".$DOMAIN");

/* These are the defaults */
pref("network.negotiate-auth.gsslib", "");
pref("network.negotiate-auth.using-native-gsslib", true);
pref("network.negotiate-auth.allow-proxies", true);
z
all-ipa.jszbrowser/defaults/preferencesc

Cs��z�t�d�d}|jdurLtj�|jt�}tj�|�r>|}q�t�d|�nTtj�	t
j�r�t
jt
j
fD]&}tj�|t�}tj�|�rf|}q�qfnt�d�WdS|du�r�tj�|�}t�d|�tj�|t�}t�tt|d��}t�d|�t�d|�zRt|d��}|�|�Wd�n1�s(0Yt�d	�|�d
d|�Wn<t�y�}	z"t�d|	�t�d
�WYd}	~	n
d}	~	00nt�d�t�d
�Wn@t�y�}	z&t�dt|	��t�d
�WYd}	~	n
d}	~	00dS)Nz!Setting up Firefox configuration.zDirectory '%s' does not exists.z2Firefox configuration skipped (Firefox not found).z)Firefox preferences directory found '%s'.)ZDOMAINz1Firefox trusted uris will be set as '.%s' domain.z2Firefox configuration will be stored in '%s' file.r�zFirefox sucessfully configured.�firefox�preferences_fnamez6An error occured during creating preferences file: %s.zFirefox configuration failed.z(Firefox preferences directory not found.r�)rKr��firefox_dirrEr_r��FIREFOX_PREFERENCES_REL_PATHr�rLrzr ZFIREFOXZLIB_FIREFOXZ
LIB64_FIREFOX�abspath�FIREFOX_PREFERENCES_FILENAMEr%r��FIREFOX_CONFIG_TEMPLATErvr�r�r�rirqr[)
rOrlr�Zpreferences_dirZ	pref_pathr_rr�r�rZrTrTrU�configure_firefoxwst


���
��
���*
��"
rc
Csnzt�tjdtjd|g�Wn<tyX}z$|jdvrDt�d|j�WYd}~nd}~00t�	d|tj�dS)N�-k�-r)r=��z@Error trying to clean keytab: /usr/sbin/ipa-rmkeytab returned %sz%Removed old keys for realm %s from %s)
r%r0r �IPA_RMKEYTAB�KRB5_KEYTABr.r�rKrLr�)r�rZrTrTrU�purge_host_keytab�s
�

��r#c
Cs`
td�td�tj��td�d}d}t��dks@tdtd��t�	�a
t|jd�rrt
�d	�t
�d
�ttd��t�|jr�zt��WnHtjy�}ztd�|j��WYd}~nd}~0tjy�Yn0|j�r,|jdu�r,|jdu�r,|jdu�r,|jdu�r,|jdu�r,|j�s,td
td��|jdu�r\|jdu�sP|jdu�r\tdtd��|j�rp|jadant adatt�!�k�r�td�t�td��tdv�r�td�t�td��zt"tt#d�Wn8t$�y�}ztd�|�td��WYd}~n
d}~00t�%��s|j&�stdtd��t�%��s:|j'�r:tdtd��t�(��sX|j)�rXtdtd��|j*�r�zt+�,ddg�Wnt-�y�t
�d�Yn0|j&�s�tj.�/t0j1��s�tdtd��t2�\}a3|�s�tdtd��|j�r�|j�r�tdtd��|j�r|j4�rt
�5d�zt6j7d t0j8id!d"�Wn0t6j9j:�yPt
�;d#t0j8�t<t0j8�Yn0|j=�szt>|j=�t0j?k�rzt
�5d$t0j?�t@|��s�ttd��|jA�r�tBjCd%�D��s�td&��|jE�r�|jA�s�td'��tF�G�}|jH|jI|jJ|jKtt>|j=�d(�}|jJ�r.|dk�r.t
�d)d*�L|jJ��t
�d+�tM�ttd��|tFjNk�rXt
�d,�t
�d-�ttd��|tFjOk�rvtd.�t�td��|tFjPtFjQfv�s�|jI�sd|tFjPk�r�|jJ�r�t
�;d/|jJ�n
t
�;d0�n:|tFjQk�r�|jJ�r�t
�;d1|jJ�n
t
�;d2�n
t
�;d3�|jI�r|jIaRd}n<|j�r$td4td��n&t
�d5�tSd6dd7�aRd8}t
�;d9tR�|jHtR|jJtt>|j=�d:�}tR�s�|jI�r�|jIaR|jT}t
�;d;tR�tt�Ud<�d=d�aV|tFjPtFjQfv�s�|jJ�s4t
�;d>�|jJ�r�|jJaWd}nB|j�r�td?td��n,t
�;d@�tSdAdd7�gaWd8}t
�;dBtWd�|jHtRtWtt>|j=�d:�}nP|jJ�sz|�X|jItY�dC�\}}|�rn|�rnt
�;dD�dEaZn
t
�;dF�n
t
�;dG�tW�s�|jJ�r�|j[aWd}t
�;dHd*�L|jJ��n$|jJ�r�|j[aW|j\}t
�;dItWd�|tFjQk�rt
�dJtWd�tM�t
�;dKtWd|�ttd��|tFj]k�rBt
�5dL�t
�dM�t
�dN�d}|tFj^k�rft
�5dO�t
�dM�d}|dk�r�t
�d)tWd�t
�d+�tM�t
�;dKtWd|�ttd��|j_a`tZ�r�t`�s�t
�dP|ja�!��t
�;dK|ja|jb�t
�dQ�tZ�r�t
�dR�nD|j�sB|jJ�st
�5dS�t
�dT�t
�dU�tSdVd��sBttd��|j�rz|j�sz|j�sz|jc�sz|jd�szt�e�\|_c|_d|jaaf|jb}	t
�;dWtf�|jK�r�|jKtfk�r�t
�dX|jKtf�t
�;dKtf|	�ttd��|jgah|ji}
t
�;dYth�tjdZtff�akt
�d[t�t
�;d\t�t
�d]tf�t
�;d^|	�t
�d_tR�t
�;d`|�t
�dad*�LtW��t
�;db|�t
�dcth�t
�;dd|
�|j�	s�|jc�	r�|jcD]}t
�de|��	q�|jd�	r�t
�df|jd�tWD]�}ztl�mtljn|�dE}WnHtlj�
yztl�mtljo|�dE}Wntlj�
yd}Yn0Yn0|�	r�t�t
�5dg��
q8�	q�t�|j�
s\tSdhd��
s\ttd��dS)iNz$This program will set up IPA client.z
Version {}rzUnknown sourcerz+You must be root to run ipa-client-install.rr�z0IPA client is already configured on this system.zcIf you want to reinstall the IPA client, uninstall it first using 'ipa-client-install --uninstall'.zaWARNING: conflicting time&date synchronization service '{}' will be disabled in favor of chronyd
Fz1One of password / principal / keytab is required.z=pkinit_identity is mutually exclusive with password / keytab.zProvided as optionzMachine's FQDNz*Invalid hostname '{}', must be lower-case.)Z	localhostzlocalhost.localdomainz(Invalid hostname, '{}' must not be used.)�maxlenzinvalid hostname: {}z�Option '--no-sssd' is incompatible with the 'authselect' tool provided by this distribution for configuring system authentication resourcesz�Option '--noac' is incompatible with the 'authselect' tool provided by this distribution for configuring system authentication resourcesz�Option '--mkhomedir' is incompatible with the 'authselect' tool provided by this distribution for configuring system authentication resourcesr$z-VzhThe sudo binary does not seem to be present on this system. Please consider installing sudo if required.z&The pam_krb5 package must be installedzBOne of these packages must be installed: nss_ldap or nss-pam-ldapdz9Options 'principal' and 'keytab' cannot be used together.zZOption 'force-join' has no additional effect when used with together with option 'keytab'.�keytabZaccept)�store�usagezDeleting invalid keytab: '%s'.z Using existing certificate '%s'.r�zKTo enable DNS over TLS, package ipa-client-encrypted-dns must be installed.zSYou can not specify --no-dnssec-validation option without the--dns-over-tls option.)r��serversr�r�ca_cert_pathz*Failed to verify that %s is an IPA Server.r~zgThis may mean that the remote server is not up or is not reachable due to network or firewall settings.z/Can't get the fully qualified name of this hostz,Check that the client is properly configuredz${} is not a fully-qualified hostnamez%s is not an LDAP serverzNo LDAP server foundz%s is not an IPA serverzNo IPA server foundzDomain not foundz7Unable to discover domain, not provided on command linez1DNS discovery failed to determine your DNS domainz<Provide the domain name of your IPA server (ex: example.com)�Zallow_emptyzProvided interactivelyz*will use interactively provided domain: %s)r�r(rr)zwill use discovered domain: %s�.r6zIPA Server not foundz!Unable to find IPA Server to joinz+DNS discovery failed to find the IPA Serverz2Provide your IPA server name (ex: ipa.example.com)z*will use interactively provided server: %szValidating DNS Discoveryz!DNS validated, enabling discoveryTz)DNS discovery failed, disabling discoveryz8Using servers from command line, disabling DNS discoveryzwill use provided server: %szwill use discovered server: %sz%s is not an IPA v2 Server.z(%s: %s)z0Anonymous access to the LDAP server is disabled.z'Proceeding without strict verification.zNNote: This is not an error if anonymous access has been explicitly restricted.z:The LDAP server requires TLS is but we do not have the CA.zCDNS domain '%s' is not configured for automatic KDC address lookup.z'KDC address will be set to fixed value.zDiscovery was successful!zoThe failure to use DNS to find your IPA server indicates that your resolv.conf file is not properly configured.zJAutodiscovery of servers for failover cannot work with this configuration.z�If you proceed with the installation, services will be configured to always access the discovered server for all operations and will not fail over to other servers in case of failure.z/Proceed with fixed values and no DNS discovery?zwill use discovered realm: %sz?The provided realm name [%s] does not match discovered one [%s]zwill use discovered basedn: %s�OzClient hostname: %szHostname source: %sz	Realm: %szRealm source: %szDNS Domain: %szDNS Domain source: %szIPA Server: %szIPA Server source: %sz
BaseDN: %szBaseDN source: %szNTP server: %szNTP pool: %szpIt seems that you are using an IP address instead of FQDN as an argument to --server. The installation may fail.z3Continue to configure the system with these values?)p�printr�r4ZVERSIONrE�getegidr'rr!�check_selinux_status�
selinux_worksrr�rKrLr��CLIENT_ALREADY_CONFIGUREDr��conf_ntpr8Zcheck_timedate_servicesZNTPConflictingServiceZconflicting_serviceZNTPConfigurationErrorr
rrr%�pkinit_identity�prompt_passwordr�hostname_sourcerr=rr
r�Zis_nosssd_supportedr9�no_acZis_mkhomedir_supported�	mkhomedirr7r%r0�FileNotFoundErrorr_r`r ZPAM_KRB5_SOr}�nosssd_files�
force_joinrr�gssapiZCredentialsr"�
exceptions�GSSErrorr�rNrrdrar�r?rr�r�r�r:�IPADiscovery�searchr�r��
realm_namer�r�ZBAD_HOST_CONFIGZNOT_FQDNZNO_LDAP_SERVERZNOT_IPA_SERVERr�r1Z
domain_source�findrr�Zcheck_domainr�r�r(Z
server_sourceZNO_ACCESS_TO_LDAPZNO_TLS_LDAPrrr�Zrealm_source�ntp_servers�ntp_poolZget_time_sourcer�r�r�Z
basedn_sourcer(r r�Z	inet_ptonr�r�)
rOZcli_domain_sourceZcli_server_sourcerZZnssldap_installed�ds�retr�r�Zcli_realm_sourceZcli_basedn_sourceZsrvZ	is_ipaddrrTrTrU�
install_check�s��
�
�������������
������
�
��
�
��

����
��



��
������
�
����	
�
��


��

��
�
����
���

�

�rFcCs4|durt�tj�}|jddd�t�|jd�dS)Ni�T)rZbackupi�)r"�NSSDatabaser r�	create_dbrEr�Zpwd_file)ZdbrTrTrU�create_ipa_nssdb�
srIcCs>t�tj�}t�tj�}|��s(t|�|jdkr>|jdd�dtj	fdtj
ffD]|\}}z|�|�}Wnty~YqRYn0z|�
|||�WqRtjy�}z td||j|f��WYd}~qRd}~00qR|��D]`\}}|�|�r�z|�|�Wq�tj�y4}z td||j|f��WYd}~q�d}~00q�q�dS)NZdbmF)Z
rename_oldzIPA CAzExternal CA certzFailed to add %s to %s: %szFailed to remove %s from %s: %s)r"rGr r�
NSS_DB_DIRr`rIZdbtypeZ
convert_dbZIPA_CA_TRUST_FLAGS�EXTERNAL_CA_TRUST_FLAGSZget_certr��add_certr%r.�secdirZ
list_certs�has_nicknameZdelete_cert)�ipa_db�sys_dbr�trust_flagsr�rZrTrTrU�update_ipa_nssdb�
s6
�

�

�rRcCs�t�|�|sF|sFt��}|jtdddd�}|rF|D]}t�d|�q4t�d�d}|s\|rnt�	||||�}n
t�
d�|s�td�t��S)	z�
    Will disable any other time synchronization service and configure chrony
    with given ntp(chrony) server and/or pool using Augeas.
    If there is no option --ntp-server set IPADiscovery will try to find ntp
    server in DNS records.
    z	_ntp._udpNF)Zbreak_on_firstz$Found DNS record for NTP server: 	%szSynchronizing timezSNo SRV records of NTP servers found and no NTP server or pool address was provided.z#Using default chrony configuration.)
r8Zforce_chronyr:r>Zipadns_search_srvr�rKr�r�Zconfigure_chronyrrr-Zsync_chrony)rBrCr�rlrDr�Z
configuredrTrTrU�	sync_time�
s&

�
�
rSc
Cs�|�d�rz|�dd�}d}z|�tj�}Wn tyJt�dtj�Yn0|sjtj	j
��tj	j
��n|rztj	j
�
�zt�|�Wn0ty�}zt�d|�WYd}~n
d}~00dS)NZchronyreFz'Configuration file %s was not restored.z2Failed to restore time synchronization service: %s)r�ro�restore_filer ZCHRONY_CONFr�rKr�rr�Zchronydr�r�r�r8Zrestore_forced_timeservicesr.rL)rlr�Zchrony_enabled�restoredrZrTrTrU�restore_time_sync�
s$
�
rVc
sj�fdd�}zt�tj|�WnFtyd}z.tjD]}||jvr4t�d|�q4WYd}~n
d}~00dS)Ncs��d||�dS)N�selinux)ri)rWr��rlrTrUri�
sz2configure_selinux_for_client.<locals>.backup_statez2SELinux does not support SSSD boolean %s, ignoring)r!�set_selinux_booleansr�SELINUX_BOOLEAN_SSSDr5ZfailedrKrr)rlrirZr�rTrXrU�configure_selinux_for_client�
s�

�r[cCsz�zt|t��Wn�ty�}z�|jtkr�|jr>t�d�np|jrPt�d�n^t�	d�d|_
zt|�Wn@ty�}z(t�
dt���t�	d|�WYd}~n
d}~00�WYd}~n
d}~00Wzt�t�Wnty�Yn0n&zt�t�Wnt�yYn00dS)Nz;Installation failed. Force set so not rolling back changes.zLInstallation failed. As this is IPA server, changes will not be rolled back.z*Installation failed. Rolling back changes.Tr�)�_installrvr'r�rr�rKrrr�rLr
�	uninstallrqr��	traceback�
format_excrErI�CCACHE_FILE)rOrZr�rTrTrU�install�
s8
��
"�rac-Cs6dti}t�tj�}t�tj�}|�ddd�|d}|d}|jsLtt	�|j
rp|jspt�||�t�
|j
�|jr�t|j|j||�n|jr�t�d�n
t�d�|js�|jdur�|jdur�|jdur�|jdur�|jdur�td	dd
�|_t�d|j�dt
t	f}|j�stt�}tt	ttt d|t!t
|j"|j#d
�
||d<t$j%�&|d�}	tj'dtddt(t)t	��dt
dtj*g	}
|j�r�|
�+d�d|d<|j,�r�|
�+d�|jdu�r�d}|j}|�-d�dk�r�d|t	f}|jdu�r�|j}n�|j�s0zt.�.d|�}Wnt/�yd}Yn0|�sft0d�1|�t2d��n6t3j4�5��r\t�6d�t�d �t0t2d��n
t3j4�7�}zt8|||	|d!�Wn>t9�y�}
z$t:�t0d"�1|
�t2d��WYd}
~
n
d}
~
00�n|j�rX|
�+d�t$j%�;|j��r@zt<||j|	||j=d#�WnBt>j?j@�y<}
z$t:�t0d"�1|
�t2d��WYd}
~
n
d}
~
00nt0d$�1|j�t2d���nh|j�r(|
�+d�tAtjBd%��Wd�n1�s�0Y|jdu�r�|}n|j}zhztC||j|	||jDd&�Wn>tE�y
}
z$t:�t0d'|
��t2d��WYd}
~
n
d}
~
00WtFtjB�ntFtjB�0n�|j�rP|jf}|
�+d(�|
�+|j�np|j�r�|j�rlt0d)t2d��zt.�.d*�}Wnt/�y�d}Yn0|�s�t0d+t2d��|
�+d(�|
�+|�|f}|	|d,<t$jGd,<z&|dt$jGd<tH||tdtIt	�WnxtJjK�y6}
z"t�6d-|
�t0t2d��WYd}
~
nDd}
~
0tL�yp}
z"t�6d.|
�t0t2d��WYd}
~
n
d}
~
00tM|
d||d/d0�}|jN}|jOdk�r�t�6d1|�|j#�s�|jOd2k�r�t�d3�t0t2d��t�d4�nt�d5t	�|jdu�rtMtjPgd|d6�z,t<|tj*tQ||j=d#�tQ|d,<t$jGd,<WnFt>j?j@�yr}
z(t:�t�6d7|
�t0t2d��WYd}
~
n
d}
~
00|j�s�tR|tIt	ttt
�t�d8�tS�T����}tUjVd9tjW|jd|jXd:�d;tUjYv�r�t0d<t2d��|�Ztj[�|j"�rt\|t	tt|t!t
��r
t0t2d��t�d=�|j�r�z"t<|tj*tQ|j=d>�tQt$jGd,<Wn@t>j?j@�y~}
z"t�6d7|
�t0t2d��WYd}
~
n
d}
~
00zt]|�Wnt^�y�Yn0t_�`tja�}z8|�b�tc|�D]"\}}|�d|d?|d@tSje��q�Wn tE�yt0dAt2d��Yn0tU�f�d}z.tUjgjh�i�d/}t�dB�tUjgjh�jdC�W�ntJjk�	y}
z�|�rhtUjgjh�l�t�dD|
�zJtUjgjhjid/dE�t�dB�tUjgjh�jdC�t�dF�t�mdG�t�mdH�WnDtJjn�	y}z(t�mdI|�t0dJ|t2d��WYd}~n
d}~00WYd}
~
n@d}
~
0tJjn�	yN}
zt0dK|
t2d��WYd}
~
n
d}
~
00Wd�n1�	sf0YztUjgjhjjdLdMdN�}|dO}Wn<tJjotJjpf�	y�tUjgjhjjdPd/dQdR�}|dOdS}Yn0|�	s�tq�ztUjgjhjjdTd/dQdU�}WnHtL�
y8}
z.tjdV|
d/dW�t0dX�1|
�t2d��WYd}
~
nd}
~
00tr|dOdYd�}z
ts�Wn8ttjE�
y�}
zt0dZ|
t2d��WYd}
~
n
d}
~
00ztutdtIt	|�}Wn:tJjv�
y�|�
r�trd[|�}nd}tw�x|t	|�}Yn0d\d]�|D�}t_jyd^d]�|D�tjzd_d`�t_jydad]�|D�tjBd_d`�t�db�tS�Ttj{�}|D]V\}}}z|�d|||�Wn6tE�y�}
zt0dc|t2d��WYd}
~
n
d}
~
00�qDt�||�|j�s�t}tdt
||�t~t
tj|td�zt$��tQ�WntL�y�Yn0t�j�j�}|����r�t�||�d} z&|j"�r0dd} |���nde} |���Wn6tL�ytt�mdf| |j��|j"�spt�mdg�Yn0z|j"�r�|���n|���WnDtL�y�|j"�s�t�mdh|j��t�di�nt�mdj|j��Yn0n|j"�s�t�dk|j��t�j�j�}!|!����
rt�|!|�dl\}"}#|j��sJtj�|j"|j�||j�|j�dm�|j��
r�t���dntU�}$|$���}%|$���}&|�dndo|%�|�dndp|&�z |&�
s�|$���|%�
s�|$���Wn6tL�
y�}
zt��dqt(|
��WYd}
~
n
d}
~
00t�dr|j"�
r�dsndt�|j"�rxt��rt�|�t���dutU�}'z|'���WntE�y6t�mdv�Yn0z|'���Wn2tE�yv}
zt�mdw|
�WYd}
~
n
d}
~
00|j"�s�t��|�t�dx�|j"�s�t�t�fD]L}(|(|tIt	ttt�|t�|(j��\}"}#})|"�r�t0t2d��|#�r�t�dy|#|)��q�t�|tIt��rt�dz�n
t�d{�|j�sJ|j}*|*du�rDd|t}*t�d}|*�nd|*v�rZd|*tf}*d}+d},|+d~k�r�|,�s�ztt�Mtj�d|*g�d/},Wn8tL�y�}
zt���d@�|+d@}+WYd}
~
n
d}
~
00�qb|,�sJt�6d�|*��d�d|*�|#�r�t�d�|#�n
t�6d��zt�t�Wn6tL�yH}
zt�6d�t(|
��WYd}
~
n
d}
~
00|j��r\t�||�|j��rnt�||�|j��r�t�||�|���|���|j��r�t�||t�|j��s�t�|t|d��|j�s|�Ztj��tt	ttt t�tj�t!t
|j"|j#d
�
t�d�t	�t�||t	t
||�|��dd�|�ddd/�t�d��dS)�N�PATHr��completeFr@rAzlSkipping attempt to configure and synchronize time with chrony server as it has been already done on master.zSkipping chrony configurationz#User authorized to enroll computersr*z)will use principal provided as option: %sr)
r�r�r�rr�rYrrrr�rBZccachez-srz-b�-hr�-drk�XMLRPC_TRACE_CURLr~�@r�z%s@%szPassword for %s: z!Password must be provided for {}.rz2Password must be provided in non-interactive mode.zRThis can be done via echo password | ipa-client-install ... or with the -w option.)�configz"Kerberos authentication failed: {})rh�attemptsz"Keytab file could not be found: {}r�)�ccache_namerhr
z'Kerberos PKINIT authentication failed: z-wz1Password must be provided in non-interactive modez
Password: zPassword must be provided.Z
KRB5CCNAMEr�zCannot obtain CA certificate
%sT)r�r��nologZ
capture_errorzJoining realm failed: %s�
z]Use --force-join option to override the host entry on the server and force client enrollment.z=Use ipa-getkeytab to obtain a host principal for this server.zEnrolled in IPA realm %s�r�r�zFailed to obtain host TGT: %szCreated /etc/ipa/default.confZ
cli_installer)�contextZconfdirr��delegateZnss_dirZ
config_loadedzFailed to initialize IPA API.zConfigured /etc/sssd/sssd.conf)rizCA certificate %dr6z+Failed to add CA to temporary NSS database.zTry RPC connectionZpingzQCannot connect to the server due to Kerberos error: %s. Trying with delegate=True)roz(Connection with delegate=True successfulz>Target IPA server has a lower version than the enrolled clientzKSome capabilities including the ipa command capability may not be availablez1Second connect with delegate=True also failed: %sz2Cannot connect to the IPA server RPC interface: %sz5Cannot connect to the server due to generic error: %sZ
ca_is_enabledz2.107r3r�r�z2.0)r�r4r�Zconfig_show)�rawr4zconfig_show failed %s)�exc_infoz2Failed to retrieve CA certificate subject base: {}Zipacertificatesubjectbasez%Failed to create IPA NSS database: %s)rzCertificate Authorityc	Ss*g|]"\}}}}}||t�|d|�f�qS)T)rZkey_policy_to_trust_flags�rJr��n�t�urKrTrTrUr��s�z_install.<locals>.<listcomp>cSs"g|]\}}}}}|dur|�qS�FrTrrrTrTrUr��rMr�rcSs"g|]\}}}}}|dur|�qSrvrTrrrTrTrUr��rMz/Adding CA certificates to the IPA NSS database.z)Failed to add %s to the IPA NSS database.r�r�zFailed to %s the %s daemonz-Caching of users/groups will not be availablernz:Caching of users/groups will not be available after rebootz1Failed to disable %s daemon. Disable it manually.r�)rN)r9r7rlr$�subid�oddjobdrfrezUnable to start oddjobd: %sz
%s enabledZSSSDr�r9�&SSSD service restart was unsuccessful.z9Failed to enable automatic startup of the SSSD daemon: %szKerberos 5 enabledz,%s configured using configuration file(s) %sz"Configured /etc/openldap/ldap.confz+Failed to configure /etc/openldap/ldap.confzadmin@%szaPrincipal is not set when enrolling with OTP or PKINIT; using principal '%s' for 'getent passwd'.�
�passwdz1Unable to find '%s' user with 'getent passwd %s'!zRecognized configuration: %szBUnable to reliably detect configuration. Check NSS setup manually.z9Adding hardcoded server name to /etc/ldap.conf failed: %s)rOr�rlz*Configured /etc/krb5.conf for IPA realm %szClient configuration complete.)��SECURE_PATHr
r�r r��	StateFilerir�r#r�rr!Zbackup_hostnameZset_hostnamer2rSrBrCrKr�r�r
rrr4r%r3r1r[rr�r�rrr9r�rEr_r��
SBIN_IPA_JOINr[r/r"r{r:rA�getpass�EOFErrorr'r�r�sys�stdin�isattyrL�readlinerr�r�r`r�kinit_attemptsr;r<r=r�rrr
r.rNrGr�r�rr�rqr0Zerror_outputr�ZKDESTROYr`r�r"rGrZ	bootstrapZETC_IPArMr�r�r,rHrr�r	r�rarH�	enumeraterLrK�finalizer�r�r�r�Z
KerberosErrorZ
disconnectrrZPublicErrorZCommandErrorr�r�r(rIr%r�r�rZmake_compat_ca_certsrrrZ(insert_ca_certs_into_systemwide_ca_storer�r�ZSSH_CONFIG_DIRrIrr��nscdr�rmr�r�rjr�rpr�r6Zmodify_nsswitch_pam_stackr7r7rwrrhrgrsZcriticalr0r[Zmodify_pam_to_use_krb5rtrxr�r9�__name__r�ZGETENT�time�sleeprPr�r/rir1r{r�r��_loadr�no_nisdomainr�Z	KRB5_CONFr#r�)-rOrPr�r�rlr@rAZhost_principalrkrj�	join_argsr�rrZZpkinit_principalrr��stderrZtmp_dbr�ir�Z	connectedrr!r Z
ca_subjectZca_certs_trustrOrrQr�Znscd_service_actionr�Zretcoder�rxrfrer9Z
configurer�	filenames�userrs�foundrTrTrUr\s<
�������

�
����
�
� 
�
���

 �
�
�
�

� ��
�
� 
�
��
�


� 
��
�

����0�<���
�
���
���
� 



��

����

�&�


�

�

�

"���


��
�r\cCsXt�s"|jrt}nt}td|d��t�rL|jsLt�d�t�d�ttd��t	�
�adS)Nz,IPA client is not configured on this system.rz@IPA client is configured as a part of IPA server on this system.z/Refer to ipa-server-install for uninstallation.)rr��SUCCESS�CLIENT_NOT_CONFIGUREDr'rrKrLr�r!r/r0)rOr�rTrTrU�uninstall_check�
s��

r�c0
s�dti}t�tj�}t�tj����ddd�zdzttjddg�Wn>t	y�}z&|j
tkrnt�
dt|��WYd}~n
d}~00W��dd�n��dd�0|�����d}d}d}z�t��}|��|��}|��}	t|	�d	kr�d}|D]�}
|�|
�}z|�d
�}Wntj�y*Yq�Yn0|dkr�z|�d�}Wntj�y\Yq�Yn0z|�d
�}Wq�tj�y�Yq�0q�Wnt�y�g}	Yn0|du�r�t}t�tj�}
t�tj�}tj j!}|
�"d��r(zt!j#tjdd�Wn6t$�y&}zt�
d|j%|�WYd}~n
d}~00d|}|�"|��r�zt!j#tj|d�Wn6t$�y�}zt�
d|j%|�WYd}~n
d}~00tj&D]}t't(j)�*|
j+|���q�t!�,�z|�-�Wn4t�y�}zt.|j%d|�WYd}~n
d}~00z|�/�Wn:t�y:}z t�
d|j%t|��WYd}~n
d}~00|j0�s�t(j)�1tj2��r�t�3d�tj4dd|dtj5g}|j6�r�|�7d�d|d<t|d|d�}|j
dk�r�t�
d|j8�t(j)�1tj2��r�t(j)�1tj5��r�t�3d�z8t9�}|�:tj2�|�;dd �}ttj<dtj5d!|g�Wnvt	�yX}z(|j
d"k�rDt�
d#t|��WYd}~n>d}~0t�y�}zt�
d#t|��WYd}~n
d}~00t�=d$t>�}��?d$d%��s�z|�-�Wnt�y�Yn0��?d$d&��s�z|�/�Wnt�y�Yn0��?d'd&��r�tj d(}��?d(d%��s(|�-���?d(d&��s>|�/�t'tj@�|jA�B�D],\}}tjC|v�rR|�Dt(j)�*tjC|���qRt�3d)�d}d}|�E��r�|�FtjG�}|�FtjH�}ztI�J|�||�Wn8t�y}ztKd*�L|�tMd+��WYd}~n
d}~00t'tjN�t'tjO�t'tjP�t'tjQ�t(�RtjS�D]*\}}}|D]}t't(j)�*||���qD�q6|	D]>}d,|�Td-d.���}
t(j)�*tjU|
�}t(j)�1|��rft'|��qf|�r�zttjVd/d0d1d2g�Wnt�y�t�3d3�Yn0|�r�d4|d5} t(j)�*tjW| �}!t'|!�d6|�X�}"t(j)�*tjW|"�}#t'|#�t'tjY�t'tjZ�zt�=d7t>��-�Wn2t�y�}zt�[d8|�WYd}~n
d}~00t'tj\�d9|d5}$t(j)�*tjW|$�}%t'|%�|�rf|�rft�3d:�t]�d}&z|�DtjGtj^�}&Wnt_�yt�6d;�Yn0|&�r t�3d<�t�3d=�t�=d>t>�}'z|'�`�Wnt	�y`t�[d?�Yn0�n,|�s�|�r�t]�t�3d@�t�=d>t>�}'z|'�`�Wnt	�y�t�[d?�Yn0n�|�	s�|�	s�t(j)�1tjG��	r�zt(�atjGtjb�Wn"t_�	yt�6dAtjb�Yn0t�3dB�t�=d>t>�}'z|'�-�Wnt	�	yPt�[dC�Yn0z|'�/�Wn2t	�	y�}zt�[dD|�WYd}~n
d}~00��cdE��	r��fdFdG�tdjeD�}(ztI�f|(�Wn6tg�	y�}zt�[dHt|��WYd}~n
d}~00tI�h|��|�E��
r t�3dI�|�i�tj��tj jk})tj jl}*|)|*fD]*}+|+�m��
rZt?|+��nt�3dJ|+j%��
q@tn�|�|�
r�tj jo�p��
r�t'tjq�t'tjr�tj jo�`���cdK��r8t�3dL���?dKdM�},|,du�r8t(j)�s|,��r8zt(�t|,�WnDt�y6}z*t�[dN|,t|��t�[dO|,�WYd}~n
d}~00tu}-|�E��rTt�
dPtjv���ddQ�d}.�jwD]}/t�
dR|/�d}.tx}-�qj|.�r�t�[dSt(j)�*tjtjy��t'tj2�t'tj2dT�t'tjzdT�t'tj{dT�tI�|�t'tj}�t'tj~�t'tj�t�3dU�|j��s�t�3dV�t�3dW�|j0�s�t�dXd��r�zttj�g�Wn8t�y�}ztKdY�L|�txd+��WYd}~n
d}~00|-�r�tK|-d+��dS)ZNrbr�r7Tz--uninstallr�z(Unconfigured automount client failed: %sFr6r�r�r'r&r)rz*%s failed to stop tracking certificate: %szIPA Machine Certificate - %sr�z9Failed to disable automatic startup of the %s service: %sz"Unenrolling client from IPA serverz
--unenrollrdrrerkrfrmrzUnenrolling host failed: %sz:Removing Kerberos service principals from /etc/krb5.keytabr�r�rrz0Failed to remove Kerberos service principals: %srxrfrer?r�z1Disabling client Kerberos and LDAP configurationsz,Failed to remove krb5/LDAP configuration: {}rZ
domain_realm_r+�_zcache-removerz--stopz--startzsAn error occurred while removing SSSD's cache.Please remove the cache manually by executing sssctl cache-remove -o.Zcache_z.ldbZccache_zsssd-kcmzFailed to stop sssd-kcm: %sZtimestamps_zQThe original configuration of SSSD included other domains than the IPA-based one.z2Error while restoring pre-IPA /etc/sssd/sssd.conf.zQOriginal pre-IPA SSSD configuration file was restored to /etc/sssd/sssd.conf.bkp.z<IPA domain removed from current one, restarting SSSD servicer9ryzUOther domains than IPA domain found, IPA domain was removed from /etc/sssd/sssd.conf.z,Error while moving /etc/sssd/sssd.conf to %sz^Redundant SSSD configuration file /etc/sssd/sssd.conf was moved to /etc/sssd/sssd.conf.deletedz!SSSD service could not be stoppedz:Failed to disable automatic startup of the SSSD daemon: %srWcsi|]}|��d|��qS)rW)ro)rJr\rXrTrU�
<dictcomp>�s�zuninstall.<locals>.<dictcomp>z$Unable to reset SELinux variable: %sz$Restoring client configuration filesr�rzRemoving Firefox configuration.rz'%s' could not be removed: %s.z!Please remove file '%s' manually.z)Some files have not been restored, see %srczbSome installation state for %s has not been restored, see /var/lib/ipa/sysrestore/sysrestore.statez�Some installation state has not been restored.
This may cause re-installation to fail.
It should be safe to remove %s but it may
 mean your system hasn't been restored to its pre-installation state.rCzClient uninstall complete.z;The original nsswitch.conf configuration has been restored.z7You may need to restart services or reboot the machine.z"Do you want to reboot the machine?z$Reboot command failed to execute: {})�r|r
r�r r�r}rir0r�r.r�r�rKrLr[r�r�r�r�r�Zlist_domains�lenr�r�r�rqrr"rGrrJrr�rrNZ
stop_trackingr�rjZ	NSS_FILESrNrEr_r�rMZremove_principal_from_casr�r^r�r�r`r�r�r~r"r�r{Z	error_logrr�r�r!rrror�r�r^r�rTZ	has_filesZhas_filer,r2r!Z$restore_pre_ipa_client_configurationr'r�rZ
SSSD_MC_GROUPZSSSD_MC_PASSWDZSSSD_MC_INITGROUPSZSSSD_MC_SID�walkZ
SSSD_PIPES�replaceZSSSD_PUBCONF_KRB5_INCLUDE_D_DIRZSSSCTLZSSSD_DB�upperZSSSD_LDBZSSSD_CONFIG_LDBrrZSSSD_SECRETSr�Z
SSSD_CONF_BKPrJr�rZSSSD_CONF_DELETEDr�rrZrYr5Zrestore_hostnameZrestore_all_filesr�r�r�r�rVrxrhr�rurzrIr�ZSYSRESTORE_INDEX�modules�CLIENT_UNINSTALL_ERRORZSYSRESTORE_STATEFILEr�Z
NSSWITCH_CONFZ(remove_ca_certs_from_systemwide_ca_storerarrr
r1ZSBIN_REBOOT)0rOr�r�rZrr&Zwas_sssd_configuredr�r�Zall_domainsr\r�r�rOrPr"Zclient_nss_nicknamerYr�r�r�r�r�rxr�ZfileinfoZwas_sssd_installedZwas_sshd_configuredrOZ_dirsr�r�Zsssd_domain_ldbZ
sssd_ldb_fileZsssd_domain_ccacheZsssd_ccache_fileZsssd_timestampsZsssd_timestamps_filerUr9Zboolean_statesr�r�rr�rvr��modulerTrXrUr]�
s�
�




�
��
�
$
�
�
����

�

��



�


"
���
�����
��
�&


�



�
��
�
�
��




���r]cCst��}|jD].}t|tj�r|jtjur|jtj	k|_
qDqd|_
|j|_|j
rbt|j
�|_nd|_|j|_|j|_|j|_|jr�|j|_n|j|_|j|_|j|_|j|_|j |_!|j"|_#|j$|_%|j&|_'|j(r�|j(d|_)nd|_)|j*|_+|j,|_-|j.|_/|j0|_1dS)NTr�)2�logging�	getLogger�handlersr-Z
StreamHandler�streamr�r��level�DEBUGr�rr
�domain_namerr�r(r�r@r�Z
fixed_primaryr9rZadmin_passwordr�
host_passwordZ	host_namer�no_ntpr2�
ssh_trust_dnsrq�no_sshr/�no_sshdr1�no_sudor7�no_dns_sshfpr��
ca_cert_filesrZautomount_locationr��enable_dns_updatesr>Zno_krb5_offline_passwordsrDZno_sssdr9)Z	installerZroot_loggerZhandlerrTrTrU�initLs@

�







r�cseZdZdZdZeejjdd�Ze	e�Ze
eddd�Ze	e�Ze
edddd	gd
�Z
e	e
�Z
e
ddd�Ze	e�Ze
ddd�Ze	e�Ze
ejedd
ddd�Ze	e�Ze
eddd�Ze	e�Ze
ddddgd
�Ze	e�Ze
ddddd�Ze	e�Ze
eddd�Ze	e�Ze
ddd�Ze	e�Ze
ddd�Ze	e�Ze
ddd�Ze	e�Ze
ddd�Ze	e�Ze
ddd�Ze	e�Ze
ddd�Ze	e�Ze
ddd�Ze	e�Ze
edd d�Ze	e�Zej d!d"��Ze
dd#d�Z!e	e!�Z!e
dd$d�Z"e	e"�Z"e
ddd%d�Z#e$e#�Z#�fd&d'�Z%�Z&S)(�ClientInstallInterfacez�
    Interface of the client installer

    Knobs defined here will be available in:
    * ipa-client-install
    * ipa-server-install
    * ipa-replica-prepare
    * ipa-replica-install
    ZClientz&principal to use to join the IPA realm��descriptionNT)Z	sensitivez1path to backed up keytab from previous enrollmentr�r��	cli_namesz6create home directories for users on their first loginz0Force client enrollment even if already enrolledz9ntp server to use. This option can be used multiple timesz--ntp-serverZ
NTP_SERVER)r�r��cli_metavarzntp server pool to usezdo not configure ntpz-NFzeStop and disable any time&date synchronization services besides ntpd. This option has been deprecated)Z
deprecatedr�zNIS domain namez do not configure NIS domain namez3configure OpenSSH client to trust DNS SSHFP recordszdo not configure OpenSSH clientzdo not configure OpenSSH serverz-do not configure SSSD as data source for sudoz'configure SSSD as data source for subidz-do not automatically create DNS SSHFP recordsrz6number of attempts to obtain host TGT (defaults to 5).cCs|dkrtd��dS)Nr6z"expects an integer greater than 0.)r���selfr�rTrTrUr��sz%ClientInstallInterface.kinit_attemptszConfigure DNS over TLSz*Disable DNSSEC validation for DNS over TLSz#request certificate for the machinecs�tt|�jfi|��|jr*|js*td��|jr:t�d�|j	rN|j
rNtd��|jrb|j
rbtd��|jrrt�d�|j
r�|jr�td��|jr�|jr�td��|jr�td��dS)	Nz2--server cannot be used without providing --domainzPOption --force-ntpd has been deprecated and will be removed in a future release.z2--ntp-server cannot be used together with --no-ntpz0--ntp-pool cannot be used together with --no-ntpzROption --request-cert has been deprecated and will be removed in a future release.z7--no-nisdomain cannot be used together with --nisdomainz>--ip-address cannot be used together with --enable-dns-updatesz;--ip-address cannot be used together with--all-ip-addresses)�superr��__init__r(r�r��
force_ntpdrKrrrBr�rCrr�r�r�r�rB�r��kwargs��	__class__rTrUr�
sD��������zClientInstallInterface.__init__)'r��
__module__�__qualname__�__doc__r�r,r�ServiceAdminInstallInterfacerrr+r[r�r%r7r:r)�ListrBrCr�r�r�r�r�r�r�r�rwr��intr��	validatorr?r�rrr��
__classcell__rTrTr�rUr�ss�	�����
�������������
���r�c@sTeZdZdZeedddd�Zejdd��Zeej	eddd	d
d�Z
e
jdd
��Z
dS)�PKINITInstallInterfaceZPKINITNzQPKINIT identity information (for example FILE:/path/to/cert.pem,/path/to/key.pem)ZIDENTITY)r��defaultr�r�cCs|�d�std��dS)N)zFILE:zPKCS11:zPKCS12:zDIR:�ENV:z?identity must start with FILE:, PKCS11:, PKCS12:, DIR:, or ENV:)r]r�r�rTrTrUr3Fs��z&PKINITInstallInterface.pkinit_identityz�PKINIT trust anchors, prefixed with FILE: for CA PEM bundle file or DIR: for an OpenSSL hash dir. The option can be used used multiple times.z--pkinit-anchorZFILEDIR)r�r�r�r�r�cCsz|D]p}|�d�\}}}|r$|dvr,td��|dkrPtj�|�sPtd|�d���|dkrtj�|�std|�d���qdS)N�:>�DIRr��FILEzBInvalid pkinit_anchor '{part}' is not prefixed with FILE: or DIR:.r�zpkinit anchor path 'z"' does not exist or is not a file.r�)�	partitionr�rEr_rzr�)r�r��partr?�sepr_rTrTrUr
^s�
�
�z%PKINITInstallInterface.pkinit_anchors)r�r�r�r�r+r[r3r�r)r�r
rTrTrTrUr�8s$�

�r�cs�eZdZdZdZeej�Zejdd��Ze	dd��Z
dZedddd	gd
�Z
dZeddd�Zeedd
d�Z�fdd�Ze�dd��Zejdd��Z�ZS)�
ClientInstallz
    Client installer
    NcCs�t|t�std�|���|d}tj�|�s8td|��tj�|�sPtd|��tj�|�shtd|��zt	�
|�Wnty�td|��Yn0dS)NzExpected list, got {!r}r�z'%s' does not existz'%s' is not a filez!'%s' is not an absolute file pathz$'%s' is not a valid certificate file)r-r@r�r�rEr_r`rz�isabsr	Zload_certificate_from_filerqr�rTrTrUr��s
zClientInstall.ca_cert_filescCs|jSrT)r�r�rTrTrUr4�szClientInstall.prompt_passwordFz#force setting of LDAP/Kerberos confr~r�z/configure Firefox to use IPA domain credentialsr�zNspecify directory where Firefox is installed (for example: '/usr/lib/firefox')cs.tt|�jfi|��|jr*|js*td��dS)Nz?--firefox-dir cannot be used without --configure-firefox option)r�r�r�rrr�r�r�rTrUr��s
�zClientInstall.__init__ccs"t|�t|�dVt|�dSrT)r�rFrar�rTrTrU�main�szClientInstall.mainccs"t|�t|�dVt|�dSrT)r�r�r]r�rTrTrUr��s)r�r�r�r�Zdm_passwordr,r�r�r��propertyr4r6r+r�r�rr[rr�r-r�Zuninstallerr�rTrTr�rUr�ss:�

���
r�)F)TTrT)FT)F)N)r)T)F)N)�r�Z
__future__rrr�rrr;r�rEr�r�r�r�r�rDr�r�r^r�Zconfigparserr�urllib.parserrZipalibrrr	r
Zipalib.constantsrrr
Zipalib.installrrrrZ	hostname_Zipalib.factsrrZipalib.kinitrrrZipalib.install.servicerrZ
ipalib.rpcrZipalib.utilrrrrZipaplatformrZipaplatform.constantsrZipaplatform.pathsr Zipaplatform.tasksr!Z	ipapythonr"r#r$r%r&Zipapython.admintoolr'Zipapython.dnr(Zipapython.installr)Zipapython.install.corer*r+r,Zipapython.install.commonr-Zipapython.ipautilr.r/r0r1Z
ipapython.sshr2r4Zipapython.errorsr5rr7r8r9Z	ipaclientr:Zipapython.ipachangeconfr;r�ZNoneTyper�r�rKr�rr�r1r�r|r5r9r�r�r�r r�rrr�r0rWrNr^rdrmror}r�r�r�r�r�r�r�rtrxr�r�rrr#rHr<r.rarirhrgr{rzryr�r�r�r�r�r�r�r�r�r�ZIPA_DNS_UPDATE_TXTr�ZIPA_DNS_CCACHEr`r�r�rCr�r�r�r�r�r�r�r�r�rr�rrrrr#rFrIrRrSrVr[rar\r�r]r�ZHostNameInstallInterfacer�ZSSSDInstallInterfacer�ZServiceInstallInterfacer�ZAutomountInstallInterfacer�rTrTrTrU�<module>sV
�	%�
"
�
(
@Cf
�
{=+
62"

>7@!SD
"
�
.C9
 )
t/'�E:�