HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/ipaclient/install/__pycache__/client.cpython-36.pyc
3

�d[ew%�@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\m]Z]m^Z^ddl_m`Z`dd lambZbecd�Zdejeef�ZgdZhdZid!Zjd"Zkd#Zld$Zmda&dandaod%apdaqdardasdatdaudavdawd&d'�Zxd(d)�Zyd*d+�Zzd,d-�Z{d.d/�Z|d0d1�Z}d2d3�Z~e>jeifd4d5�Z�d6d7�Z�d�d8d9�Z�d:d:ffd;d<�Z�d=d>�Z�d?d@�Z�dAdB�Z�dCdD�Z�dEdF�Z�dGdH�Z�dIdJ�Z�d�dKdL�Z�dMdN�Z�dOdP�Z�dQdR�Z�d�dSdT�Z�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�d�dkdl�Z�dmdn�Z�doZ�dpZ�dqZ�drZ�e>j�Z�e>j�Z�dsdt�Z�dudv�Z�dwdx�Z�dydz�Z�d{d|�Z�d}d~�Z�dd��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�exd�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�)�	automount�timeconf�sssd)�	discovery)�
IPAChangeConf���zB/bin:/sbin:/usr/kerberos/bin:/usr/kerberos/sbin:/usr/bin:/usr/sbinFcs�fdd�}|S)Ncs�tj�\}}tj|�tjdd�}||d<||d<�||�tjjdd�ytj|�Wn tk
rxt	j
d|�YnXytj|�Wntk
r�YnXt|d�dS)NZkrbcc)�prefix�krb_name�
ccache_dir�KRB5_CONFIGzCould not remove %sz.ipabkp)
�tempfileZmkstemp�os�closeZmkdtemp�environ�pop�remove�OSError�logger�error�rmdir�remove_file)�options�tdict�fdr>r?)�func��/usr/lib/python3.6/client.py�inneris 

zcleanup.<locals>.innerrP)rOrRrP)rOrQ�cleanuphsrScCs^ytj|�WnJtk
rX}z.|jdkr.dStjd||�tjd|�WYdd}~XnXdS)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.)rBrFrG�errnorHrI)�filename�erPrPrQrK�s
rKcCstjd||t|��dS)Nz%s failed to %s: %s)rHrI�str)�name�actionrIrPrPrQ�log_service_error�srZcCs$|dk	r|Stjjtj�r tjSdS)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.
    N)rB�path�existsr �
IPA_CA_CRT)Z	cert_pathrPrPrQ�
get_cert_path�s
r^cCs<|j�}|j�}|s|r8|j|jd|�|j|jd|�dS)N�enabled�running)�
is_enabled�
is_running�backup_state�service_name)r�
statestorer_r`rPrPrQ�
save_state�s
rfcCs�|j|jd�}|j|jd�}|rPy|j�Wn"tk
rNtjd|j�YnX|r�y|j�Wn"tk
r�tjd|j�YnXdS)Nr_r`z6Failed to configure automatic startup of the %s daemonzFailed to restart the %s daemon)�
restore_staterd�enable�	ExceptionrH�warning�start)rrer_r`rPrPrQrg�s rgc
Cs�dtjtjtjgtjgd�dtjgd�g}i}d}x||D]t}g||d<xbd
D]Z}y@x:||D].}tjj|�r^||dj	|�|dkr^d	}q^WWqNt
k
r�YqNXqNWq8W||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)rmrnFrmrnroT)rnro)r �	LDAP_CONFZ
NSS_LDAP_CONFZLIBNSS_LDAP_CONFZ
PAM_LDAP_CONFZ
NSLCD_CONFrBr[�isfile�append�KeyError)Zfiles_to_checkZfiles_foundZretvalrmZ	file_typerUrPrPrQ�nssldap_exists�s*


ruc
Cs�tjj|�sdStjd�}t�}t|��6}x.|D]&}|j|�}|dk	r0|j|j	d��q0WWdQRX|r�t
dj|djt
|���|d��ndSdS)NFz^\s*(PORT|HOST).*r4z4'{}' contains deprecated and unsupported entries: {}z, )�rvalT)rBr[rr�re�compile�set�open�match�addr*r'�format�join�sorted)�confZ
error_rvalZpatZunsupported�f�line�morPrPrQ�check_ldap_conf�s




r�cCs�y�tj�}|j�|j�}d}xL|D]D}|j|�}y|jd�}|dkrL|}PWq$tjk
rfw$Yq$Xq$W|dk	r�|j|�|j�n
tj	d�Wnt
k
r�tj	d�YnXdS)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�writerHrj�IOError)�
sssdconfig�domainsZipa_domain_namerX�domain�providerrPrPrQ�delete_ipa_domains,





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_masterrPrPrQ�is_ipa_client_installed-s
r�TcCs$tjdtdd�tj||||||�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)�fstoreZdatabaserZpreserversZ
default_valuerPrPrQr�<s
r�c
Cs�td�}|jd�|jd�dddd�|j�g}|jd|�|jd	|�|jd
|�|jd|d�|jd
|�|jddjtj|d���|jdd�g}|j|j	d|�|j�g�t
j}	|j|	�|j
|	|�tj|	d�dS)Nz
IPA Installerz = �[�]�commentz#File modified by ipa-client-install)rX�type�value�basedn�realmr��serverr�hostZ
xmlrpc_urizhttps://{}/ipa/xml�	enable_ra�True�globali�)r�r�)r9�setOptionAssignment�setSectionNameDelimiters�	emptyLine�	setOptionr}r%�
format_netloc�extend�
setSectionr �IPA_DEFAULT_CONF�backup_file�newConfrB�chmod)
r��
cli_basedn�	cli_realm�
cli_domain�
cli_serverrZipaconf�optsZdefopts�target_fnamerPrPrQ�configure_ipa_confZs.








r�cCsBt�}|jtj�|jddd�ttjd�}|j|�|j�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�ryrzr�rC)�parser�fprPrPrQ�
disable_ra�s
r�cCs�td�}|jd�dddd�|j�|jdd�|jd|�|j�|jd	d
jtd)d*|�dd��|jdd
jtd+d,|�dd��|jdd�|jdd�|jdd�|j�|jdd�|jdd�|jdd�|jdd�|j�g}	|s�|js�|j�r|j�r�|	j|jd d!��n"|	j|jd d"jt	j
|d#����n|	j|jd$|��|	j|j��xd|D]\}
y|j|
�|j|
|	�Wn:t
k
�r�}ztjd%|
t|��d&d'|
fSd}~XnX�qDW|�r�d#d'd(j|�fSd-S).Nz
IPA Installer� r�z#File modified by ipa-client-install)rXr�r��ldap_version�3�baseZnss_base_passwdz{dn}{suffix}�cn�users�accountsz?sub)Zdn�suffixZnss_base_group�groupsZ
nss_schemaZ
rfc2307bisZnss_map_attributezuniqueMember memberZnss_initgroups_ignoreuserszroot,dirsrvZnss_reconnect_maxsleeptime�8Znss_reconnect_sleeptime�1Zbind_timelimit�5�	timelimit�15�urizldap://localhostz	ldap://{}rZnss_srv_domainzCreation of %s failed: %sr4�LDAPz, )r�r�)r�r�)r�r�)r�r�)rNN)r9r�r�r�r}r(�forcer�rsr%r�r�r�rirHrIrWr~)r�r�r�r�r��dnsokrL�files�ldapconfr�rUrVrPrPrQrl�sV














rlc
 Cstd�}|jd�dddd�|j�|jdd�|jd|�|j�|jd	ttdd|���|jd
ttdd |���|jdd�|j�g	}	|s�|js�|jr�|jr�|	j|jdd��q�|	j|jddj	t
j|d����n|	j|jdd��|	j|j��x^|D]V}
y|j|
�|j
|
|	�Wn4tk
�rD}ztjd|
t|��d!Sd}~XnX�q�Wtjj}|j��r�y|j�Wn2tk
�r�}zt|jd|�WYdd}~XnXy|j�Wn8tk
�r�}ztjd|jt|��WYdd}~XnXntjd|j�d"Sdddj|�fS)#Nz
IPA Installerr�r�z#File modified by ipa-client-install)rXr�r�r�r�r�zbase passwdr�r�r�z
base groupr�r�r�r�zldap://localhostz	ldap://{}rZDNSzCreation of %s failed: %sr4�restartz7Failed to enable automatic startup of the %s daemon: %sz.%s daemon is not installed, skip configurationZNSLCDz, )r�r�)r�r�)r�r�)r�r�)r4NN)rNN)r9r�r�r�rWr(r�r�rsr}r%r�r�r�rirHrIr�
knownservices�nslcd�is_installedr�rZrdrh�debugr~)
r�r�r�r�r�r�rLr�Z	nslcdconfr�rUrVr�rPrPrQrp�s\







 "rpcCs�td�}|jd �dddd�|j�dddd�dddd�ddd	d�ddd
d�dddd�dddd�ddd
d�dddd�|j�|j�ddddj|d�d�dddt|�d�ddddd�g}tj}|j|�d}y|j||�Wn�t	k
�r }z*t
jd|�t
jd|j|t|�d��dSd}~Xn�t
k
�rf}z*t
jd|�t
jd|j|t|�d��dSd}~Xn<tk
�r�}zt
jd|j|t|�d��dSd}~XnXtj|d�dS)!Nz
IPA Installerr��	r�z$ File modified by ipa-client-install)rXr�r�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)rYrXr�r�ZBASEZ	SASL_MECHZGSSAPIz%Configuring {path} failed with: {err}zCould not parse %sz%s)r[�errFz%s does not exist.i�T)r�r�)r9r�r�r}rWr �OPENLDAP_LDAP_CONFr��
changeConf�SyntaxErrorrH�infor�r�rirBr�)r�r�r�r�r�r�Z	error_msgrVrPrPrQ�configure_openldap_confs|



r�cCsjtjjtj�sdStd�}|jd�|jddjt	j
|d���|j�g}|jtj|�t
jd|d�dS)ze
    DNS Discovery didn't return a valid IPA server, hardcode a value into
    the file instead.
    Nz
IPA Installerr�r�z	ldap://{}rzHChanged configuration of /etc/ldap.conf to use hardcoded server name: %s)rBr[rrr rqr9r�r�r}r%r�r�r�rHr�)r�r�r�rPrPrQ�hardcode_ldap_serverxs


r�cCsJtjjtjtjjtj�d�}tj|tj�tj	tjd�t
jtj�dS)Nz	.templatei�)rBr[r~r ZUSR_SHARE_IPA_CLIENT_DIR�basenameZKRB5_FREEIPA�shutil�copyr�r!Zrestore_context)�templaterPrPrQ�configure_krb5_snippet�sr�c

Cs�t�td�}
|
jd3�|
jd4�|
jd5�|
jd6�dddd
�|
j�g}tjj	t
j�rp|jddt
jdd�g�|
j
d|�g}|s�|s�|r�|j|
j
dd�g�n|j|
j
dd�g�|j|
j
dd�|
j
dd�|
j
dd�|
j
dd�|
j
dd�|
j
dd�g�tj��r$tjd�|j|
j
dd��|j|
jd |�|
j�g�g}
|�sX|�sX|�r�x`|D]X}|
j|
j
d!tj|d"��|
j
d#tj|d"��|
j
d$tj|d%��|
j
d&tj|d'��g��q^W|
j|
j
d(|��|
j|
j
d)d*t
j��|
j|
j
d+d*t
j��|d,|
d
�g}|j|
jd-|��|j|
j��|
j
d.j|�|�|
j
||�|
j
||�g}||k�r�|j|
j
d.j|�|�|
j
||�g�|j|
jd/|�|
j�g�tjd0|�tjd1|
j|��|
j||�tj|d2�dS)7Nz
IPA Installer� = r�r�r��{�}��  �    r�z#File modified by ipa-client-install)rXr�r�Z
includedirr�)rXr�r�ZdelimZ
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:z%si�)r�r�)r�r�)r�r�)r�r�r�)r�r9r�r�ZsetSubSectionDelimitersZ	setIndentr�rBr[r\r ZCOMMON_KRB5_CONF_DIRr�r�r#Zis_persistent_keyring_supportedrHr�rsr�r%r��KDC_CA_BUNDLE_PEM�
CA_BUNDLE_PEMr}�dumpr�r�)r�r�r��cli_kdcr�rU�
client_domain�client_hostnamer��configure_sssdZkrbconfr�ZliboptsZkroptsr�ZroptsZdroptsrPrPrQ�configure_krb5_conf�s�


















