VULN_CHECK_I913V6 jAbddlmZddlmZddlmZddlmZmZddlmZm Z ddl Z ddl Z ddl Z ddl Z ddlZ ddlZ ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZej@dZ!e jDjFd k(re jDjFndZ$e$jKZ& d Z'd;d Z(dd"Z?d#Z@d$ZAd%ZBd&ZCd=d'ZDd(d)ejfd*ZFd+ZGd,ZHd-ZId.ZJGd/d0eKZLGd1d2eMZNGd3d4eOZPd5ZQd6ZRd7ZSd8ZTGd9d:ZUy)>)print_function)absolute_import)unicode_literals)PY3 basestring)_ucdNdnfyumc,t|dgt|dgt|dgt}|D]}||vr|j|tjj j |d}|j dr|jj|r|r |dvr|jj||jdr|jj|dd |jj|y ) a Categorize :param values list into packages, groups and filenames :param namespace: argparse.Namespace, where specs will be stored :param values: list of specs, whether packages ('foo') or groups/modules ('@bar') or filenames ('*.rmp', 'http://*', ...) To access packages use: specs.pkg_specs, to access groups use: specs.grp_specs, to access filenames use: specs.filenames filenames grp_specs pkg_specsrz.rpm)httpftpfilehttps@rN) setattrsetaddr pycompurlparseendswithrappend startswithrr) namespacevaluestmp_setvalueschemess -/usr/lib/python3.12/site-packages/dnf/util.py _parse_specsr$9s I{B' I{B' I{B'eG G   E**%%..u5a8 >>& !    & &u - $DD    & &u -   c "    & &uQRy 1    & &u -c\|tjj}tjj |||}t |j g}|jd||jg} tjjjtjj|d|j&S#t$rS}|jrtt!|t"j%t!|Yd}~|j&Sd}~wwxYw)NrT)r callbackNullDownloadProgressrepoRemoteRPMPayloadsum download_sizestart_librepo_targetlibdnf PackageTargetdownloadPackagesVectorPPackageTarget RuntimeErrorstrictIOErrorstrloggererror local_path)urlconfprogressploadest_remote_sizetargetses r#_urlopen_progressrAYs<<446 HH % %c4 :E5../0O NN1o&$$&'G !!226;;3S3ST[3\^bc     ;;#a&/ ! SV    sD&&D+c trd|vr|jddtj|fi|} |r+|jj ||j nGtjjj|r |jnd||j |jd|S#t$r}tt|d}~wwxYw)z| Open the specified absolute url, return a file object which respects proxy setting even for non-repo downloads bencodingzutf-8Nr)r setdefaulttempfileNamedTemporaryFile_repo downloadUrlfilenor/r) Downloader downloadURL_configr3r5r6seek)r:r;r)modekwargsfor@s r#_urlopenrRhs  s$*g.  $ $T 4V 4B  JJ " "3 4 KK " " . .tt||sTVT]T]T_ `GGAJ I c!fosA4B;; CCCcF|j|r|dt| }|SN)rlen)srs r#rtrimrX|s#zz!} hAwK Hr%c0tjdk(SNr)osgeteuidr%r# am_i_rootr^s ::<1 r%ctj|D]-}tjj||}t |/y)zBRemove all files and dirs under `path` Also see rm_rf() N)r[listdirpathjoinrm_rf)raentrycontained_paths r# clear_dirrfs3 D!dE2 n"r%c tj|dy#t$rH}|jtjk7stj j |s|Yd}~yd}~wwxYw)Ni)rO)r[makedirsOSErrorerrnoEEXISTraisdir)dnamer@s r# ensure_dirrnsN E&  77ell ""''--*>G+?s A+>A&&A+cg}|} tjj|\}}|s|s|s|jd| |S|jd|P)z` Split path by path separators. Use os.path.join() to join the path back to string. r)r[rasplitinsert)raresultheadtails r# split_pathrus\ F D WW]]4( d6 a&  M  a r%cr t|}|dk(S#t$rtt|}Y|dk(SwxYwrZ)rU TypeErrorlist)iterablels r#emptyr{sC M 6M  X  6M s 66cNt|} t|S#t$rYywxYw)zFReturns the first item from an iterable or None if it has no elements.Niternext StopIterationryits r#firstrs+ hBBx s  $$c\t|} td|DS#t$rYywxYw)Nc3&K|] }|| ywrTr]).0items r# z!first_not_none..s.splitters& RX &&t, r%) functoolsreduce)rryrs` r#group_by_filterrs#   HhR 99r%c#:K|D]}||r||yw)z/Insert an item into an iterable by a condition.Nr])rry condition original_items r# insert_ifrs#! ] #J"sc: t|y#t$rYywxYw)z&Test whether an iterator is exhausted.FT)rr)iterators r# is_exhaustedrs' X s  cft|r|g}t|txrtd|DS)Nc3JK|]}t|tdzyw)z*[?N)r)rps r#rz"is_glob_pattern..s-S7ac!fs5z.A7s!#)is_string_type isinstancerxany)patterns r#is_glob_patternrs.g) w % S#-S7-S*STr%cNtrt|tSt|tSrT)rrr6r)objs r#rrs #s###z**r%cfd}|S)zDecorator to get lazy attribute initialization. Composes with @property. Force reinitialization by deleting the . cfd}|S)Ncj t|S#t$r|}t|||cYSwxYwrT)getattrAttributeErrorr)rvalattrnamers r# cached_getterz6lazyattr..get_decorated..cached_getters> sH--! gXs+  s  22r])rrrs` r# get_decoratedzlazyattr..get_decorateds r%r])rrs` r#lazyattrrs  r%c,tt|g|S)zLike functools.map(), but return a list instead of an iterator. This means all side effects of fn take place even without iterating the result. rxmap)rseqs r#mapallr s B  r%ctjdtj|}tjj s*t jd}|r|j|}|S)z6Convert time into locale aware datetime string object.z%cr) rstrftime localtimer rrlocale getlocaledecode) timestamptcurrent_locale_settings r#normalize_timersQ dDNN956A ::>>!'!1!1!3A!6 !/0A Hr%cj d}tj|Dcgc]}|jds|}}t|dkDrH|d}t dj ||5}|j }t|dk(cdddSycc}w#1swYyxYw#ttf$rYywxYw)zDecide whether we are on line power. Returns True if we are on line power, False if not, None if it can not be decided. z/sys/class/power_supplyACrz {}/{}/onlinerN) r[r`rrUopenformatreadintr5 ValueError) ps_foldernodeac_nodesac_node ac_statusdatas r# on_ac_powerrs - %'ZZ %:T%:Tdood>SD%:T x=1 qkGn++Iw?@I ~~'4yA~A@ UA Z sDB BB0B &B B B BB B B21B2c ddl} |j}|jdd}|j |d}|j dd}|dk(ry|dvry|d vry td |#t$rYywxYw#|j $rYywxYw) zDecide whether we are on metered connection. Returns: True: if on metered connection False: if not None: if it can not be decided rNzorg.freedesktop.NetworkManagerz/org/freedesktop/NetworkManagerzorg.freedesktop.DBus.PropertiesMetered)rT)Fz&Unknown value for metered property: %r)dbus ImportError SystemBus get_object InterfaceGet DBusExceptionr)rbusproxyifacemetereds r#on_metered_connectionr1snn?@Bu&GH))z4split_by..next_subsequence..gs 1 >r%)tupler takewhile)rrs r#next_subsequencez"split_by..next_subsequencefsY(()A2FGGr%N)objectr)ryrrmarked subsequencers @r#split_byr]sQIHy(I 6F 6 "" &v.   s8;cB|j|r|t|dSyrT)rrU)rVprefixs r# strip_prefixr us!||FV r%c|s$tj|tjrtj|dSt |d5 dddy#1swYyxYw)z{Create an empty file if it doesn't exist or bump it's timestamps. If no_create is True only bumps the timestamps. Na)r[accessF_OKutimer)ra no_creates r#touchr{s? BIIdBGG,xxd## dC  s AAwritec  |dk(r|j|y|dk(r|jy|dk(r"|j||jy|dk(rt||ytd|z#t$rK}t j djt|jt|Yd}~yd}~wwxYw)Nrflush write_flushprint)rzUnsupported type: z{}: {}) rrrrr5r7criticalrtype__name__r )tpmsgoutr@s r#_terminal_messengerrs = IIcN 7] IIK = IIcN IIK 7] #C 1B67 7  Q(8(8#a&AB  s.A7A7&A7A7)A77 C ACC cd}t|dkD}t|dD]G\}}|r|dtdzd|zzz }n|dtdzdzz }|dj|z }I|S) z Format string about problems in resolve :param resolve_problems: list with list of strings (output of goal.problem_rules()) :return: string rr)r-z Problemz %d: z: z - )rU enumerater rb)resolve_problemsrcount_problemsirss r#_format_resolve_problemsr's C*+a/N+152  51Y<''A+5 5C 51Y<'$. .C x}}R   6 Jr%c|jdz}|j)|jdk7r||jdzz }||jzdz|jzdz|j zS)N-0:.)NEVRA)tenevras r# _te_nevrar4sm DDFSLE ttvbddfm # 2446>C "$$& (3 . 77r%c tjd|D]b}|j}d}| |j}dj t ||||j }tj|d|D]l}dj t||j|j|j|j|j}tj|ny)NzLogging transaction elementsz@RPM element: '{}', Key(): '{}', Key state: '{}', Failed() '{}': z^SWDB element: '{}', State: '{}', Action: '{}', From repo: '{}', Reason: '{}', Get reason: '{}') r7debugKeystaterr4Failedr6action from_reporeason get_reason)rpm_transactionswdb_transactionrpm_eltsi tsi_staters r#_log_rpm_trans_with_swdbrCs LL/0!jjl ? IPWW f sIv}}@ S" !!'C#))SZZX[XbXb(+(8":   S  r%ctjjtjjtjjtjj tjj h}|Dcgc]}|}}d}d}|D] }t|}|j}| t|dsP|D]K} | jtjjk7r+| j|vr:t| |k(sI| }n| t|ds0tjt!dj#|d}|j%r"tjj&|_ d}tjj(|_ |D]b}|jtjjk(s+tjt!dj#t|d}d|rtj+t!d|r t-||yycc}w)NFpkgz%TransactionItem not found for key: {}Tz)TransactionSWDBItem not found for key: {}z#Errors occurred during transaction.)r/ transaction TransactionItemAction_DOWNGRADEDTransactionItemAction_OBSOLETEDTransactionItemAction_REMOVETransactionItemAction_UPGRADED!TransactionItemAction_REINSTALLEDr4r7hasattrr8TransactionItemState_UNKNOWNr:r6r7rr rr9TransactionItemState_ERRORTransactionItemState_DONEr6rC) r>r?revert_actionsrA cached_tsi el_not_foundr8r@te_nevra tsi_candidates r#_sync_rpm_trans_with_swdbrUs((II((HH((EE((GG((JJ LN "22!1##!1J2L E!V$jjl ;gc51!+  &&&*<*<*Y*YY ''~=}%1'C", ;gc51 OOAEFMMhW XL  ==?**EECIE**DDCI)"* 99**GG G OOAIJQQRUVYRZ[ \L  Q<=> *==3s H;ceZdZdZdZdZy)tmpdirctdtjjz}tj||_y)Nz%s-)r )r constPREFIXrFmkdtempra)selfr s r#__init__ztmpdir.__init__s()))$$F3 r%c|jSrTrr\s r# __enter__ztmpdir.__enter__s yyr%c.t|jyrT)rcra)r\exc_type exc_value tracebacks r#__exit__ztmpdir.__exit__s diir%N)r __module__ __qualname__r]r`rer]r%r#rWrWs4r%rWc(eZdZdZfdZdZxZS)BunchzDictionary with attribute accessing syntax. In DNF, prefer using this over dnf.yum.misc.GenericHolder. Credit: Alex Martelli, Doug Hudgeon c:tt| |i|||_yrT)superrir]__dict__)r\argskwds __class__s r#r]zBunch.__init__s ud $d 3d 3r%ct|SrT)idr_s r#__hash__zBunch.__hash__s $xr%)rrfrg__doc__r]rr __classcell__ros@r#ririsr%ric*eZdZfdZdZdZxZS) MultiCallListcLtt| |j|yrT)rkrwr]extend)r\ryros r#r]zMultiCallList.__init__s mT+- Hr%cfd}|S)Nc@fd}tt|S)Nc,t|}|iSrT)r)vmethodrmrPwhats r# call_whatz8MultiCallList.__getattr__..fn..call_what s D)t.v..r%r)rmrPrr\rs`` r#rz%MultiCallList.__getattr__..fn s /It,- -r%r])r\rrs`` r# __getattr__zMultiCallList.__getattr__ s .  r%c<fd}tt||S)Nc t|yrT)r)rrrs r#setterz)MultiCallList.__setattr__..setters D$ $r%r)r\rrrs `` r# __setattr__zMultiCallList.__setattr__s %C%&&r%)rrfrgr]rrrtrus@r#rwrws'r%rwctgggggggggggd }|D]}|jtjjk(r|j j |G|jtjjk(r|jj ||jtjjk(r|jtjjk(r|jj ||jtjjk(r|jj |8|jtjj k(r|j"j |||j$j ||jtjj&k(r|j(j ||jtjj*k(r|jtjj,k(r|j.j |H|jtjjk(r|j0j ||j2j ||jtjj4k(s|j6j ||S)N) downgradederased erased_clean erased_dep installedinstalled_group installed_depinstalled_weak reinstalledupgradedfailed)rir8r/rFrNrrr:TransactionItemAction_DOWNGRADErTransactionItemAction_INSTALLr<TransactionItemReason_GROUPr TransactionItemReason_DEPENDENCYr%TransactionItemReason_WEAK_DEPENDENCYrrTransactionItemAction_REINSTALLrrITransactionItemReason_CLEANrrrTransactionItemAction_UPGRADEr)rFrCrAs r# _make_listsrs   A 99**EE E HHOOC ZZ6--MM M LL   $ ZZ6--KK KzzV//KKK!!((-v11RRR&&s+v11WWW  '', ""3' ZZ6--MM M MM  % ZZ6--JJ JzzV//KKK%%c*v11RRR ##C($ ZZ6--KK K JJ  c "36 Hr%c fd}tjj|}jd|\}}|j |}g}t d|j ft d|jft d|j|jz|jz|jzft d|jft d|ft d |j|jz|jzft d |j ffD];\} } |j#|| t%| t'j(| =|S) alReturns a human-readable summary of the results of the transaction. :param action_callback: function generating output for specific action. It takes two parameters - action as a string and list of affected packages for this action :return: a list of lines containing a human-readable summary of the results of the transaction cT|j|jkD|j|jkz }|dk7r|Stj|j|j|j|j |j }tj|j|j|j|j |j }|j|j}|dk7r|S|j |j kD|j |j kz S)zCompares two transaction items or packages by nevra. Used as a fallback when tsi does not contain package object. r)nameepochversionreleasearch) rhawkeyNEVRArrrrevr_cmpsack)item1item2retnevra1nevra2bases r#_tsi_or_pkg_nevra_cmpz7_post_transaction_output.._tsi_or_pkg_nevra_cmpPszzEJJ&5:: +BC !8J5::U[[%--&+mm%**F5::U[[%--&+mm%**FnnVTYY/ !8J UZZ'EJJ,CDDr%F)report_problemsrFUpgraded Downgraded Installed ReinstalledSkippedRemovedr9)key)r utilr_skipped_packagesunionr rrrrrrrrrrrrysortedr cmp_to_key) rrFaction_callbackr list_bunchskipped_conflictsskipped_brokenskippedrr:tsiss ` r#_post_transaction_outputrFscE %%k2J(,(>(>;)?)8%~%%n5G CjM:+>+>?lOZ-B-BCkNJ,@,@&66-7&55-6'44-56m,j.D.DEiL'2iL**;*;)44+5)66+78hK):):; = ? F4Y%9%9:O%PQS T = Jr%c |r|StdS)Nz )r ) input_names r#_name_unset_wrapperrys#::>)::r%cl|D]/}tjj|}|js/yy)NTF)r subjectSubject_filename_pattern)specsspecsubjs r#_is_file_pattern_presentr~s1{{""4(  ! ! r%cleZdZdZdZdZedZedZ dZ dZ edZ ed Z d Zy ) _BootcSystemz/usric0|jsttdddl}||_|j ddddlm}||_|jjj|_ |jj|_ y)NzNot running on a bootc system.rOSTreez1.0)r)is_bootc_systemr3r gi_girequire_version gi.repositoryr_OSTreeSysroot new_default_sysrootrequire_booted_deployment_booted_deployment)r\rrs r#r]z_BootcSystem.__init__st##%q!ABC C 8U+(  ,,88: #'--"I"I"Kr%cDd}tjj|S)zYReturns true is the system is managed as an immutable container, false otherwise.z/run/ostree-booted)r[raisfile) ostree_booteds r#rz_BootcSystem.is_bootc_systems- ww~~m,,r%c^tj|jtjS)z-Returns true if and only if /usr is writable.)r[rusrW_OK)clss r# is_writablez_BootcSystem.is_writablesyy"''**r%c6|jjSrT)r get_unlockedr_s r#_get_unlocked_statez _BootcSystem._get_unlocked_states&&3355r%cd|j|jjjk(S)zReturns true if and only if the bootc system is unlocked in a transient state, i.e. a overlayfs is mounted as read-only on /usr. Changes can be made to the overlayfs by remounting /usr as read/write in a private mount namespace.)rrDeploymentUnlockedState TRANSIENTr_s r#is_unlocked_transientz"_BootcSystem.is_unlocked_transients( '')T\\-Q-Q-[-[[[r%ctjd}|j|jdk7r t ddddd|j g} t j|d}|jy#t$r/tjjtd |dzt j$r?tjjtd |j jwxYw) Nrz!Failed to unshare mount namespacemountz--options-source=disablez-oz remount,rwTtextz%s: command not found.z$Failed to mount %s as read/write: %s)ctypesCDLLunshare CLONE_NEWNSrir subprocessruncheck_returncodeFileNotFoundErrorr exceptionsErrorr CalledProcessErrorstderr)rlibc mount_commandcompleted_processs r#_set_up_mountnsz_BootcSystem._set_up_mountnss {{4  << (A -=> > "r!s*&&'#          5 !.Eh.E.E.G.L.LPU.U #H # # % * *[` //#.@ ( (, ( : U + " (L:> 0  #  $$8"%>P V  D  'D'&* Z0f; j"j"r%