VULN_CHECK_I913V6 j |ddlmZddlmZddlmZddlmZddlmZddlm Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZe j(dZd Ze j.d Zd Zd d dddddddd ZdZGdde j8ZGddej<ZGdde Z!y))absolute_import)print_function)unicode_literals)_)commands) OptionParserNdnfz.%{name}-%{epoch}:%{version}-%{release}.%{arch}z%(-?\d*?){([:\w]+?)})"namearchepochversionreleasereponamerepoid from_repoevr debug_name source_namesource_debug_name installtime buildtimesize downloadsize installsizeprovidesrequires obsoletes conflictssuggests recommendsenhances supplements sourcerpm descriptionsummarylicenseurlreasongroupvendorpackagerrr!rrr r requires_prerr") rr!rrr r requires-prerr"c~fd}d|jddjdd}tjD]\}}|j||}d}d}tj |D]9}||||j z }|||z }|j };|||d z }|S) z:Convert a rpm like QUERYFMT to an python .format() string.c|jd}|jd}|j}|tvr|jS|r|ddk(r d|ddz}nd|z}d|z}d|z|zdzS) Nr-><:z{0.})groupslowerALLOWED_QUERY_TAGSr))matchobjfillkeybracketss ?/usr/lib/python3.12/site-packages/dnf/cli/commands/repoquery.pyfmt_replzrpm2py_format..fmt_replDs #oo"iik ( (HNN,- - Aw#~T!"X~Tz:Ds{T!C''cF|jddjddS)N{z{{r5z}})replace)txts r=r<zrpm2py_format..bracketsRs {{3%--c488r?z\n z\t rN)rB OPTS_MAPPINGitems QFORMAT_MATCHfinditerstartend) queryformatr>r;valuefmtspositemr<s @r= rpm2py_formatrRBs (9%%eT2::5$GK"((* U!))#u5 + C D&&{3 x D677 x~xxz48K& ''C Jr?ceZdZdZy)_CommaSplitCallbackz\s*,\s*N)__name__ __module__ __qualname__SPLITTERr?r=rTrTbsHr?rTc eZdZdZej ej ejdZde ejzZ e dZ edZedZdZdZd Zd Zdd Zdd ZddZdZdZdZdZddZy )RepoQueryCommandzSA class containing methods needed by the cli to execute the repoquery command. )z repoquery-nz repoquery-nazrepoquery-nevra) repoqueryrqz$search for packages matching keywordc|jr|j|j|jr|j|j|S)z'Filter query by repoid and arch options)r)r )repofiltermarches)optsquerys r=filter_repo_archz!RepoQueryCommand.filter_repo_archps; 99 MM499M - ;; MMt{{M + r?c  |jddddtd|jddtd |jd d d gtd td|jddddtd|jdgtdtd|jdgtdtd|jdgtdtd|jdgtdtd|jd gtdtd!|jd"gtdtd#|jd$gtdtd%|jd&gtdtd'|jd(gtdtd)|j}|jd*dtd+ |jd,dtd- |jd.dtd/ |jd0dtd1 |jd2dtd3 |jd4dtd5 |jd6dtd7 |jd8d9ttd:;|jdd?d@dAdtdBC|jdDdEdFdAdtdGC|jdHdIdJdAdtdKC|jdLdMdAdtdNC|jdOdPdQt tdRS|jdTdtdU |jdVdQt dWtdXY|jdZdQd[dWtd\Y|jd]dQd^dWtd_Y|jd`dtda |j}|jdbdcdddWtdeY|jdfdcdddWt jY|jdgdcdhdWtdiY|jdjdcdkdWtdlY|jdmdtdn |j}tdotdptdqtdrtdstdttdutdvtdwdx }|jD] \}}dy|z}|j|dzdW||{"|jd|dtd} td~tdtdtdjtjjtdd} |j} | jD] \} } dy| z} | j| ddW| | {"| jdddWdt j{|jddtd |jdddtdy)Nz-az--allqueryall store_truezNQuery all packages (shorthand for repoquery '*' or repoquery without argument))destactionhelpz--show-duplicatesz(Query all versions of packages (default))rirjz--archz --archlistraz[arch]z show only results from this ARCH)rhdefaultrimetavarrjz-fz--fileFILE+z show only results that owns FILE)rlnargsrjz--whatconflictsREQz#show only results that conflict REQ)rkrirlrjz --whatdependszjshows results that requires, suggests, supplements, enhances, or recommends package provides and files REQz--whatobsoletesz#show only results that obsolete REQz--whatprovidesz"show only results that provide REQz--whatrequiresz:shows results that requires package provides and files REQz--whatrecommendsz$show only results that recommend REQz--whatenhancesz"show only results that enhance REQz--whatsuggestsz"show only results that suggest REQz--whatsupplementsz%show only results that supplement REQ --alldepsz=check non-explicit dependencies (files and Provides); default --exactdepsz:check dependencies exactly as given, opposite of --alldeps --recursivezOused with --whatrequires, and --requires --resolve, query packages recursively.z --deplistz>show a list of all dependencies and what packages provide themz --resolvez.resolve capabilities to originating package(s)z--treez"show recursive tree for package(s)z--srpmz#operate on corresponding source RPMz--latest-limit latest_limitzOshow N latest packages for a given name.arch (or latest but N if N is negative))rhtyperjz--disable-modular-filteringz-list also packages of inactive module streamsz-iz--info queryinfoFz+show detailed information about the package)rhrkrirjz-lz--list queryfilelistz!show list of files in the packagez-sz--sourcequerysourcerpmzshow package source RPM namez --changelogsquerychangelogszshow changelogs of the packagez--qfz --queryformatrMzfdisplay format for listing packages: "%%{name} %%{version} ...", use --querytags to view full tag list)rhrkrjz --querytagsz-show available tags to use with --queryformatz--nevra store_constzZuse name-epoch:version-release.architecture format for displaying found packages (default))rhconstrirjz--nvrz%{name}-%{version}-%{release}zQuse name-version-release format for displaying found packages (rpm query default)z--envraz.%{epoch}:%{name}-%{version}-%{release}.%{arch}zPuse epoch:name-version-release.architecture format for displaying found packagesz --groupmemberz=Display in which comps groups are presented selected packagesz --duplicates pkgfilter duplicatedz/limit the query to installed duplicate packagesz --duplicatedz --installonly installonlyz1limit the query to installed installonly packagesz --unsatisfied unsatisfiedzClimit the query to installed packages with unsatisfied dependenciesz --locationz5show a location from where packages can be downloadedz5Display capabilities that the package conflicts with.zaDisplay capabilities that the package can depend on, enhance, recommend, suggest, and supplement.z2Display capabilities that the package can enhance.z-Display capabilities provided by the package.z1Display capabilities that the package recommends.z1Display capabilities that the package depends on.zIf the package is not installed display capabilities that it depends on for running %%pre and %%post scriptlets. If the package is installed display capabilities that is depends for %%pre, %%post, %%preun and %%postun.z/Display capabilities that the package suggests.z5Display capabilities that the package can supplement.) rdependsr!rr rr-rr"z--%s packageatr)rhrir{rj --availablez Display only available packages.z Display only installed packages.zLDisplay only packages that are not present in any of available repositories.zQDisplay only packages that provide an upgrade for some already installed package.zIDisplay only packages that can be removed by "{prog} autoremove" command.progz2Display only packages that were installed by user.) installedextrasupgradesunneeded userinstalledlistz --autoremoverz--recentz%Display only recently edited packagesr;*KEYzthe key to search for)rorlrj) add_argumentrrTadd_mutually_exclusive_groupintQFORMAT_DEFAULTargparseSUPPRESSrHformatr util MAIN_PROG)parserwhatrequiresformoutformr|package_attribute help_msgsarghelp_msgr help_list list_grouplist_arghelp_argswitchs r= set_argparserzRepoQueryCommand.set_argparserysD' >@%%k,+,-l+m & o%%mL+,-i+j & lM,Q ]F_ `K 1 LDN OK !"#S!T  VH\!"#G!H  JH\!"#H!I  K,>"#%J#K  L 9,!"#R!S  U557T8+%*<"#$Q"R  T T8/%*<"#$G"H  J T:4D%*<"#$B"C  E ^2C%*<"#$D"E  G V_=%4"#%L#M  N M,!"$3"4  5 Y]/$1"#%J#K  L W=@_$1;P9Q  R Y]#S$1"#%@#A  B _\ KIM N779 ~K%1-$%'1%2  3 ~K%1-$,$5$5  7 [%2=$%&Y$Z  \ [%2=$%&k$l  n L!"#Z![  ]"??ARS56NOIJPQNO ghLMUV  '__.MCCfgmn%&&,f#((2D2Df&EST  88: "+//"3 Hhh&F  # #F *2 $ C#4   8#4#4  6 J|!DkBlmEe!"#:!;  =r?c|jjs:|jjtj tj yy)N)stdoutstderr)rbquietcliredirect_loggerloggingWARNINGINFOselfs r= pre_configurezRepoQueryCommand.pre_configures1yy HH $ $GOOGLL $ Qr?c|jjs|jj|jj}|jj r[|jj r4|jjdd|jj znd|j_|jjry|jjr>|jj s(tjjtd|jjr|jjr|jjddt|jj |jj dk(xr|jjgs(tjjtd|jj"s|jjr|jj sq|jj$s[tjjtd j'|jj"rd d|jj(r$|j*j,j/|jj0d vr|jj2d k7s|jj4rd |_d |_|jj:rd |_|jj>sI|jj@s3tjBjE|jjFr+|j*jHxjJdgz c_%yy)Nz --obsoletes--rzOption '--resolve' has to be used together with one of the '--conflicts', '--depends', '--enhances', '--provides', '--recommends', '--requires', '--requires-pre', '--suggests' or '--supplements' optionsrsrrrzOption '--recursive' has to be used with '--whatrequires ' (optionally with '--alldeps', but not with '--exactdeps'), or with '--requires --resolve'z;argument {} requires --whatrequires or --whatdepends optionrq)rrr~T filelists)&rbrrredirect_repo_progressdemandsrr_option_conflict querytagsresolver CliErrorr recursive exactdepsany whatrequiresalldeps whatdependsrsrpmbasereposenable_source_reposrr| availableavailable_repossack_activationry changelogsrwfiler_is_file_pattern_presentr;confoptional_metadata_types)rrs r= configurezRepoQueryCommand.configuresyy HH + + -(("" 99  yy##))- @T@T9TU'2 $ 99    99  TYY%9%9''""\]^ ^ 99  yy""))-G ..--;Q @Q@QTUgg&&5677 99   3 3II**dii.C.Cgg&&SZZ'+yy'8'8 MNOO>KMNOO 99>> IIOO / / 1 IINN"@ @ 99  - /DII4G4G&*G #"& 99 $ $!%G  99 " "diinn8Y8YZ^ZcZcZgZg8h IINN 2 2{m C 29ir?c |jrg}|jdt|z|jD]z}|d}|jd|j t ddt jj|ddt jj|dd|dj|S t|}|jr%|jjj|S|jrC|j }|s3t#t d j%|t&j( |S|j*r |j,St/|j0j%|S#t2$r-}t j4j7t|d}~wwxYw) NzChangelog for %s timestampz* z %a %b %d %Y authorrDtextzPackage {} contains no files)r)ryappendstrrstrftimerr i18nucdjoinPackageWrapperrvroutput infoOutputrwfilesprintrsysrrxr#rRrMAttributeError exceptionsError) rrbpkgoutchlogdtpofilelistes r=build_format_fnz RepoQueryCommand.build_format_fnMs`   C JJ)CH4 5;' /1kk!M:J.K.1hhll5?.K.1hhll5=.I K L(99S> ! /$B~~yy''22377##88!:;BB3GcjjY$$||#$T%5%56==bAA /..&&s1v. . /s+;FAFF*#F G(F??Gc B|jjjjd}|D]e}|j |j t jj|j|jjdd}g|S)NTemptyF) with_provideswith_filenames) rsackrcr`union intersectionr subjectSubjectget_best_query)rnevras base_queryresolved_nevras_querynevras r=_resolve_nevrasz RepoQueryCommand._resolve_nevrasqs $  4 4 6 > >T > JE$9$?$? @W@W ##E*99IINN"'#(:A% !%$r?Nc|r|n|}|j|}|j|}|j|}|r|j|||}|S)Nrdone)filter differencer_do_recursive_deps)rquery_in query_selectrquery_requireds r=rz#RepoQueryCommand._do_recursive_deps~sZt!,?%006 ##D) **8\*MD r?c|j||}|j|}|j|j|}|r|j|j|}|j|j|}|j|j|}|j|j|}|j|j|}|j|j|}|j|j| }|j|j| }|jjr|j ||}|S) Nrequires__globrrecommends__globenhances__globsupplements__globsuggests__globr r!r"r)rrrrbrr)rnamesrc all_dep_typesrdepquerys r= by_all_depszRepoQueryCommand.by_all_depss8 $ 4 4UE B<>%,,8M,"NO   ~~ellEl&JKH~~ell%l&HIH~~ellUl&KLH~~ell%l&HIH~~ell>Sl&TUH~~ell?A#||D) 66xTUT[T[\`Ta6bDwwt}r?cg}g}|jjD]j}tjjj |d}|j dr|j |R|sU|dvsZ|j |l|r<|jj|d|jjj}|S)Nrz.rpm)httpftprhttpsF)strictprogress) rbr;r pycompurlparseendswithrradd_remote_rpmsrr)rrpmnamesremote_packagesr;schemess r=_add_add_remote_packagesz)RepoQueryCommand._add_add_remote_packagess99==Cjj))2237:G||F#$W(HH$ ! "ii771A1A1J1J8LOr?c ~$|jjr(tdjt t y|j j|j|jjj|jjrtjntj}|jjr.|j!}ddi}|jj"|j$vr,|j$|jj"g|d<d|d<g}|j'd}|rC|j)|jjjj+| }|jjD]X}|j)t-j.j1|d j2|jjfd |i|}Z|}|jj4r/|j7|jj8j4}|jj:r|jj<r3|jj<d k7rt|j j>jAt,jBjEtGd jIdd|jj<z|jj<dk(r0|jK|jjLjN}nT|jj<r>|jj<dk7r%tQ||jj<}|jjRdk(r<|jjU|}|jW|jY}n]|jjRdk(r|jjU|}n'|jjRdk(rt,jj[|j}|j]|jj8j^|jj8j`t,jbje|} d| _3| jid} | s6tt,jjjm| joy|jj<s|j;}|jq|j|}|} |jjrr&|j+|jjr|jjtrk|j'|jjt} | j)|j'|jw|jjt|}|jjxr&|j+|jjx|jjzrQ|j'|jjz} | r| }n&|j+|jjz|jj|rc|jj~r'|j+|jj|n&|j|jj||}|jjr8|jj~r|j'|jj}|j)|j'|jj}|j)|j'|jj}|j)|j'|jj}|j)|j'|jj}n'|j|jj|d}|jjrk|j'|jj} | j)|j'|jw|jj| }|jjrk|j'|jj} | j)|j'|jw|jj|!}|jjrk|j'|jj} | j)|j'|jw|jj|"}|jjrk|j'|jj} | j)|j'|jw|jj|#}|jjr%|j|jj}|jj|d$}|jjrg}|D]d}|j}||jjjj+||jd%&}||jiz }f|jjjj+| }|jjr|jj|sh|jjd'vrPt,jBjEtGd(jIt,jjj)|j|| |jyt}|jjrut} |jiD]}|jj<dk7s&|jjLj|sB|jjd*k(rP| j|j|jz|jz|jz|jz| jtQ|t|jj|jjrG|jj<d k(r?|jq|j|jjj}nL|jq|j|jjjj;}|j'| +}|jjr!|j)|j||}t}|jjiD]-}|j|j|j|/n|jd,| Dn|jjr;|jiD]&}|j}||j|(n|jjrg}t t|jiD]}|jj<dk7s&|jjLj|sCg}|jd-t|zt |jDcgc] }t|c}D]}|jd.|zt,j.j1|}|j3|jj}|jq|j|j;}|jjs|j}|jiD]}|jd/t|z!|jdj||rtd0j|y|jjr|j|y|jiD]l}|jj<dk7s&|jjLj|sB|j|j|j|n|r^|jjr$td0jt |ytdjt |yycc}w)1NrD)flagsrFformsrTrr) ignore_casercrz)argument {}: not allowed with argument {}rrrrr}r~r)verify) file__glob)conflicts__glob)r)r)provides__globrrrrr r r rr)warningsrc)r rr )rr!rrr rrr"zNo valid switch specified usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree] description: For the given packages print a tree of the packages.rrrc32K|]}t|ywN)r).0rels r= z'RepoQueryCommand.run..`s5CHsz package: z dependency: z provider: z )grbrrrsortedr8r _populate_update_security_filterrrrcdisable_modular_filteringhawkeyIGNORE_MODULAR_EXCLUDESAPPLY_EXCLUDESr;r'command nevra_formsrrr`r rrrrecent_recentrrr optparser print_usagerrrr _unneededhistoryswdbgetattrr|_get_installonly_queryrr} rpmdb_sack _configureinstallonlypkgsinstallonly_limitgoalGoalprotect_running_kernelrr_format_resolve_problems problem_rulesrdr whatconflictsr whatobsoletes whatprovidesrrrrwhatrecommends whatenhanceswhatsupplements whatsuggestsrtlatest_merge_update_filtersrrrtreerr tree_seedsetuser_installedupdaterr!rr"r rGrrraddrlocationremote_locationdeplistrrverbose groupmember_group_member_reportrv)rqr%kwarkpkgs query_resultsr;r~rpmdbrMsolvedorqueryrelsquery_for_provide dependsquerypkg_listrsrcname tmp_queryrcrradeplist_outputreqrproviders r=rzRepoQueryCommand.runs 99   $))F#567 8  11$))< IINN yy2200&& !  99==";;=O$e,Eyy  D$4$44"&"2"24993D3D"E!Fg*/&'DHH4H0M - 3 3IINN((*222G!I yy}} - 3 3KK'''>MM :./:38:!; %A 99   $))..//0A 99  yy~~$))..K"?dhh((4467nn**1-X-_-_!4$))..#8.:,;<< YY^^z ) DII--223A YY^^ / A*499>>*,A 99  , .))::1=K [)446A YY M 1 003A YY M 1HH'' 2E   TYY^^;;TYY^^=]=] ^88=='D*/D 'XXTX*Fchh778J8J8LMN  A  ! !$))Q / 99>> III 0 99 " "88DII,C,C8DD 188d.B.B499CZCZ\].^8_`A 99 " " II 7 7I 8 99 ! ! ! 8N8N O  % TYY%;%; < 99 ! ! ## )?)? @$$TYY%;%;Q? 99  ## xxtyy7L7LxM +11!((DIILaLa(2bc +11!(($))J_J_(2`a +11!((TYYMbMb(2cd  &&qxxtyy?T?Tx'UV$$TYY%:%:AtD 99 # #88TYY-E-E8FD 188t/C/CDIID\D\^_/`8abA 99 ! !88499+A+A8BD 188T-A-A$))BXBXZ[-\8]^A 99 $ $88dii.G.G8HD 1880D0DTYYE^E^`a0b8cdA 99 ! !88499+A+A8BD 188T-A-A$))BXBXZ[-\8]^A 99 ! !//0A II + +Au + = 99>>H//& $  4 4 6 > >GQTQXQXDI!?!KI /H   $$&..8.>99))dii.B.BK;/;nn**"#$*6sxx/A/A6#B DD NN1gtyy 1 u 99  5Duuw99>>_4 8I8I8X8XY\8]yy++y8 CLL3<<$?#,,$N$'OO%469nn%EF GCdii>R>R1S$TU yy  99>>[0 11$))TYY^^=Q=Q=STE 11$))TYY^^=Q=Q=S=]=]=_`E!LL$L7 99&& );;E9M!OIu$++-113CHHT11$))SAB4 555 YY  uuw..0'HHX&YY  Dc!%%'l+99>>_4 8I8I8X8XY\8]%'N"))+C*@A%3<<&H.DE"%++"5"5c": ' 6 6tyy~~ F $ 5 5 IIu'8!:#yy00$)LLNE(- H*11/CM2QR)4 JKK . 9:,fkk$'(  YY " "  % %a ( uuw99>>_4 8I8I8X8XY\8]HHT11$))SAB yy""fkk&,/0diit -. /'Is:AH: c i}|jjjD]@}t|j Dcgc]}|j c}||j <Bi}g}|jD]}g}|jD]%\}} |j | vs|j|'|rC|jdjt|gjt||jt|g} t|jD]Z\} } | jdjt| t| jdD cgc]} d| z c} z\| jdjt|| rtdj| yycc}wcc} w)N$rDz @)rcompsr6r] packages_iterr idrrHr setdefaultrr8rsplitr)rrcpackage_conf_dictr)rgroup_package_dictpkg_not_in_group group_id_listgroup_idpackage_name_setrr; package_listr{s r=rfz%RepoQueryCommand._group_member_reportsYY__++E*-5CVCVCX.YCXCsxxCX.Y*Z ehh ',99;CM.?.E.E.G**88//!((2/H"--HHVM23R99?C9I ''C1!'(:(@(@(B!C C MM &.ciiX[n8]nn8]1^^_ a"D  dii'7 89:  $))F# $ %/Z 9^s G 1 Gc`|j||}|dk(r t|yd}td|D]}|dz } g}|jD]}|j t |dt t |zdzdj|zdz} t|d z|zdz| zy) Nrrz| [z: z, ]z\_ )rrrangerrrlenr) rlevelrrb pkg_stringspacingxr requirepkgreqstrs r= grow_treezRepoQueryCommand.grow_trees))$4 B; *  q%A v G!,,J OOC O ,'s3x=))D0499X3FFL g+c1F:;r?ctt|jdD]}||dk(r tn|}|jj ds|jj dry|j |||||vsg|j ||jrt||j}i}t|D]\} |jjjj| } | D]!} | || jdz| jz<#^|jjjjt|j} nE|j r|j#|jf|n|j%|j } |j'| |||d z|y) Nc|jSr4)r )ps r=z,RepoQueryCommand.tree_seed..s!&&r?)r;rrpmlibsolvabler.r+rr0)r8r]rr startswithrr`rrGrrrcr`r rvaluesrrrr\) rrcaqueryrbrusedpkgsrstrpkgarr pkgqueryquerypkgs r=r\zRepoQueryCommand.tree_seedsq#eiik*0@AAC ( 0ERKsuXHxx""8,0C0CJ0O NN5#t ,(" S!??$S$//:FB #F #'99>>#7#7#9#A#A4#A#P(0HFNBx}}s2X]]BC)1!, $yy~~335==$ryy{BS=THIMt// fE#]]#((]Cxuqy(K%Br?r4)F)rN)rUrVrW__doc__r; FORM_NAMEFORM_NA FORM_NEVRAr?tuplekeysaliasesrr% staticmethodrdrrrrrrrrr'rrfrr\rYr?r=r[r[fs"("2"2#)>>&,&7&79K"E+*:*:*<$==G67GZ=Z=xR1Df"/H % < F/P%0 <Lr?r[cLeZdZdZdZdZedZedZ edZ y)rz>Wrapper for dnf.package.Package, so we can control formatting.c||_yr4)_pkg)rrs r=__init__zPackageWrapper.__init__s  r?c &t|j|}|yt|trEdj t |Dchc]!}t jj|#c}St jj|Scc}w)Nz(none)rD) rGr isinstancerrr8r rr)rattratrreldeps r= __getattr__zPackageWrapper.__getattr__smdii& ; c4 99V$LfSXX\\&%9$LMN Nxx||C  %Ms&B cn|dkDr0tjj|}|jdSy)Nrz%Y-%m-%d %H:%MrF)datetimeutcfromtimestampr)rrs r=_get_timestampzPackageWrapper._get_timestamps2 q=""33I>B;;/0 0r?cL|j|jjSr4)rrrrs r=rzPackageWrapper.buildtimes""499#6#677r?cL|j|jjSr4)rrrrs r=rzPackageWrapper.installtimes""499#8#899r?N) rUrVrWrrrrrpropertyrrrYr?r=rrsKH!88::r?r)" __future__rrrdnf.i18nrdnf.clirdnf.cli.option_parserrrrrrerr dnf.exceptions dnf.subjectdnf.utilr; getLoggerloggerrcompilerIr8rGrR_SplitCallbackrTCommandr[objectrrYr?r=rs&'%'.    5 !C 23 @"   @,55\ Lx''\ L~:V:r?