r�c,Cshtjj}|jsVy|j�Wn6tk
rP}ztjd|jt	|��WYdd}~XnXdS|shtj
d�dSd||f}|jr�tj|�y|j
�|j�Wn@tk
r�}z$tjd|jt	|��tj
d�WYdd}~XnXt	td|f|��}	tjjtjd�}
y"tjtjdd	|	|g||
d
d�WnDtk
�rb}z&tjd�td
j|j|�td��WYdd}~XnXdS)Nz1Failed to conditionally restart the %s daemon: %szGAn RA is not configured on the server. Not requesting host certificate.z
host/%s@%sz:Failed to configure automatic startup of the %s daemon: %sz6Automatic certificate management will not be available�CNzpwdfile.txtZNSSDBzLocal IPA host�x)ZcertpathZstorage�nickname�subject�dns�	principal�passwd_fnameZresubmit_timeoutzcertmonger request failedz*{} request for host certificate failed: {})rv)rr�r�request_certZtry_restartrirHrIrdrWrjrZadd_principal_to_casrhrkr(rBr[r~r �
IPA_NSSDB_DIRZrequest_and_wait_for_cert�	exceptionr'r}�CLIENT_INSTALL_ERROR)r��subject_baser�rrL�
ca_enabled�cmongerrVr�r�rrPrPrQ�configure_certmongersT 


rc1Cs�ytj�}|j�Wn�tk
r�}z|tjjtj�rb|jrbt	j
dt|��t	j
d�t	jd�dSt
|t�rnnt	j
d�t	jd�t	jd�tj�}|j�WYdd}~XnXy|j|�}	WnHtjk
�rt	jd|�t	jd�tj�}|j�|j|�}	YnX|j�rt|�|j�r.tjjtj��sF|j�r�tjjtj��r�y|jd	�WnLtjk
�rlYn6tjk
�r�t	j
d
�t	jd�t	jd�YnX|jd	�|j�ry|jd
�Wn8tjk
�r�Yn"tjk
�r�t	j
d�YnX|jd
�tj |�|	j!dd�|j�r<||k�r<|	j"d|�|j�sx|j#�r`|	j"ddj$|��n|	j"dddj$|��nd|	j"dd�|	j"d|d�y|j%d�}
Wn"tj&k
�r�|jd�}
YnX|
j"dd�|j'|
�t(|d�t(|d�|	j"d|�|	j"d|�|j)�|j)�k�r&|	j"d|�|	j!dd�|	j!dd �|j*�sT|	j!dd!�n|	j!d"d!�|	j"d#d$�|	j"d%tj+�|j,�r�|	j"d&d$�|j-�r�|	j"d'd(�nt.|d�}|	j"d'|�|j/�r�|	j"d)d$�|	j0d$�|j1|	�|j2tj�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 installationr4zxUnable 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_serverz, z	_srv_, %sZipa_server_moder�rZnssZmemcache_timeoutiXZpam�
ipa_domain�ipa_hostnameZ
krb5_realmZauthZchpass�access�permitZcache_credentialsTZldap_tls_cacert�
dyndns_updateZdyndns_iface�*Zkrb5_store_password_if_offline)3r�r�rirBr[r\r �	SSSD_CONFZ
preserve_sssdrHrIrWr��
isinstancer�r�Z
new_configZ
new_domainZDomainAlreadyExistsErrorr��sssd_enable_ifp�conf_sshrr�
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�lowerrr]�dns_updates�all_ip_addresses�get_server_connection_interface�krb5_offline_passwordsZ
set_active�save_domainr�)r�r�r�r�rLr�r�r�rVr�Znss_service�ifacerPrPrQ�configure_sssd_confUs�










r)cCsry|j|�WnNtjk
r$Yn:tjk
r\tjd|�tjd|�tjd|�dSX|j|�|j|�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.)	rr�rrrHrIr�rr)r�rXrPrPrQr!�s
r!c
Cs�t|d�}|dkrdSy|jd�}Wntjk
r@t�}YnXdd�|jd�D�}|jddh�rn|jd�|jt�|r�|jt	j
�|jdd	jt
|���|j|�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|]}|j�r|j��qSrP)�strip)�.0�srPrPrQ�	<setcomp>sz"sssd_enable_ifp.<locals>.<setcomp>�,r��rootz, )r!r�r�r�ry�split�
isdisjointr|rrZ
HTTPD_USERrr~rr )r�Zallow_httpdrZuidsrPrPrQrs


