3 g2@sFdZddlZddlZddlZddlZddlmZmZddlm Z m Z yddl m Z m Z Wn$ek r|ddlm Z m Z YnXddlZejdddZeed seje_ejZd:d;dd?d@dAdBdCdDdEdFdddd d!gfd"Zd#dd$gZGd%d&d&ZGd'd(d(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Z dGd8d9Z!dS)Hzj 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/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-CERTDisable the reboot actionzDConfig options that can not be overwritten by a config update action sslCACert serverURLdisallowConfChangesnoReboot)Z enableProxyr mirrorURLdebug systemIdPathZversionOverride httpProxy proxyUser proxyPasswordZenableProxyAuthZnetworkRetriesrrrr"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__JszConfigFile.__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)Psd                  zConfigFile.loadc CsJ|jdkrdStj|jtjsTtjtjj|jtjsTttdtjj|jdSt|jdd}tj |jdt dd|j d|j d|j dx|j j D]}|j |\}}|j td ||ft|tgkr|g}|tkrttjj|}|j td |d jtt|f|j d qW|jtj|jd|jdS) Nz%s was not foundz.newwZ0644zI# 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=chmodrEwriter'keysrtype FileOptionsmapabspathjoinstrrGrename)r*rHrJrLrKr,r,r-saves,     "zConfigFile.savecCs ||jkS)N)r')r*namer,r,r- __contains__szConfigFile.__contains__cCs||kS)Nr,)r*rar,r,r-has_keyszConfigFile.has_keycCs |jjS)N)r'rX)r*r,r,r-rXszConfigFile.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-reszConfigFile.updatecCs||jkr|j|dSdS)Nr)r')r*rar,r,r- __getitem__s zConfigFile.__getitem__cCs0||jkr|j|}nd}|d|f|j|<dS)Nr)NN)r')r*rarKr7r,r,r- __setitem__s  zConfigFile.__setitem__cCs||jkr|j|dSdS)Nrr)r')r*rar,r,r-infos zConfigFile.info)N)N)__name__ __module__ __qualname____doc__r.r)r`rbrcrXrNrerfrgrhr,r,r,r-r&Hs  H$r&c@sveZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZdS)ConfigNcCs.t|_|jjt|r$|jj|i|_dS)N)r&storedreDefaultsr)runtime)r*r+r,r,r-r.s   zConfig.__init__cCs ||jkrdS||jkrdSdS)NTF)rprn)r*rar,r,r-rbs   zConfig.__contains__cCs||kS)Nr,)r*rar,r,r-rcszConfig.has_keycCs8t|jj}x$|jjD]}||kr|j|qW|S)N)listrprXrnappend)r*retkr,r,r-rXs z Config.keyscCs*g}x |jD]}|j|j|qW|S)N)rXrrrf)r*rsrtr,r,r-rNsz Config.valuescCs.g}x$|jD]}|j||j|fqW|S)N)rXrrrf)r*rsrtr,r,r-itemssz Config.itemscCs t|jS)N)rArX)r*r,r,r-__len__ szConfig.__len__cCs||j|<dS)N)rp)r*rarKr,r,r-rgszConfig.__setitem__cCs,||jkr|j|S||jkr(|j|SdS)N)rprn)r*rar,r,r-rfs     zConfig.__getitem__cCs |jj|S)N)rnrh)r*rar,r,r-rhsz Config.infocCs|jjdS)N)rnr`)r*r,r,r-r`sz Config.savecCs8|jj|x&|jjD]}||jkr(q|j|=qWdS)N)rnr)rXrp)r*r+rtr,r,r-r)!s   z Config.loadcCs ||j|<||jkr|j|=dS)N)rnrp)r*rarKr,r,r-set+s  z Config.set)N)rirjrkr.rbrcrXrNrurvrgrfrhr`r)rwr,r,r,r-rms   rmcCs^t}d}|d}|rZ|dddkr2|dd}|jd}tt|d|d<dj|}|S)zl returns proxy string in format hostname:port hostname is converted to Punycode (RFC3492) if needed Nr#zhttp://:r)initUp2dateConfigr@r^rr])cfgproxyZ proxyHostpartsr,r,r-getProxySetting2s   r~cCs:t|}tt|dtt|d|d|d|dfS)z? returns url where hostname is converted to Punycode (RFC3492) rrr3)rrrrr)urlsr,r,r-convert_url_to_punyCsrcCs6t|}tt|dt|d|d|d|dfS)zZ returns url where hostname is converted from Punycode (RFC3492). Returns unicode string. rrr3rr)rrrr)rrr,r,r-convert_url_from_punyHsrc Csvtd}|dkrd}|jdrVt|jddd }ttj|j}dd|DSQRXtj |}dd|j j d DS) Nr z>https://repo.cloudlinux.com/cloudlinux/mirrorlists/cln-mirrorszfile://rr/cSsg|]}|rt|qSr,)r)r6mirrorr,r,r-r8Tsz+getServerlURLFromMirror..cSsg|]}|rt|qSr,)r)r6rr,r,r-r8VsrQ) r{ startswithr=replacer[r^r5r>requestsgettextr@)rZ mirrorlistZmirrorsZrequestr,r,r-getServerlURLFromMirrorMs  rcCs>t}t|dtgkr,dd|dDSt|dgSdS)z return list of serverURL from config Note: in config may be one value or more values, but this function always return list rcSsg|] }t|qSr,)r)r6ir,r,r-r8asz!getServerlURL..N)rzrYr)r{r,r,r- getServerlURLXsrcCst}|jd|dS)z Set serverURL in config rN)rzrw)rr{r,r,r- setServerURLesrcCst}|jd|dS)z Set sslCACert in config rN)rzrw)rr{r,r,r- setSSLCACertjsr/etc/sysconfig/rhn/up2datec CsPytWntk r daYnXtdkrLt|adtd<tjjrLdtd<tS)z sp   O