3 0Q=jS;@sBdZddlZddlZddlZddlZddlmZmZddlm Z m Z yddl m Z m Z Wn$ek r|ddlm Z m Z YnXddlZejdddZeed seje_ejZd9d:d;dd?d@dAdBdCdDdEddd d!gfd"Zd#dd$gZGd%d&d&ZGd'd(d(Zd)d*Zd+d,Zd-d.ZdFd0d1ZdGd2d3ZdHd4d5ZdId7d8Z dS)Jzj 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)ZfallbackugettextUse a HTTP ProxyRemote server URL)https://xmlrpc.cln.cloudlinux.com/XMLRPC/&Remote server URL for access over IPv6.https://ipv6.xmlrpc.cln.cloudlinux.com/XMLRPC/Mirror list URL>https://repo.cloudlinux.com/cloudlinux/mirrorlists/cln-mirrors#Whether or not debugging is enabledLocation of system id/etc/sysconfig/rhn/systemid4Override the automatically determined system version;HTTP proxy in host:port format, e.g. squid.example.com:3128'The username for an authenticated proxy.The password to use for an authenticated proxy$To use an authenticated proxy or notBNumber of attempts to make at network connections before giving up)The CA cert used to verify the ssl server'/usr/share/rhn/CLN-ORG-TRUSTED-SSL-CERTzDConfig options that can not be overwritten by a config update action sslCACert serverURLdisallowConfChanges)Z enableProxyr serverURLipv6Z mirrorURLdebug systemIdPathZversionOverride httpProxy proxyUser proxyPasswordZenableProxyAuthZnetworkRetriesrrr"ZtmpDirc@sleZdZdZdddZdddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS) ConfigFilez;class for handling persistent config options for the clientNcCsi|_||_|jr|jdS)N)dictfileNameload)selffilenamer,/usr/lib/python3.6/config.py__init__BszConfigFile.__init__c Cs|r ||_|jdkrdStj|jtjs,dSt|jd}d}x|jD]}|jddkr^qH||j}|spqH|ddkr|ddj}qHnd}|jdd}t |dkrqH|dj}t |dj}d}|jd } | dkr|d| }|}d}|rx|jd } |dkr"t |j t j}nVt | dkrVy t|}Wntk rRYnXn"| ddkrjg}nd d| D}||f} ||jkr|j|} |dk r|| df} |dk r| d|f} | |j|<qHW|jdS)Nrr#rr\=z [comment];r$r%cSsg|]}|jr|jqSr,)strip).0valr,r,r- sz#ConfigFile.load..r9r9)r$r%)r(osaccessR_OKopen readlinesfindr5splitlenrrencodelocalegetpreferredencodingint ValueErrorr'close) r*r+fZ multilineliner@keyvaluecommentposvaluesZnewvalr,r,r-r)Hsd                  zConfigFile.loadc Cs|jdkrdStj|jtjsTtjtjj|jtjsTttdtjj|jdSx~|jj D]p}|j|\}}t |t gkr|n|g}xB||gt |D].}dt |ksdt |krt d||jfqWq`Wtj|jdtjtjBtjBtjBtjBd}ytj|dtj|d}Wn"tk r@tj|YnX|jd|jd |jd x|jj D]}|j|\} } |jtd || ft | t gkr| g} |tkrttjj| } |jtd |d jtt | f|jdqlW|jtj|jd|jdS)Nz%s was not found  z[refusing to write config option %r to %s: a key, comment, or value contains a CR/LF newlinez.newiwzI# Automatically generated Red Hat Update Agent config file, do not edit. z# Format: 1.0 rz%s[comment]=%s z%s=%s r4)r(r:r;r<pathdirnameprint_r'keystypeliststrrFr=O_WRONLYO_CREATO_TRUNC O_NOFOLLOW O_CLOEXECfchmodfdopen ExceptionrGwriter FileOptionsmapabspathjoinrename) r*Z_keyZ_commentZ_valueZ_valuesZ_fieldfdrHrJrLrKr,r,r-savesL         "zConfigFile.savecCs ||jkS)N)r')r*namer,r,r- __contains__szConfigFile.__contains__cCs||kS)Nr,)r*rjr,r,r-has_keyszConfigFile.has_keycCs |jjS)N)r'rV)r*r,r,r-rVszConfigFile.keyscCsdd|jjDS)NcSsg|] }|dqS)rr,)r6ar,r,r-r8sz%ConfigFile.values..)r'rN)r*r,r,r-rNszConfigFile.valuescCs|jj|dS)N)r'update)r*r'r,r,r-rnszConfigFile.updatecCs||jkr|j|dSdS)Nr)r')r*rjr,r,r- __getitem__s zConfigFile.__getitem__cCs0||jkr|j|}nd}|d|f|j|<dS)Nr)NN)r')r*rjrKr7r,r,r- __setitem__s  zConfigFile.__setitem__cCs||jkr|j|dSdS)Nrr)r')r*rjr,r,r-infos zConfigFile.info)N)N)__name__ __module__ __qualname____doc__r.r)rirkrlrVrNrnrorprqr,r,r,r-r&?s  HBr&c@sveZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZdS)ConfigNcCs.t|_|jjt|r$|jj|i|_dS)N)r&storedrnDefaultsr)runtime)r*r+r,r,r-r.s   zConfig.__init__cCs ||jkrdS||jkrdSdS)NTF)ryrw)r*rjr,r,r-rks   zConfig.__contains__cCs||kS)Nr,)r*rjr,r,r-rl szConfig.has_keycCs8t|jj}x$|jjD]}||kr|j|qW|S)N)rXryrVrwappend)r*retkr,r,r-rVs z Config.keyscCs*g}x |jD]}|j|j|qW|S)N)rVrzro)r*r{r|r,r,r-rNsz Config.valuescCs.g}x$|jD]}|j||j|fqW|S)N)rVrzro)r*r{r|r,r,r-itemssz Config.itemscCs t|jS)N)rArV)r*r,r,r-__len__!szConfig.__len__cCs||j|<dS)N)ry)r*rjrKr,r,r-rp$szConfig.__setitem__cCs,||jkr|j|S||jkr(|j|SdS)N)ryrw)r*rjr,r,r-ro(s     zConfig.__getitem__cCs |jj|S)N)rwrq)r*rjr,r,r-rq1sz Config.infocCs|jjdS)N)rwri)r*r,r,r-ri4sz Config.savecCs8|jj|x&|jjD]}||jkr(q|j|=qWdS)N)rwr)rVry)r*r+r|r,r,r-r)7s   z Config.loadcCs ||j|<||jkr|j|=dS)N)rwry)r*rjrKr,r,r-setAs  z Config.set)N)rrrsrtr.rkrlrVrNr}r~rprorqrir)rr,r,r,r-rvs   rvcCs^t}d}|d}|rZ|dddkr2|dd}|jd}tt|d|d<dj|}|S)zkreturns proxy string in format hostname:port hostname is converted to Punycode (RFC3492) if needed Nr#zhttp://:r)initUp2dateConfigr@rYrrf)cfgproxyZ proxyHostpartsr,r,r-getProxySettingHs   rcCs:t|}tt|dtt|d|d|d|dfS)z=returns url where hostname is converted to Punycode (RFC3492)rrr3)rrrrr)Zurlsr,r,r-convert_url_to_punyZsrcCs&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)r6ir,r,r-r8jsz$processServerURL..N) isinstancerXr)Z serverUrlr,r,r-processServerURL`s rFcCs^t}t|d}t|d}||f}||f}|r6|Sddlm}|j}|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. rr r) up2dateAuthZIPv6)rrZup2date_clientrZgetPreferredInterface) registrationrZipv4_urlZipv6_urlZipv4_primary_pairZipv6_primary_pairrZpreferred_interfacer,r,r-getServerURLPairos     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. )rr)r)rr,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)r)rr,r,r-getFallbackServerURLsr/etc/sysconfig/rhn/up2datec CsPytWntk r daYnXtdkrLt|adtd<tjjrLdtd<tS)z sV ;O '