rc
Cs�|sdSyt|d�}Wn2tk
rH}ztjd|t|��dSd}~XnXtdd�|D��}tdd�|D��}g}d}xr|D]j}	|	jd�}	|	j�}
|
s�|
jd	�r�|j	|	�q||
j
�d
j�}||kr�d}P||kr�d	|	}	|j	|	�q|Wx.|j�D]"\}}|dk	r�|j	d||f�q�W|�r4|j	d�|j	|	�x"|D]}	|	jd�}	|j	|	��q:W|j	d�|j
�yt|d
�}Wn4tk
�r�}ztjd|t|��dSd}~XnX|jdj|��|j
�dS)NT�rzFailed to open '%s': %sFcss|]}|j�VqdS)N)r")r+�keyrPrPrQ�	<genexpr>4sz$change_ssh_config.<locals>.<genexpr>css|]}|j�VqdS)N)r")r+r3rPrPrQr45s�
�#rz%s %sr�r�)rzr�rHrIrW�tuple�rstripr*�
startswithrsr0r"�itemsrCr�r~)
rU�changesZsectionsr�rVZchange_keysZsection_keys�linesZ
in_sectionr�Zpliner�r�rPrPrQ�change_ssh_config*sV







r=cCs^tjjtj�s tjdtj�dS|jtj�dd�}|�rDt|�nt	|�tjdtj�dS)Nz$%s not found, skipping configurationcSs:ttjd��$}x|D]}tjd|�rdSqWWdQRXdS)Nr2z
^Include\sTF)rzr rrwr{)r�r�rPrPrQ�ssh_version_supports_includegs

z:configure_ssh_config.<locals>.ssh_version_supports_includez
Configured %s)
rBr[rrr rrHr�r��create_ssh_ipa_config�modify_ssh_config)r�rLr>rPrPrQ�configure_ssh_config`s
rAcCsXddi}|jr4tjjtj�r4dtj|d<tj|d<|jrBd|d<ttj	|ddg�dS)	N�PubkeyAuthentication�yesz
%s -p %%p %%hZProxyCommandZGlobalKnownHostsFileZVerifyHostKeyDNSZHost�Match)
r7rBr[rrr �SSS_SSH_KNOWNHOSTSPROXY�SSSD_PUBCONF_KNOWN_HOSTS�trust_sshfpr=r)rLr;rPrPrQr@vs
r@c	Csft|jotjjtj��}tjtjj	tj
�tjt|r6dndtjtj
|jrJdndd��tjtjd�dS)zAdd the IPA snippet for sshr�r6)ZENABLEPROXYZKNOWNHOSTSPROXYZ
KNOWNHOSTSZVERIFYHOSTKEYDNSi�N)�boolr7rBr[rrr rEr%�copy_template_filer~ZSSH_IPA_CONFIG_TEMPLATE�SSH_IPA_CONFIG�dictrFrGr�)rLZenableproxyrPrPrQr?�s
r?cCs�tjj}tjjtj�s(tj	dtj�dS|j
tj�dd�}|�rLt|�nt|�|j
�r�y|j�Wn0tk
r�}zt|jd|�WYdd}~XnXdS)Nz$%s not found, skipping configurationcSs:ttjd��$}x|D]}tjd|�rdSqWWdQRXdS)Nr2z
^Include\sTF)rzr rrwr{)r�r�rPrPrQ�sshd_version_supports_include�s

z<configure_sshd_config.<locals>.sshd_version_supports_includer�)rr��sshdrBr[rrr rrHr�r��create_sshd_ipa_config�modify_sshd_configrbr�rirZrd)r�rLrMrLrVrPrPrQ�configure_sshd_config�s
rPcCs�dddddd�}|jr�tjjtj�r�d}tjdd�tjdd�dtjdd�f}xd|D]\}tjd	d
tjg}x(|j�D]}|j	d�|j	d|�qrWt
j|d
d�}|jdkrT|}PqTW|dk	r�|j
|�n
tjd�ttj|dg�tjdtj�dS)NrC�no)rBZKerberosAuthenticationZGSSAPIAuthenticationZUsePAMZChallengeResponseAuthenticationZnobody)�AuthorizedKeysCommandZAuthorizedKeysCommandUser)rRZAuthorizedKeysCommandRunAsz%s %%u)ZPubKeyAgentZPubKeyAgentRunAsz-tz-fz-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.rDz
Configured %s)r7rBr[rrr �SSS_SSH_AUTHORIZEDKEYSZSSHD�devnullr:rsr%r0�
returncode�updaterHrjr=rr�)rLr;Zauthorized_keys_changesZ
candidates�	candidate�args�item�resultrPrPrQrO�s8



rOcCs\d}|jr*tjjtj�r*tjd�jtj�}t	j
tjjtj�tj
t|d��tjdtj
�dS)zAdd the IPA snippet for sshdr�zZ            AuthorizedKeysCommand {}
            AuthorizedKeysCommandUser nobody
        )ZSSSD_SSHD_OPTIONSz
Configured %sN)r7rBr[rrr rT�textwrap�dedentr}r%rIr~ZSSHD_IPA_CONFIG_TEMPLATE�SSHD_IPA_CONFIGrKrHr�)rLZsssd_sshd_optionsrPrPrQrN�s
rNcCs�tjd�tjddd|jg}|jr6|jd|jdg�|jsF|jd�yt	|�}Wn2t
k
r�}ztjdt|��WYdd}~XnXtjd	|j
�dS)
Nz
Configuring automount:z--debugz-Uz
--locationz--serverrz	--no-sssdz"Automount configuration failed: %sz%s)rHr�r �IPA_CLIENT_AUTOMOUNT�locationr�r�r7rsr0rirIrWZ
output_log)rLrYr[rVrPrPrQ�configure_automount�s


"racCs�|jp|}tjd|�d}tjjtj�rZytj	tjgdd�}Wnt
k
rRYnX|j}|jdd|�|jddt
jjj��tj|�t
jjj�t
jjj�dS)	NzConfiguring %s as NIS domain.r�T)�capture_output�network�	nisdomain�
domainnamer_)rdrHr�rBr[r\r ZBIN_NISDOMAINNAMEr%r0r.�outputrcrr�rerar!�
set_nisdomainrhr�)rLr�reZnis_domain_namer[rPrPrQ�configure_nisdomains$

rhcCs`|jd�r@|jdd�pd}|r,tjd|�n
tjd�tj|�|jdd�}|s\tjjj	�dS)Nrcrdr�zRestoring %s as NIS domain.zUnconfiguring the NIS domain.rer_)
�	has_statergrHr�r!rgrr�re�disable)reZ
old_nisdomainr_rPrPrQ�unconfigure_nisdomain1s


rkcCshxVtj�D]J}tj|�}x:tjtjgD]*}x$|j|g�D]}|d|kr8|Sq8Wq&Wq
Wtd|��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�iprPrPrQ�get_iface_from_ipCs
rxcCs�|r|g}ntj�}g}x�|D]�}tj|�}x�tjtjgD]r}xl|j|g�D]\}y(|jtj|d��t	j
d|d�WqLtk
r�}zt	j
d|�WYdd}~XqLXqLWq:WqW|S)NrlzIP check successful: %szIP check failed: %s)rmrnrorprqrrrsr%�CheckedIPAddressrHr��
ValueError)r(rn�ipsrtrurvrwrVrPrPrQ�get_local_ipaddressesMs

*r|c	3Cstjdt�tjd|�ttd��}|j|�WdQRXd}ytjtjdtg�d}W�n�t	k
�r�}�zjtjdt
|���ytjtjtg�y�tj�}|j�|j
�}x�|D]�}|j|�}y|jd�}Wntjk
r�w�YnX|tjjko�|d	kr�y8|jd
�dk�r2|jdd�|j|�|jtj�PWq�tjk
�rNPYq�Xq�WWn>tk
�r�}z tjd
t
|��tjd�WYdd}~XnXd}Wn4t	k
�r�}ztjdt
|��WYdd}~XnXWYdd}~XnXytjt�Wntk
�rYnX|S)Nz Writing nsupdate commands to %s:z%sr�Fz-gTznsupdate (GSS-TSIG) failed: %sr�r�rZdyndns_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)rHr��UPDATE_FILErzr�r%r0r ZNSUPDATEr.rWr�r�r�r�r�r�r�envr�rr'rrir�rBrF)	�
update_txtr�r[rVr�r�rXr�r�rPrPrQ�do_nsupdate`sV



4r�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
c0Cs�y
t�}Wn2tk
r<}ztjd|�d}WYdd}~XnX|jrZ|dkrTtd��|}n�|jr�g}x�|jD]}|jtj	|��qlWnvyt
|�}Wn,tk
r�}ztjd|�dSd}~XnXyt|�}Wn.tk
�r�}ztjd|�dSd}~XnX|�stjd�dSt|�d}|tj
tt|d��7}|tj
tt|d��7}xN|D]F}t||dd�}	|jdk�rrt}
n|jd	k�r�t}
|tj
|
|	�7}�qNWt|��s�tjd
�t||�dS)NzCannot update DNS records. %sz!Unable to get local IP addresses.z2Failed to determine this machine's ip address(es).zdebug
)�HOSTNAMEi�)r�Z	IPADDRESSZTTLr<�zFailed to update DNS records.)r|r.rHrIr$rs�ip_addressesrsr%ryr%r�r�template_str�DELETE_TEMPLATE_ArK�DELETE_TEMPLATE_AAAAr3�ADD_TEMPLATE_A�ADD_TEMPLATE_AAAAr��verify_dns_update)r�rrLr{rVZ
update_ipsrwr(rZsub_dictr�rPrPrQ�
update_dns�sT




r�cCs�dd�|D�}g}x�tjjtjjgD]�}tjd|tjj|��ytj||�}Wnjtj	j
tj	jfk
rxtjd�Yq$tj	jk
r�tjd�Yq$tj
jk
r�tjd�Yq$Xx>|D]6}y|j|j�Wq�tk
r�|j|j�Yq�Xq�Wq$Wtjj|�}i}dd�|D�}	x�|D]�}
t|
�}tjd|�ytj|�}Wnptj	j
tj	jfk
�rttjd�Yn�tj	jk
�r�tjd	�Yn^tj
jk
�r�tjd�Yn<X|	j|�x.|D]&}|j|k�s�|j|g�j|j��q�W�q"W|�rtjd
|dj|��|�r.tjd|dj|��|	�rFtjd
dj|	��|�r�tjd�x6|j�D]*\}
}x|D]}
tjd|
|
|��qnW�q`WdS)zz
    Verify that the fqdn resolves to all IP addresses and
    that there's matching PTR record for every IP address.
    cSsg|]}t|��qSrP)rW)r+rwrPrPrQ�
