a Êß¾g7ã@sfddlmZddlmZddlmZmZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddl mZddlZddlZddlZddlZddlmZddlmZd Zed ƒZed ƒZed ƒZed ƒZedƒZedƒZedƒZedƒZedƒZ edƒZ!edƒZ"edƒZ#edƒZ$Gdd„dej%ƒZ&Gdd„dej'j(ƒZ)dd„Z*Gdd„de+ƒZ,dd „Z-d!d"„Z.dS)#é)Úabsolute_import)Úunicode_literals)Ú_ÚloggerN)Úcopy)ÚPRIO_PLUGINCONFIG)Úustr)Ú up2dateErrorsz_spacewalk.jsonz7CloudLinux Network based repositories will be disabled.z4CloudLinux Network channel support will be disabled.z@There was an error communicating with CloudLinux Network server.z=This system is not registered with CloudLinux Network server.z.This system is not subscribed to any channels.zSystemId could not be acquired.z%You can use rhn_register to register.z@This system is receiving updates from CloudLinux Network server.zžFor security reasons packages from CloudLinux Network based repositories can be verified only with locally installed gpg keys. GPG key '%s' has been rejected.z.Package profile information could not be sent.z=Missing required login information for CloudLinux Network: %sz'Leapp upgrade is running - using cache.z>Spacewalk plugin has to be run under with the root privileges.csZeZdZdZ‡fdd„Zdd„Zdd„Zdd d „Zd d „Zd d„Z dd„Z dd„Z ‡Z S)Ú SpacewalkZ spacewalkcsÒtt|ƒ ||¡||_||_tj |jjj t ¡|_ d|_ i|_ t|jjƒ|_| |j¡|_d|j ¡vr”|j d¡}|D]\}}|j ||t¡qztj ¡s°t t¡d|j_|jjs¼dSt d¡| ¡dS)NFÚmainzinitialized Spacewalk plugin)Úsuperr Ú__init__ÚbaseÚcliÚosÚpathÚjoinÚconfZ persistdirÚSTORED_CHANNELS_NAMEÚstored_channels_pathÚconnected_to_spacewalkÚ up2date_cfgrZ read_configÚparserÚsectionsÚitemsÚ _set_valuerÚdnfÚutilZ am_i_rootrÚwarningÚ MUST_BE_ROOTÚenabledÚdebugÚactivate_channels)ÚselfrrÚoptionsÚkeyÚvalue©Ú __class__©ú9/usr/lib/python3.9/site-packages/dnf-plugins/spacewalk.pyr ;s*ÿ     zSpacewalk.__init__cCs$|jjs dS|jsdSd|jj_dS)NT)rr rZdemandsZ root_user©r#r)r)r*ÚconfigRs zSpacewalk.configcCst d¡dS)Nz$/usr/sbin/clnreg_ks --strict-edition)rÚsystemr+r)r)r*Úclnreg^szSpacewalk.clnregTc Cs²i}d}d}d}d}| ¡}|s(|}nÌtj d¡rFt t¡|}n®tj  ¡|_ t |j ƒ}|j df}d}|sæztj j |jjd}d}Wqltjyâ} z>|dkr¼| ¡d}WYd} ~ qlt dtt| ¡WYd} ~ dSd} ~ 00ql|st dtt¡| i¡dSztjj|jjd} WntjyX} zt dtt| ¡WYd} ~ dSd} ~ 0tjy†t dtt¡| i¡YdStjy®t d ttt t¡YdS0d|_!t "t#¡| D]$} | d rÄt$|  %¡ƒ|| d <qÄ| |¡|j&j'} | %¡D]ž\} }| (| ¡}d}|r*| (d ¡}t)|jƒ}| |j* +¡vrn|j* %| ¡}|D]\}}| ,||t-¡qTt.||j&j||j|||||j/|j0d œ ƒ}|  1|¡qt 2|¡dS) Nrz/etc/cln_leapp_in_progressZuseNoSSLForPackagesF©ÚtimeoutTú%s %s %sz%s %sz %s %s %s %sÚversionÚlabel) rÚproxyr0Ú sslcacertÚ force_httpÚcached_versionÚ login_infoÚgpgcheckr )3Ú_read_channels_filerrÚisfilerrÚLEAPP_IN_PROGRESSÚup2date_clientr,ZinitUp2dateConfigrÚget_ssl_ca_certZ up2dateAuthZ getLoginInforr0r ÚRhnServerExceptionr.ÚerrorÚCOMMUNICATION_ERRORÚ RHN_DISABLEDÚNOT_REGISTERED_ERRORÚ_write_channels_fileZ rhnChannelZgetChannelDetailsZCommunicationErrorZNoChannelsErrorÚNOT_SUBSCRIBED_ERRORÚCHANNELS_DISABLEDZNoSystemIdErrorÚNO_SYSTEM_ID_ERRORÚUSE_RHNREGISTERrÚinfoÚUPDATES_FROM_SPACEWALKÚdictrrÚreposÚgetrrrrrÚ SpacewalkRepor9r Úaddr!)r#Z networkingZenabled_channelsr5r6Z proxy_urlr8Zcached_channelsZ clnreg_triedÚeZ svrChannelsÚchannelrLZ channel_idZ channel_dictZcached_channelr7rr$r%r&Úrepor)r)r*r"as˜       ÿ  ÿ        ÷ zSpacewalk.activate_channelsc CsŠ|jjs dS|jsdS|jddkr8| ¡}tj |¡ztjj|jj dWn6t j y„}zt   dtt|¡WYd}~n d}~00dS)z, Update system's profile after transaction. NZwriteChangesToLogér/r1)rr rrÚ_make_package_deltar=ZrhnPackageInfoZlogDeltaPackagesZupdatePackageProfiler0r r?rr@rAÚPROFILE_NOT_SENT)r#ÚdeltarPr)r)r*Ú transactionºs ÿ zSpacewalk.transactionc CsªzHt|jdƒ(}| ¡}t |¡}|WdƒWS1s<0YWn\ttfy~}z|jtjkrj‚WYd}~n0d}~0tj j y¤}z WYd}~n d}~00iS)NÚr) ÚopenrÚreadÚjsonÚloadsÚFileNotFoundErrorÚIOErrorÚerrnoÚENOENTÚdecoderZJSONDecodeError)r#Ú channels_fileZcontentZchannelsrPr)r)r*r:Ës ( zSpacewalk._read_channels_filec Cs|z@t|jdƒ }tj||ddWdƒn1s40YWn6ttfyv}z|jtjkrb‚WYd}~n d}~00dS)NÚwé)Úindent)rYrr[Údumpr]r^r_r`)r#ÚvarrbrPr)r)r*rDÙs 2 zSpacewalk._write_channels_filecCs.dd„|jjjDƒdd„|jjjDƒdœ}|S)NcSs$g|]}|j|j|j|j|jf‘qSr)©Únamer2ÚreleaseZepochZarch©Ú.0Úpr)r)r*Ú âsÿz1Spacewalk._make_package_delta..cSs$g|]}|j|j|j|j|jf‘qSr)rhrkr)r)r*rnäsÿ)ZaddedZremoved)rrWZ install_setZ remove_set)r#rVr)r)r*rTásÿÿþzSpacewalk._make_package_delta)T) Ú__name__Ú __module__Ú __qualname__rir r,r.r"rWr:rDrTÚ __classcell__r)r)r'r*r 7s   Yr cs>eZdZdZgd¢Z‡fdd„Zdd„Zd ‡fdd „ Z‡ZS) rNzB Repository object for Spacewalk. Uses up2date libraries. )zX-RHN-Server-IdzX-RHN-Auth-User-Idz X-RHN-AuthzX-RHN-Auth-Server-TimezX-RHN-Auth-Expire-Offsetc sVttˆƒ t|dƒ| d¡¡t|dƒˆ_‡fdd„|dDƒˆ_| d¡ˆ_| d¡ˆ_zt |d ƒˆ_ Wn>t y®}z&t   ttj |¡¡gˆ_ WYd}~n d}~00|d | d ¡krÈd ˆ_| d ¡ˆ_dˆ_dˆ_d ˆ_dˆ_| d¡ˆ_| d¡ˆ_| d¡ˆ_| d¡r&ˆ ¡nˆ ¡tˆdƒrRˆ ¡}|rRˆ |¡dS)Nr3rricsg|]}|dˆj‘qS)z /GET-REQ/)Úid)rlÚurlr+r)r*rnùóz*SpacewalkRepo.__init__..rtr5r4Z gpg_key_urlr2r7rSr8rr0r9r6r Úset_http_headers) r rNr rrMriZbaseurlr5r4Úget_gpg_key_urlsZgpgkeyÚInvalidGpgKeyLocationrrÚGPG_KEY_REJECTEDrZi18nZucdZmetadata_expirer8Z keepaliveZ bandwidthZretriesZthrottler0r9r6ÚenableÚdisableÚhasattrÚcreate_http_headersrv)r#rQZoptsrPÚ http_headersr'r+r*r ôs:ÿ         zSpacewalkRepo.__init__cCs‚g}|js|S|jD]X}||jvr6t|}tj |¡‚|j|dvrT| d|¡q| d||j|f¡q|js~| d¡|S)N)NÚz*%s: X-libcurl-Empty-Header-Workaround: *z%s: %sz.X-RHN-Transport-Capability: follow-redirects=3)r8Úneeded_headersÚMISSING_HEADERrÚErrorZ RepoErrorÚappendr6)r#r~Úheaderr@r)r)r*r}s    z!SpacewalkRepo.create_http_headersTcs0tt|ƒ ||¡}| ¡}|r,| tj|¡|S)N)r rNÚ_handle_new_remoter}ZsetoptÚlibrepoZLRO_HTTPHEADER)r#ZdestdirZ mirror_setupZhandler~r'r)r*r…-s z SpacewalkRepo._handle_new_remote)T) rorprqÚ__doc__r€r r}r…rrr)r)r'r*rNês  %rNcCs&| ¡}|D]}t|ƒs t|ƒ‚q |S)a Parse the key urls and validate them. key_url_string is a space seperated list of gpg key urls that must be located in /etc/pkg/rpm-gpg/. Return a list of strings containing the key urls. Raises InvalidGpgKeyLocation if any of the key urls are invalid. )ÚsplitÚis_valid_gpg_key_urlrx)Zkey_url_stringZkey_urlsÚkey_urlr)r)r*rw9s  rwc@s eZdZdS)rxN)rorprqr)r)r)r*rxHsrxcCsP| d¡}t|ƒdkrdS|\}}| ¡dkr2dStj |¡}| d¡sLdSdS)Nz://éFÚfilez/etc/pki/rpm-gpg/T)rˆÚlenÚlowerrrÚnormpathÚ startswith)rŠZ proto_splitÚprotorr)r)r*r‰Ks     r‰cCs4d|vr|dst‚|d}t|ƒtkr0|dS|S)NZ sslCACertr)ZBadSslCaCertConfigÚtypeÚlist)rZca_certsr)r)r*r>Ys  r>)/Z __future__rrZdnfpluginscorerrrZdnf.exceptionsr_r[r†rrZdnf.conf.configrZup2date_client.up2dateAuthr=Zup2date_client.configZup2date_client.rhnChannelZup2date_client.rhnPackageInfoZrhn.i18nrr rrBrFrArCrErGrHrJryrUrr<rZPluginr rRZReporNrwÚ Exceptionrxr‰r>r)r)r)r*ÚsJ      4O