a c8h9@sfdZddlZddlZddlZddlZddlmZmZddlm Z m Z zddl m Z m Z Wn"eyzddlm Z m Z Yn0ddlZejdddZeed seje_ejZd d d d dddddddddddgdfdZgdZGdddZGdddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd:d+d,Zd;d-d.Z dzj This module includes the Config and Up2date Config classes use by the up2date agent to hold config info. N)idn_ascii_to_punyidn_puny_to_unicode)ustrsstr)urlsplit urlunsplitzrhn-client-toolsT)fallbackugettext)zUse a HTTP Proxyr)zRemote server URLz)https://xmlrpc.cln.cloudlinux.com/XMLRPC/)z&Remote server URL for access over IPv6z.https://ipv6.xmlrpc.cln.cloudlinux.com/XMLRPC/)zMirror list URL>https://repo.cloudlinux.com/cloudlinux/mirrorlists/cln-mirrors)z#Whether or not debugging is enabledr)zLocation of system idz/etc/sysconfig/rhn/systemid)z4Override the automatically determined system version)z;HTTP proxy in host:port format, e.g. squid.example.com:3128r )z'The username for an authenticated proxyr )z.The password to use for an authenticated proxyr )z$To use an authenticated proxy or notr)zBNumber of attempts to make at network connections before giving up)z)The CA cert used to verify the ssl serverz'/usr/share/rhn/CLN-ORG-TRUSTED-SSL-CERT)zDisable the reboot actionrzDConfig options that can not be overwritten by a config update action) sslCACert serverURLdisallowConfChangesnoReboot)Z enableProxyr serverURLipv6 mirrorURLdebug systemIdPathZversionOverride httpProxy proxyUser proxyPasswordZenableProxyAuthZnetworkRetriesr rr)rr ZtmpDirc@sleZdZdZdddZdddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS) ConfigFilez;class for handling persistent config options for the clientNcCsi|_||_|jr|dSN)dictfileNameloadselffilenamer 9/usr/lib/python3.9/site-packages/up2date_client/config.py__init__CszConfigFile.__init__c Cs|r ||_|jdurdSt|jtjs,dSt|jd}d}|D]}|ddkrZqD||}|slqD|ddkr|dd}qDnd}|dd}t |d krqD|d}t |d}d}|d } | dkr|d| }|}d}|rr|d } |d vrt | t }nTt | dkrPz t|}WntyLYn0n"| ddkrdg}nd d| D}||f} ||jvr|j|} |dur|| df} |dur| d|f} | |j|<qD|dS)Nrr #r\=r z [comment];)rrcSsg|]}|r|qSr )strip).0valr r r! z#ConfigFile.load..)rosaccessR_OKopen readlinesfindr*splitlenrrencodelocalegetpreferredencodingint ValueErrorrclose) rrfZ multilineliner5keyvaluecommentposvaluesZnewvalr r r!rIsd                   zConfigFile.loadc CsF|jdurdSt|jtjsTttj|jtjsTttdtj|jdSt|jdd}t |jdt dd| d| d| d|j D]}|j |\}}| td ||ft|tgkr|g}|tvrttjj|}| td |d tt|f| d q|t|jd|jdS) Nz%s was not foundz.newwZ0644zI# Automatically generated Red Hat Update Agent config file, do not edit. z# Format: 1.0 r z%s[comment]=%s z%s=%s r) )rr/r0r1pathdirnameprint_r2chmodr:writerkeysrtype FileOptionsmapabspathjoinstrr<rename)rr=r?rAr@r r r!saves,     " zConfigFile.savecCs ||jvSrrrnamer r r! __contains__szConfigFile.__contains__cCs||vSrr rWr r r!has_keyszConfigFile.has_keycCs |jSr)rrMrr r r!rMszConfigFile.keyscCsdd|jDS)NcSsg|] }|dqS)r r )r+ar r r!r-r.z%ConfigFile.values..)rrCr[r r r!rCszConfigFile.valuescCs|j|dSr)rupdate)rrr r r!r]szConfigFile.updatecCs||jvr|j|dSdS)Nr rVrWr r r! __getitem__s zConfigFile.__getitem__cCs0||jvr|j|}nd}|d|f|j|<dS)N)NNrrV)rrXr@r,r r r! __setitem__s  zConfigFile.__setitem__cCs||jvr|j|dSdS)Nrr rVrWr r r!infos zConfigFile.info)N)N)__name__ __module__ __qualname____doc__r"rrUrYrZrMrCr]r^r_r`r r r r!r@s  H#rc@sveZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZdS)ConfigNcCs.t|_|jt|r$|j|i|_dSr)rstoredr]Defaultsrruntimerr r r!r"s   zConfig.__init__cCs ||jvrdS||jvrdSdS)NTFrhrfrWr r r!rYs   zConfig.__contains__cCs||vSrr rWr r r!rZszConfig.has_keycCs4t|j}|jD]}||vr||q|Sr)listrhrMrfappendrretkr r r!rMs  z Config.keyscCs&g}|D]}|||q |SrrMrkr^rlr r r!rCs z Config.valuescCs*g}|D]}||||fq |Srrorlr r r!itemss z Config.itemscCs t|Sr)r6rMr[r r r!__len__szConfig.__len__cCs||j|<dSr)rhrrXr@r r r!r_szConfig.__setitem__cCs,||jvr|j|S||jvr(|j|SdSrrirWr r r!r^ s     zConfig.__getitem__cCs |j|Sr)rfr`rWr r r!r`sz Config.infocCs|jdSr)rfrUr[r r r!rUsz Config.savecCs4|j||jD]}||jvr&q|j|=qdSr)rfrrMrh)rrrnr r r!rs   z Config.loadcCs ||j|<||jvr|j|=dSr)rfrhrrr r r!set#s  z Config.set)N)rarbrcr"rYrZrMrCrprqr_r^r`rUrrsr r r r!res   recCs^t}d}|d}|rZ|dddkr2|dd}|d}tt|d|d<d|}|S)zkreturns proxy string in format hostname:port hostname is converted to Punycode (RFC3492) if needed Nrzhttp://:r)initUp2dateConfigr5rSrrR)cfgproxyZ proxyHostpartsr r r!getProxySetting*s   rzcCs:t|}tt|dtt|d|d|d|dfS)z=returns url where hostname is converted to Punycode (RFC3492)rr r()rrrrrurlsr r r!convert_url_to_puny<srcCs6t|}tt|dt|d|d|d|dfS)zXreturns url where hostname is converted from Punycode (RFC3492). Returns unicode string.rr r(r{r|)rrrrr}r r r!convert_url_from_punyBsrcCstd}|durd}|drnt|ddd.}ttj|}dd|DWdS1sd0Yt |}dd|j d DS) Nrr zfile://r r#cSsg|]}|rt|qSr rr+Zmirrorr r r!r-Or.z+getServerlURLFromMirror..cSsg|]}|rt|qSr rrr r r!r-Qr.rF) rw startswithr2replacerPrSr*r3requestsgettextr5)r~Z mirrorlistZmirrorsZrequestr r r!getServerlURLFromMirrorHs , rcCs&t|trdd|DSt|gSdS)z Internal function to process server URL to Punycode format. Processes both single URLs and lists of URLs. :param serverUrl: URL or list of URLs to process. :return: List of processed URLs in Punycode format. cSsg|] }t|qSr r)r+ir r r!r-^r.z$processServerURL..N) isinstancerjr)Z serverUrlr r r!processServerURLTs rFcCs^t}t|d}t|d}||f}||f}|r6|Sddlm}|}|dkrZ|rZ|S|S)a Return a pair of server URLs (primary and fallback) based on the preferred interface. :param registration: If True, it indicates that the URLs are being fetched for registration purposes. If that is the case, the function will always use IPv4 URLs with IPv6 as fallback, regardless of the preferred_interface setting. Assumed false by default, expected to be specified explicitly when needed. :return: Pair of server URL configs, first is the primary, second is the fallback. rrr) up2dateAuthZIPv6)rvrZup2date_clientrZgetPreferredInterface) registrationrwZipv4_urlZipv6_urlZipv4_primary_pairZipv6_primary_pairrZpreferred_interfacer r r!getServerURLPaircs     rcCst|ddS)az Return the primary server URL from config based on preferred_interface. If preferred_interface=IPv6 in system_id, returns serverURLipv6 if available. Otherwise returns normal serverURL. Note: the config may have one value or a list of values, but this function always returns a list. :return: List of server URLs with hostnames converted to Punycode. rrrrr r r! getServerURLs rcCst|ddS)z Determine the fallback server URL from system_id. The fallback server URL is the one that is *not* set as preferred_interface. If preferred_interface is IPv6, it returns serverURL (i.e. IPv4 host), otherwise serverURLipv6. rr rrr r r!getFallbackServerURLsrcCst}|d|dS)zSet serverURL in configrNrvrsrrwr r r! setServerURLsrcCst}|d|dS)zSet serverURLipv6 in configrNrrr r r!setServerURLipv6srcCst}|d|dS)zSet sslCACert in configr Nr)r rwr r r! setSSLCACertsr/etc/sysconfig/rhn/up2datecCsNztWntydaYn0tdkrJt|adtd<tjrJdtd<tS)zsb  O  '