<listcomp>�sz%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|��qSrP)rW)r+rwrPrPrQr�szDNS resolver: Query: %s IN PTRz/DNS resolver: No nameservers answered thequery.z)Missing A/AAAA record(s) for host %s: %s.z, 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)r�Z	rdatatype�AZAAAArHr�Zto_textr&ZresolveZresolverZNoAnswerZNXDOMAINZ
NoNameserversrZDNSExceptionrFZaddressrzrsrXZ	from_textrWZresolve_address�target�
setdefaultrjr~r:)Zfqdnr{Zmissing_ipsZ	extra_ipsZrecord_typeZanswersZrdataZ	fqdn_nameZ
wrong_reverseZmissing_reverserwZip_strZtargetsr�rPrPrQr��sf



 

r�c
3Cs"d}x�tj|dtjtj�D]�}|\}}}}}ytj|||�}Wn*tjk
rh}	z|	}wWYdd}	~	XnXzNy|j|�|j�}
|
d}Wn*tjk
r�}	z|	}wWYdd}	~	XnXWd|r�|j�Xyt|�St	t
fk
r�}	z
|	}WYdd}	~	XqXqWd}|�r|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_STREAMrI�connectZgetsocknamerCrxr.rs)
r�Z
last_error�resZafZsocktype�protoZ
_canonnameZsar,rVZsocknamerw�msgrPrPrQr%&s4

r%cCs�yt|�d}WnZtjk
r6tjd|�d}Yn6tjk
rj}ztjd||�d}WYdd}~XnX|js�|js�|js�|r�t	|||�dS)NTz*Hostname (%s) does not have A/AAAA record.Fz)DNS resolution for hostname %s failed: %s)
rrZDNSNotARecordErrorrHrjZDNSResolverErrorr#r$r�r�)r�rrLZdns_ok�exrPrPrQ�
client_dnsGsr�cCsV|jrRxJ|jD]@}ytj|�Wqtk
rL}ztjd|�dSd}~XqXqWdS)Nz%sFT)r�r%ryrzrHrI)rLrwrVrPrPrQ�check_ip_addresses\sr�c
!Cs$tjj|�sdSg}x�tj|�D]�}|jd�s0q tjj||�}yt|d�}Wn6tk
r�}ztj	d|t
|��w WYdd}~XnXx�|D]x}|j�}|s�|jd�r�q�yt
|�}	Wn6ttfk
r�}ztjd||�w�WYdd}~XnXtjd|�|j|	�q�W|j�q Wy,tjjjdtj|�dd	�|D�d
dd�WnRtjk
�rVYn<tk
�r�}ztjd
t
|��tj	d�dSd}~XnX|�r d}
d}|d|7}xV|D]N}	|	j�}|dk	�r�|d||
|f7}|	j�}|dk	�r�|d||
|f7}�q�W|d7}t|��s tj	d�dS)Nz.pubr2zFailed to open '%s': %sr6zDecoding line '%s' failed: %szAdding SSH public key from %sZhost_modcSsg|]}|j��qSrP)Zopenssh)r+ZpkrPrPrQr��sz#update_ssh_keys.<locals>.<listcomp>Fz2.26)ZipasshpubkeyZ	updatednsr3zhost_mod: %sz&Failed to upload host SSH public keys.i�zdebug
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.) rBr[�isdir�listdir�endswithr~rzr�rHrjrWr*r9r2rz�UnicodeDecodeErrorr�r�rsrCr�Backend�	rpcclient�forwardr%�fsdecoderZEmptyModlistriZfingerprint_dns_sha1Zfingerprint_dns_sha256r�)
rZssh_dir�create_sshfpZpubkeysr�rUr�rVr�ZpubkeyZttlrZsshfprPrPrQ�update_ssh_keysgsj






r�cCstjd�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))rHr�rPrPrPrQ�print_port_conf_info�sr��    cCs�|rd|}nd}xd|D]\}|d|t|j�f7}|d|t|j�f7}|d||jf7}|d||jf7}|d7}qW|dd	�}|S)
Nz%s
r�z%sSubject:     %s
z%sIssuer:      %s
z%sValid From:  %s
z%sValid Until: %s
r5r4���)r(r�ZissuerZnot_valid_beforeZnot_valid_after)r��certs�indentr,�certrPrPrQ�cert_summary�s

r�cCs�tjj|�}z�y|j�tj||||�}Wn�tjk
rLtj|d��Ynftj	k
r�}ztj	|j
t|�d��WYdd}~Xn0tk
r�}ztj
t|���WYdd}~XnXWd|j�X|S)N)�entry)r�rI)r$Z
LDAPClientZfrom_hostname_plainZgssapi_bindr�get_ca_certsrZNotFound�NoCertificateError�NetworkErrorZldap_urirWri�	LDAPErrorZunbind)r�Zbase_dnr�rZconnr�rVrPrPrQ�get_certs_from_ldap�s$$
r�cCs�yt|d�}Wn$tk
r2tjd|d��YnX|jdkrNtjd|d��|j}tjj|�sptjd|d��tjj|�s�tjd|d��t	j
d|�ytj|�}Wn tk
r�tj
|d��YnX|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 %s)r�)rrir�	FileError�schemer[rBr\rrrHr�r	�load_certificate_list_from_filer�)�urlZparsedrUr�rPrPrQ�get_ca_certs_from_file�s"	
r�cCs�|rtjd�tjd|�yttjdd|gdd�}Wn tk
rTtj|d��YnX|j	}yt
j|�}Wn tk
r�tj|d��YnX|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 %sz-o�-T)rb)r�)
rHrjr�r0r ZBIN_CURLr.rr�Z
raw_outputr	Zload_certificate_listri)r�r�r[�stdoutr�rPrPrQ�get_ca_certs_from_http�s
r�cCsbtjd|�yt|||d�}Wn0tk
rN}ztjd|��WYdd}~XnXdd�|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|]}|ddk	r|d�qS)r:FrrP)r+�crPrPrQr�)sz*get_ca_certs_from_ldap.<locals>.<listcomp>)rHr�r�ri)r�r�r�r�rVrPrPrQ�get_ca_certs_from_ldaps
r�cCs�|dkrtjdtd|��dSt|�}t|�}||kr�tjdtj�tjdtd|��tjdtd|��|rxtjd�q�|s�tdd�r�tj	d	d
��n
tj
d�dS)Nz%szSuccessfully 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)rXz4Existing CA cert and Retrieved CA cert are identical)rHr�r�ryrjr r]r1rZCertificateInvalidErrorr�)�existing_ca_certsZnew_ca_certsZask�overriderPrPrQ�validate_new_ca_certs-s2r�cRs�tjd}�fdd�}�fdd�}�fdd�}�j}	�jdkoH�jdk	}
d}d}�jr�|�}
yt|
�}Wnjtjk
r�}zt	j
d	|��WYdd}~Xn:tk
r�}zt	j
d	|�tj|
d
��WYdd}~XnXt	j
d��n�t
jjtj��rht
jjtj��rRytjtj�}Wn:tk
�rN}ztjdtj|fd
��WYdd}~XnXntjdtj�d�d
��|
�r|�r�t	jd�n�|�}
|	}|	�r�td|
dd��r�tjdd��yt|
|�}Wn<tk
�r�}zt	j
d	|�tj|
d
��WYdd}~XnXt||d|��n�|�}
yt�||�}t|||	�W�nptjk
�rl}zt	j
d	|��WYdd}~X�n<tjtjfk
�rh}z�t	j
d	t|��|�}
|�r�t	jd�n�|	�r�td|
dd��r�tjdd��n�|	�r�j�rt	jd�tjdd��nVyt|
�}Wn<tk
�rJ}zt	j
d	|�tj|
d
��WYdd}~XnXt|||	�WYdd}~Xn@tk
�r�}z"t	j
d	t|��tj|
d
��WYdd}~XnX|dk�r�|dk�r�tjd|��|dk	�r�ytj||dd�Wn�tk
�rp}zjt
jj|��rLyt
j|�Wn2t k
�rJ}zt	jd||�WYdd}~XnXtjd||fd
��WYdd}~XnXt
j!|tj�yt
j"tjd�Wn:tk
�r�}ztjd tj|fd
��WYdd}~XnXdS)!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.newcstdtj��ddddf�S)NZldapr�)rr%r�rP)r�rPrQ�ldap_urlnszget_ca_certs.<locals>.ldap_urlcstdd�jdddf�S)Nr�r�)r�ca_cert_filerP)rLrPrQ�file_urlrs
zget_ca_certs.<locals>.file_urlcstdtj��ddddf�S)NZhttpz/ipa/config/ca.crtr�)rr%r�rP)r�rPrQ�http_urlvszget_ca_certs.<locals>.http_urlNz%s)r�z!CA cert provided by user, use it!z(Unable to load existing CA cert '%s': %s)r�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 absenti�)�modezFailed to remove '%s': %sz&cannot write certificate file '%s': %sz*Unable set permissions on ca cert '%s': %s)#r r]�
unattendedr��passwordr�r�rr�rHr�rir�rBr[r\rrr	r�r�r1r�r�r�r�rWrjr�rIZ
InternalError�write_certificate_list�unlinkrG�renamer�)r�rLr�r�r�Zca_filer�r�r��interactiveZotp_authr��ca_certsr�rVr��e2rP)rLr�rQr�Ls� 
$







 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��y�tjd�d}|jdk	rLtjj|jt�}tjj|�r>|}q�tjd|�nTtjj	t
j�r�xDt
jt
j
gD]$}tjj|t�}tjj|�rh|}PqhWntjd�dS|dk	�rttjj|�}tjd|�tjj|t�}tjtt|d��}tjd|�tjd|�y<t|d��}|j|�WdQRXtjd	�|jd
d|�Wn:tk
�rp}	ztjd|	�tjd
�WYdd}	~	XnXntjd�tjd
�Wn>tk
�r�}	z tjdt|	��tjd
�WYdd}	~	XnXdS)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.z%s)rHr��firefox_dirrBr[r~�FIREFOX_PREFERENCES_REL_PATHr�rIrrr ZFIREFOXZLIB_FIREFOXZ
LIB64_FIREFOX�abspath�FIREFOX_PREFERENCES_FILENAMEr%r��FIREFOX_CONFIG_TEMPLATErKrzr�r�rcrirW)
rLrer�Zpreferences_dirZ	pref_pathr[r�rr�rVrPrPrQ�configure_firefoxs`





r�cCslytjtjdtjd|g�Wn:tk
rV}z|jdkrFtjd|j�WYdd}~XnXtj	d|tj�dS)	Nz-kz-rr;��z@Error trying to clean keytab: /usr/sbin/ipa-rmkeytab returned %sz%Removed old keys for realm %s from %s)r;r�r�)
r%r0r �IPA_RMKEYTAB�KRB5_KEYTABr.rVrHrIr�)r�rVrPrPrQ�purge_host_keytabKs
r�c
>CsN
td�tdjtj��td�d}d}tj�dks@tdtd��tj	�t
|jd�rrtj
d	�tjd
�ttd��t�|jr�ytj�WnHtjk
r�}ztdj|j��WYdd}~Xntjk
r�YnX|j�r.|jdk�r.|jdk�r.|jdk�r.|jdk�r.|jdk�r.|j�r.td
td��|jdk	�r^|jdk	�sR|jdk	�r^tdtd��|j�rr|jadantadattj �k�r�tdjt�td��tdgk�r�tdjt�td��yt!tt"d�Wn6t#k
�r�}ztdj|�td��WYdd}~XnXtj$��r |j%�r tdtd��tj$��r@|j&�r@tdtd��tj'��r`|j(�r`tdtd��|j)�r�yt*j+ddg�Wn t,k
�r�tjd�YnX|j%�s�tj-j.t/j0��s�tdtd��t1�\}a2|�s�tdtd��|j�r�|j�r�tdtd��|j�r|j3�rtj4d �yt5j6d!t/j7id"d#�Wn2t5j8j9k
�r\tj:d$t/j7�t;t/j7�YnX|j<�r�t=|j<�t/j>k�r�tj4d%t/j>�t?|��s�ttd��t@jA�}|jB|jC|jD|jEtt=|j<�d&�}|jD�r|dk�rtj
d'd(jF|jD��tj
d)�tG�ttd��|t@jHk�r.tj
d*�tjd+�ttd��|t@jIk�rLtd,jt�td��|t@jJt@jKfk�sh|jC�r<|t@jJk�r�|jD�r�tj:d-|jD�n
tj:d.�n:|t@jKk�r�|jD�r�tj:d/|jD�n
tj:d0�n
tj:d1�|jC�r�|jCaLd}n<|j�r�td2td��n&tjd3�tMd4dd5�aLd6}tj:d7tL�|jBtL|jDtt=|j<�d8�}tL�sb|jC�rb|jCaL|jN}tj:d9tL�ttjOd:�d;d�aP|t@jJt@jKfk�s�|jD�rtj:d<�|jD�r�|jDaQd}nB|j�r�td=td��n,tj:d>�tMd?dd5�gaQd6}tj:d@tQd�|jBtLtQtt=|j<�d8�}nP|jD�sT|jR|jCtS�dA�\}}|�rH|�rHtj:dB�dCaTn
tj:dD�n
tj:dE�tQ�s�|jD�r�|jUaQd}tj:dFd(jF|jD��n$|jD�r�|jUaQ|jV}tj:dGtQd�|t@jKk�r�tj
dHtQd�tG�tj:dItQd|�ttd��|t@jWk�rtj4dJ�tjdK�tjdL�d}|t@jXk�r@tj4dM�tjdK�d}|dk�r�tj
d'tQd�tj
d)�tG�tj:dItQd|�ttd��|jYaZtT�r�tZ�r�tj
dN|j[j ��tj:dI|j[|j\�tj
dO�tT�r�tjdP�nD|j�s|jD�s�tj4dQ�tjdR�tjdS�tMdTd��sttd��|j�r\|j�r\|j�r\|j]�pF|j^�r\tj_�\|_]|_^|j[a`|j\}	tj:dUt`�|jE�r�|jEt`k�r�tj
dV|jEt`�tj:dIt`|	�ttd��|jaab|jc}
tj:dWtb�tddXt`f�aetjdYt�tj:dZt�tjd[t`�tj:d\|	�tjd]tL�tj:d^|�tjd_d(jFtQ��tj:d`|�tjdatb�tj:db|
�|j�	s�|j]�	r�x|j]D]}tjdc|��	qjW|j^�	r�tjdd|j^�x�tQD]�}ytfjgtfjh|�dC}WnLtfj
k
�
rytfjgtfji|�dC}Wntfj
k
�	r�d}YnXYnX|�	r�t�tj4de�P�	q�Wt�|j�
rJtMdfd��
rJttd��dS)hNz$This program will set up IPA client.z
Version {}r�zUnknown sourcerz+You must be root to run ipa-client-install.)rv)r�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.�	localhost�localhost.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)ZstoreZusagezDeleting invalid keytab: '%s'.z Using existing certificate '%s'.)r��serversr�r�ca_cert_pathz*Failed to verify that %s is an IPA Server.z, 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))�allow_emptyzProvided interactivelyz*will use interactively provided domain: %s)r�r�rr�zwill use discovered domain: %s�.r4zIPA 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?)r�r�)j�printr}r3�VERSIONrB�getegidr'rr!Zcheck_selinux_statusrr�rHrIr��CLIENT_ALREADY_CONFIGUREDr��conf_ntpr6Zcheck_timedate_servicesZNTPConflictingServiceZconflicting_serviceZNTPConfigurationErrorr�r�r�r��pkinit_identity�prompt_passwordr�hostname_sourcerr"rr
rzZis_nosssd_supportedr7�no_acZis_mkhomedir_supported�	mkhomedirrr%r0�FileNotFoundErrorr[r\r ZPAM_KRB5_SOru�nosssd_files�
force_joinrj�gssapiZCredentialsr��
exceptions�GSSErrorr�rKr�r^r]r�r8�IPADiscovery�searchr�r��
realm_namer~r�ZBAD_HOST_CONFIGZNOT_FQDNZNO_LDAP_SERVERZNOT_IPA_SERVERr�r1Z
domain_source�findr�r�Zcheck_domainryr�r�Z
server_sourceZNO_ACCESS_TO_LDAPZNO_TLS_LDAPr�r�r�Zrealm_source�ntp_servers�ntp_poolZget_time_sourcer�r�r�Z
basedn_sourcer(rr�Z	inet_ptonrprq)
rLZcli_domain_sourceZcli_server_sourcerVZnssldap_installed�ds�retr�r�Zcli_realm_sourceZcli_basedn_sourceZsrvZ	is_ipaddrrPrPrQ�
install_check`s`



































r�cCs4|dkrtjtj�}|jddd�tj|jd�dS)Ni�T)r�Zbackupi�)r"�NSSDatabaser r�	create_dbrBr�Zpwd_file)ZdbrPrPrQ�create_ipa_nssdb
sr�cCsHtjtj�}tjtj�}|j�s(t|�|jdkr>|jdd�x�dtj	fdtj
ffD]z\}}y|j|�}Wntk
r�wTYnXy|j
|||�WqTtjk
r�}ztd||j|f��WYdd}~XqTXqTWxp|j�D]d\}}xZ|j|��r>y|j|�Wq�tjk
�r:}ztd||j|f��WYdd}~Xq�Xq�Wq�WdS)NZdbmF)Z
rename_oldzIPA CAzExternal CA certzFailed to add %s to %s: %szFailed to remove %s from %s: %s)r"r�r r�
NSS_DB_DIRr\r�ZdbtypeZ
convert_dbZIPA_CA_TRUST_FLAGS�EXTERNAL_CA_TRUST_FLAGSZget_certrs�add_certr%r.�secdirZ
list_certs�has_nicknameZdelete_cert)�ipa_db�sys_dbr��trust_flagsr�rVrPrPrQ�update_ipa_nssdb
s2
&rcCs�tj|�|rN|rNtj�}|jtdddd�}|rNx|D]}tjd|�q:Wtjd�d}|sd|rvtj	||||�}n
tj
d�|s�td�tj�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.)
r6Zforce_chronyr8r�Zipadns_search_srvr�rHr�r�Zconfigure_chronyrjr�Zsync_chrony)r�r�r�rer�r�Z
configuredrPrPrQ�	sync_time2
s"





rcCs�|jd�r||jdd�}d}y|jtj�}Wn"tk
rLtjdtj�YnX|sltj	j
j�tj	j
j�n|r|tj	j
j
�ytj|�Wn.tk
r�}ztjd|�WYdd}~XnXdS)NZchronyr_Fz'Configuration file %s was not restored.z2Failed to restore time synchronization service: %s)rirg�restore_filer ZCHRONY_CONFrzrHr�rr�Zchronyd�stoprjr�r6Zrestore_forced_timeservicesr.rI)rer�Zchrony_enabled�restoredrVrPrPrQ�restore_time_sync[
s"
r
c,Cs�z�yt|t��Wn�tk
r�}z�|jtkr�|jr@tjd�nn|jrRtjd�n\tj	d�d|_
yt|�Wn>tk
r�}z"tj
dtj��tj	d|�WYdd}~XnX�WYdd}~XnXWdytjt�Wntk
r�YnXXdS)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.Tz%s)�_installrKr'rvrr�rHrjr�rIr��	uninstallrir��	traceback�
format_excrBrF�CCACHE_FILE)rLrVr�rPrPrQ�installu
s,

rc-�Cs�dti}tjtj�}tjtj�}|jddd�|d}|d}|jsLtt	�|j
rr|jrrtj||�tj
|j
�|jr�t|j|j||�n|jr�tjd�n
tjd�|j�s|jdko�|jdko�|jdko�|jdko�|jdk�rtd	dd
�|_tjd|j�dt
t	f}|j�sRt�}tt	ttt d|t!t
|j"|j#d
�
||d<t$j%j&|d�}	tj'dtddt(t)t	��dt
dtj*g	}
|j�r�|
j+d�d|d<|j,�r�|
j+d�|jdk	�r�d}|j}|j-d�d�k�r�d|t	f}|jdk	�r�|j}n�|j�s8yt.j.d|�}Wnt/k
�rd}YnX|�snt0dj1|�t2d��n6t3j4j5��rdtj6d�tjd �t0t2d��n
t3j4j7�}yt8|||	|d!�Wn<t9k
�r�}
zt:�t0d"j1|
�t2d��WYdd}
~
XnX�n�|j�r\|
j+d�t$j%j;|j��rDyt<||j|	||j=d#�Wn@t>j?j@k
�r@}
zt:�t0d"j1|
�t2d��WYdd}
~
XnXnt0d$j1|j�t2d���nH|j�r
|
j+d�tAtjBd%��WdQRX|jdk�r�|}n|j}z\ytC||j|	||jDd&�Wn<tEk
�r�}
zt:�t0d'|
��t2d��WYdd}
~
XnXWdtFtjB�Xn�|j�r2|jf}|
j+d(�|
j+|j�nr|j�r�|j�rNt0d)t2d��yt.j.d*�}Wnt/k
�rvd}YnX|�s�t0d+t2d��|
j+d(�|
j+|�|f}|	|d,<t$jGd,<y&|dt$jGd<tH||tdtIt	�WnttJjKk
�r}
ztj6d-|
�t0t2d��WYdd}
~
Xn:tLk
�rP}
ztj6d.|
�t0t2d��WYdd}
~
XnXtM|
d||d/d0�}|jN}|jOdk�r�tj6d1|�|j#�s�|jOd2k�r�tjd3�t0t2d��tjd4�ntjd5t	�|jdk	�r�tMtjPgd|d6�y,t<|tj*tQ||j=d#�tQ|d,<t$jGd,<WnDt>j?j@k
�rP}
z"t:�tj6d7|
�t0t2d��WYdd}
~
XnX|j�svtR|tIt	ttt
�tjd8�tSjT����}tUjVd9tjW|jd|jXd:�d;tUjYk�r�t0d<t2d��|jZtj[�|j"�r�t\|t	tt|t!t
��r�t0t2d��tjd=�|j�r\y"t<|tj*tQ|j=d>�tQt$jGd,<Wn>t>j?j@k
�rZ}
ztj6d7|
�t0t2d��WYdd}
~
XnXyt]|�Wnt^k
�r~YnXt_j`tja�}y<|jb�x.tc|�D]"\}}|jd|d?|dtSje��q�WWn"tEk
�r�t0d@t2d��YnXtUjf�d}y.tUjgjhji�d/}tjdA�tUjgjhjjdB�W�ntJjkk
�r�}
z�|�rNtUjgjhjl�tjdC|
�yJtUjgjhjid/dD�tjdA�tUjgjhjjdB�tjdE�tjmdF�tjmdG�WnBtJjnk
�r�}z"tjmdH|�t0dI|t2d��WYdd}~XnXWYdd}
~
Xn6tJjnk
�	r,}
zt0dJ|
t2d��WYdd}
~
XnXWdQRXytUjgjhjjdKdLdM�}|dN}Wn>tJjotJjpfk
�	r�tUjgjhjjdOd/dPdQ�}|dNdR}YnX|�	s�tq�ytUjgjhjjdSd/dPdT�}WnFtLk
�
r}
z(tjdU|
d/dV�t0dWj1|
�t2d��WYdd}
~
XnXtr|dNdXd�}y
ts�Wn6ttjEk
�
rV}
zt0dY|
t2d��WYdd}
~
XnXytutdtIt	|�}Wn<tJjvk
�
r�|�
r�trd�|�}nd}twjx|t	|�}YnXd\d]�|D�}t_jyd^d]�|D�tjzd_d`�t_jydad]�|D�tjBd_d`�tjdb�tSjTtj{�}x\|D]T\}}}y|jd|||�Wn4tEk
�r^}
zt0dc|t2d��WYdd}
~
XnX�qWtj||�|j�s�t}tdt
|�t~t
tj|j��yt$j�tQ�WntLk
�r�YnXt�j�j�}|j���r�t�||�d} y&|j"�r�dd} |j��nde} |j��Wn8tLk
�r<tjmdf| |j��|j"�s8tjmdg�YnXy|j"�rR|j��n|j��WnFtLk
�r�|j"�s�tjmdh|j��tjdi�ntjmdj|j��YnXn|j"�s�tjdk|j��t�j�j�}!|!j���r�t�|!|�d�\}"}#|j��s
tj�|j"|j�||j�|j�dl�|j��
r�t�j�dmtU�}$|$j��}%|$j��}&|jdmdn|%�|jdmdo|&�y |&�
sT|$j��|%�
sb|$j��Wn4tLk
�
r�}
ztj�dpt(|
��WYdd}
~
XnXtjdq|j"�
r�drnds�|j"�r2t�j�dttU�}'y|'j��Wn tEk
�
r�tjmdu�YnXy|'j��Wn0tEk
�r0}
ztjmdv|
�WYdd}
~
XnX|j"�sNtj�|�tjdw�|j"�s�xXt�t�gD]L}(|(|tIt	ttt�|t�|(j��\}"}#})|"�r�t0t2d��|#�r`tjdx|#|)��q`Wt�|tIt��r�tjdy�n
tjdz�|j�s
|j}*|*dk�rd{t}*tjd||*�nd|*k�rd|*tf}*d}+d},xj|+d}k�r�|,�r�yttjMtj�d~|*g�d/},Wn6tLk
�r�}
zt�j�d�|+d}+WYdd}
~
XnX�q"W|,�s
tj6d|*j�d�d|*�|#�r�tjd�|#�n
tj6d��yt�t�Wn4tLk
�r}
ztj6d�t(|
��WYdd}
~
XnX|j��rt�||�|j��r.t�||�|j��r>t�|�|j��rRt�||t�|j��sht�|t|d��|j�s�|jZtj��tt	ttt t�tj�t!t
|j"|j#d
�
tjd�t	�t�||t	t
||�|j�dd�|jddd/�tjd��dS)�N�PATH�installation�completeFr>r?zlSkipping attempt to configure and synchronize time with chrony server as it has been already done on master.zSkipping chrony configurationz#User authorized to enroll computers)r�z)will use principal provided as option: %sz
host/%s@%s)
r�r�r�r�r�rUr�r�r�r�r@Zccachez-srz-bz-hz-kz-drC�XMLRPC_TRACE_CURLz-f�@r4z%s@%szPassword for %s: z!Password must be provided for {}.)rvz2Password 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: {})r�attemptsz"Keytab file could not be found: {}r�)�ccache_namerr�z'Kerberos PKINIT authentication failed: z-wz1Password must be provided in non-interactive modez
Password: zPassword must be provided.Z
KRB5CCNAMEz%szCannot obtain CA certificate
%sT)rSr~�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)rSr~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)rzCA certificate %dz+Failed to add CA to temporary NSS database.zTry RPC connectionZpingzQCannot connect to the server due to Kerberos error: %s. Trying with delegate=True)rz(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.107)r3r[r~z2.0)r�r3r�Zconfig_show)�rawr3zconfig_show failed %s)�exc_infoz2Failed to retrieve CA certificate subject base: {}Zipacertificatesubjectbasez%Failed to create IPA NSS database: %sr��Certificate AuthoritycSs(g|] \}}}}||tj|d|�f�qS)T)rZkey_policy_to_trust_flags)r+r��n�t�urPrPrQr�sz_install.<locals>.<listcomp>cSs g|]\}}}}|dk	r|�qS)FrP)r+r�r r!r"rPrPrQr�si�)r�cSs g|]\}}}}|dk	r|�qS)FrP)r+r�r r!r"rPrPrQr�sz/Adding CA certificates to the IPA NSS database.z)Failed to add %s to the IPA NSS database.rr�zFailed to %s the %s daemonz-Caching of users/groups will not be availablez6Failed to configure automatic startup of the %s daemonz:Caching of users/groups will not be available after rebootz1Failed to disable %s daemon. Disable it manually.z.%s daemon is not installed, skip configuration)r7r�rer	�subid�oddjobdr`r_zUnable to start oddjobd: %sz
%s enabledZSSSDr�r7z&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'.�
Zpasswdz1Unable 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)rLr�rez*Configured /etc/krb5.conf for IPA realm %szClient configuration complete.r�)r�r)rN)��SECURE_PATHr
�	FileStorer �IPA_CLIENT_SYSRESTORE�	StateFilercr�r�r�rr!Zbackup_hostnameZset_hostnamer�rr�r�rHr�r�r�r�r�r�r�r�r1r7r�r�r�r�r�r7r�rBr[r~�
SBIN_IPA_JOINrWr/r�rsr�r��getpass�EOFErrorr'r}r�sys�stdin�isattyrI�readlinerrsr�r\r�kinit_attemptsr�r�r�rzr�rr�r.rKrDr�r�rr�rir0Zerror_outputrVZKDESTROYrr�r"r�rZ	bootstrapZETC_IPArr~r�rr)rrzr	r�r]r��	enumerater�r��finalizer�r�r�r�Z
KerberosErrorZ
disconnectrjZPublicErrorZCommandErrorr�r�r(r�r%r�r�rZmake_compat_ca_certsr�r�rZ(insert_ca_certs_into_systemwide_ca_storer�r�ZSSH_CONFIG_DIRr�rFrr��nscdr�rfrr�rdrjrhr�r�Zmodify_nsswitch_pam_stackr�rr#rrbrarkZcriticalZmodify_pam_to_use_krb5rlrpr�r��__name__r�ZGETENT�timeZsleepr0r�rrArrPr`rar��no_nisdomainrhZ	KRB5_CONFr�delete_state)-rLrMr~r�rer>r?Zhost_principalrr�	join_argsr.r�rVZpkinit_principalr�r[�stderrZtmp_dbr��ir�Z	connectedr�rrZ
ca_subjectZca_certs_trustrr�rr4Znscd_service_actionr�Zretcoder�r$r`r_r7Z
configurer�	filenames�userr �foundrPrPrQr�
s�

































*$


 








"






 



rcCsRt�s"|jrt}nt}td|d��t�rN|jrNtjd�tjd�ttd��dS)Nz,IPA client is not configured on this system.)rvz@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'rrHrIr�)rLrvrPrPrQ�uninstall_check�s
rAc(�CsF
dti}tjtj�}tjtj�}yttjddg�Wn<tk
rp}z |j	t
kr`tjdt
|��WYdd}~XnX|j�|j�d}d}d}y�tj�}|j�|j�}	|j�}
t|
�dkr�d}x�|	D]�}|j|�}y|jd�}
Wntjk
r�w�YnX|
d	kr�y|jd
�}Wntjk
�r,w�YnXy|jd�}Wq�tjk
�rTYq�Xq�WWntk
�rrYnX|dk�r�t}tjtj�}tjtj�}tjj}|j d��r�ytj!tjdd
�Wn4t"k
�r�}ztjd|j#|�WYdd}~XnXd|}|j |��rVytj!tj|d
�Wn4t"k
�rT}ztjd|j#|�WYdd}~XnXx$tj$D]}t%t&j'j(|j)|���q^Wtj*�y|j+�Wn2tk
�r�}zt,|j#d|�WYdd}~XnXy|j-�Wn8tk
�r}ztjd|j#t
|��WYdd}~XnX|j.�r�t&j'j/tj0��r�tj1d�tj2dd|dtj3g}|j4�r\|j5d�d|d<t|d|d�}|j	dk�r�tjd|j6�t&j'j/tj0��rJtj1d�y8t7�}|j8tj0�|j9dd�}ttj:dtj3d|g�Wnrtk
�r}z"|j	d k�rtjd!t
|��WYdd}~Xn4tk
�rH}ztjd!t
|��WYdd}~XnXtj;d"t<�}|j=d"d#��s�y|j+�Wntk
�r�YnX|j=d"d$��s�y|j-�Wntk
�r�YnXtj1d%�d}d}|j>��r�|j?tj@�}|j?tjA�}ytBjC||||�Wn6tk
�r8}ztDd&jE|�tFd'��WYdd}~XnXt%tjG�t%tjH�|�r�yttjId(d)d*d+g�Wn tk
�r�tj1d,�YnX|�r�d-|d.}t&j'j(tjJ|�}t%|�d/|jK�}t&j'j(tjJ|�}t%|�|�r�|�r�tj1d0�tL�d}y|jMtj@tjN�}Wn tOk
�r0tj4d1�YnX|�rBtj1d2�tj1d3�tj;d4t<�} y| jP�Wn tk
�r�tjQd5�YnX�n6|�r�|�r�tL�tj1d6�tj;d4t<�} y| jP�Wn tk
�r�tjQd5�YnXn�|�r�|�r�t&j'j/tj@��r�yt&jRtj@tjS�Wn$tOk
�r<tj4d7tjS�YnXtj1d8�tj;d4t<�} y| j+�Wn tk
�r�tjQd9�YnXy| j-�Wn0tk
�r�}ztjQd:|�WYdd}~XnXtBjT||�|j>��r�tj1d;�|jU�tV|�tjjW}!tjjX}"x6|!|"fD]*}#|#jY��r$t=|#|�ntj1d<|#j#��q
WtZ||�|�rvtjj[j\��rvt%tj]�t%tj^�tjj[jP�|j_d=��	rtj1d>�|j=d=d?�}$|$dk	�	rt&j'j`|$��	ryt&ja|$�WnBtk
�	r}z$tjQd@|$t
|��tjQdA|$�WYdd}~XnXtb}%|j>��	rtjdBtjc�|jddCdD�d}&x$|jeD]}'tjdE|'�d}&tf}%�	q6W|&�	rdtjQdF�t%tj0�t%tjgdG�t%tjhdG�tBji�t%tjj�t%tjk�t%tjl�tj1dH�|jm�
s2tj1dI�tj1dJ�|j.�
s2tndKd��
r2yttjog�Wn6tk
�
r0}ztDdLjE|�tfd'��WYdd}~XnX|%�
rBtD|%d'��dS)MNrz--uninstallz--debugz(Unconfigured automount client failed: %sFr4Tr�r�rrzLocal IPA host)r�z*%s failed to stop tracking certificate: %szIPA Machine Certificate - %srz9Failed to disable automatic startup of the %s service: %sz"Unenrolling client from IPA serverz
--unenrollz-hz-kz-drCr)rSr~rzUnenrolling host failed: %sz:Removing Kerberos service principals from /etc/krb5.keytabr�r�z-rr�z0Failed to remove Kerberos service principals: %sr$r`r_z1Disabling client Kerberos and LDAP configurationsz,Failed to remove krb5/LDAP configuration: {})rvzcache-removez-oz--stopz--startzsAn error occurred while removing SSSD's cache.Please remove the cache manually by executing sssctl cache-remove -o.Zcache_z.ldbZccache_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 servicer7z&SSSD service restart was unsuccessful.zUOther 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: %sz$Restoring client configuration filesz.%s daemon is not installed, skip configurationr�zRemoving Firefox configuration.r�z'%s' could not be removed: %s.z!Please remove file '%s' manually.z)Some files have not been restored, see %srrzbSome 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 /var/lib/ipa-client/sysrestore.state but it may
 mean your system hasn't been restored to its pre-installation state.z.ipabkpzClient 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: {})pr&r
r'r r(r)r0r_r.rVr@rHrIrW�_loadr�r�r�Zlist_domains�lenr�r�r�rirr"r�rr�rr�rrZ
stop_trackingrsrdZ	NSS_FILESrKrBr[r~rZremove_principal_from_casrrZrjr�r\r�r�r*r�r�rsZ	error_logrr�rrr�rrrgZ	has_filesZhas_filerrr!Z$restore_pre_ipa_client_configurationr'r}rZ
SSSD_MC_GROUPZSSSD_MC_PASSWDZSSSCTLZSSSD_DB�upperr�rZ
SSSD_CONF_BKPrGr�rjr�ZSSSD_CONF_DELETEDZrestore_hostnameZrestore_all_filesrkr4r�r�r
rMrbr^rJrirrrFr?ZSYSRESTORE_INDEXr8�modules�CLIENT_UNINSTALL_ERRORr�Z
NSSWITCH_CONFZ(remove_ca_certs_from_systemwide_ca_storer]r�r�r�r1ZSBIN_REBOOT)(rLr~r�rerVrrZwas_sssd_configuredr�r�Zall_domainsrXr�r�rrrZclient_nss_nicknamerUr9r[r�r�r�r$Zwas_sssd_installedZwas_sshd_configuredZsssd_domain_ldbZ
sssd_ldb_fileZsssd_domain_ccacheZsssd_ccache_filer	r7r4r�rr��rvri�modulerPrPrQr

s



  






















rcCstj�}x<|jD],}t|tj�r|jtjkr|jtj	k|_
PqWd|_
|j|_|j
rdt|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)NTr4r�)2�logging�	getLoggerZhandlersrZ
StreamHandler�streamr-r:�level�DEBUGr�r�r��domain_namerr�r�r�r�r�Z
fixed_primaryrr�Zadmin_passwordr��
host_passwordZ	host_namer�no_ntpr��
ssh_trust_dnsrG�no_sshr�no_sshdr�no_sudor�no_dns_sshfpr��
ca_cert_filesr�Zautomount_locationr`�enable_dns_updatesr#Zno_krb5_offline_passwordsr&Zno_sssdr7)Z	installerZroot_loggerZhandlerrPrPrQ�inits>







rXcs�eZdZdZdZeejjdd�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
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 enrollmentz-k)rZ�	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)rZr[�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
deprecatedrZzNIS 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 recordsr�z6number of attempts to obtain host TGT (defaults to 5).cCs|dkrtd��dS)Nr4z"expects an integer greater than 0.)rz)�selfr�rPrPrQr1(sz%ClientInstallInterface.kinit_attemptsz#request certificate for the machinecs�tt|�jf|�|jr(|jr(td��|jr8tjd�|j	rL|j
rLtd��|jr`|j
r`td��|jrptjd�|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)�superrY�__init__r�rNrs�
force_ntpdrHrjr�rPr�rr7rdr�rWr$)r]�kwargs)�	__class__rPrQr_4s4zClientInstallInterface.__init__)%r5�
__module__�__qualname__�__doc__rZr,r�ServiceAdminInstallInterfacer�rr+rWrOr�r�r�r)�Listr�r�rPr`rdr7rQrRrSrTr#rU�intr1�	validatorrrr_�
__classcell__rPrP)rbrQrY�s�
rYc@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��defaultrZr\cCs|jd�std��dS)N�FILE:�PKCS11:�PKCS12:�DIR:�ENV:z?identity must start with FILE:, PKCS11:, PKCS12:, DIR:, or ENV:)rmrnrorprq)r9rz)r]r�rPrPrQr�msz&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�rlrZr[r\cCs�x~|D]v}|jd�\}}}|s(|dkr0td��|dkrVtjj|�rVtd|�d���|dkrtjj|�rtd|�d���qWdS)	N�:�FILE�DIR�ENV:zBInvalid pkinit_anchor '{part}' is not prefixed with FILE: or DIR:.zpkinit anchor path 'z"' does not exist or is not a file.>rsrurt)�	partitionrzrBr[rrr�)r]r��partr=�sepr[rPrPrQr��s
z%PKINITInstallInterface.pkinit_anchors)r5rcrdrZr+rWr�rir)rgr�rPrPrPrQrk_srkcs�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�stdj|���|d}tjj|�s8td|��tjj|�sPtd|��tjj|�shtd|��yt	j
|�Wn tk
r�td|��YnXdS)NzExpected list, got {!r}r4z'%s' does not existz'%s' is not a filez!'%s' is not an absolute file pathz$'%s' is not a valid certificate filer�)r�listrzr}rBr[r\rr�isabsr	Zload_certificate_from_fileri)r]r�rPrPrQrV�s
zClientInstall.ca_cert_filescCs|jS)N)r�)r]rPrPrQr��szClientInstall.prompt_passwordFz#force setting of LDAP/Kerberos confz-f)rZr[z/configure Firefox to use IPA domain credentials)rZzNspecify directory where Firefox is installed (for example: '/usr/lib/firefox')cs,tt|�jf|�|jr(|jr(td��dS)Nz?--firefox-dir cannot be used without --configure-firefox option)r^ryr_r�r�rs)r]ra)rbrPrQr_�szClientInstall.__init__ccs"t|�t|�dVt|�dS)N)rXr�r)r]rPrPrQ�main�szClientInstall.mainccs"t|�t|�dVt|�dS)N)rXrAr)r]rPrPrQr|�s)r5rcrdreZdm_passwordr,rYrVri�propertyr�r�r+r�r�r�rWr�r_r-r|ZuninstallerrjrPrP)rbrQry�s*ry)F)FT)F)N)r�)T)F)N)�reZ
__future__rrrIr�r+r�rmrBrwr�r�r�r-rAr\r6r
r�ZconfigparserrZurllib.parserrZipalibrrr	r
Zipalib.constantsrrr
Zipalib.installrrrrZ	hostname_Zipalib.factsrrZipalib.install.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.sshr2r3r�r5r6r7Z	ipaclientr8Zipapython.ipachangeconfr9r�ZNoneTyperJr5rHr?rr@r�rFr&r�r�r�r�r�rr�r�r�r�rSrKrZr^rfrgrur�r�r�r�r�r�r�rlrpr�r�r�r�rr)r!rr=rAr@r?rPrOrNrarhrkrxr|r�r�r�r�r�ZIPA_DNS_UPDATE_TXTr}ZIPA_DNS_CCACHErr�r�r%r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
rrrArrXZHostNameInstallInterfacerfZSSSDInstallInterfacerYZServiceInstallInterfacerkZAutomountInstallInterfaceryrPrPrPrQ�<module>	s>
	%"
(
@Cf

x=$
6
2"

95@!B
"

7C.
 )nt'
7
: