rpm
4.5
|
00001 #ifndef H_RPMCLI 00002 #define H_RPMCLI 00003 00008 #include "rpmlib.h" 00009 #include "rpmurl.h" 00010 #include "rpmmacro.h" 00011 #include "rpmps.h" 00012 #include "argv.h" 00013 00017 /*@-redecl@*/ 00018 /*@unchecked@*/ 00019 extern int _noDirTokens; 00020 /*@=redecl@*/ 00021 00022 #ifdef __cplusplus 00023 extern "C" { 00024 #endif 00025 00029 /*@unchecked@*/ 00030 extern struct poptOption rpmcliAllPoptTable[]; 00031 00032 /*@unchecked@*/ 00033 extern int ftsOpts; 00034 00035 /*@unchecked@*/ 00036 extern struct poptOption rpmcliFtsPoptTable[]; 00037 00038 /*@unchecked@*/ 00039 extern int global_depFlags; 00040 00041 /*@unchecked@*/ 00042 extern struct poptOption rpmcliDepFlagsPoptTable[]; 00043 00044 /*@unchecked@*/ /*@observer@*/ /*@null@*/ 00045 extern const char * rpmcliPipeOutput; 00046 00047 /*@unchecked@*/ /*@observer@*/ /*@null@*/ 00048 extern const char * rpmcliRcfile; 00049 00050 /*@unchecked@*/ /*@observer@*/ /*@null@*/ 00051 extern const char * rpmcliRootDir; 00052 00053 /*@unchecked@*/ /*@observer@*/ /*@null@*/ 00054 extern const char * rpmcliTargets; 00055 /*@=redecl@*/ 00056 00064 /*@null@*/ 00065 poptContext 00066 rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable) 00067 /*@globals rpmRcfiles, rpmCLIMacroContext, rpmGlobalMacroContext, h_errno, stderr, 00068 fileSystem, internalState @*/ 00069 /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext, stderr, 00070 fileSystem, internalState @*/; 00071 00076 /*@mayexit@*/ 00077 void rpmcliConfigured(void) 00078 /*@globals rpmRcfiles, rpmCLIMacroContext, 00079 rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00080 /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext, 00081 fileSystem, internalState @*/; 00082 00088 poptContext 00089 rpmcliFini(/*@only@*/ /*@null@*/ poptContext optCon) 00090 /*@globals rpmTags, rpmGlobalMacroContext, 00091 fileSystem, internalState @*/ 00092 /*@modifies optCon, rpmTags, rpmGlobalMacroContext, 00093 fileSystem, internalState @*/; 00094 00098 #define RPMCLI_POPT_NODEPS -1025 00099 #define RPMCLI_POPT_FORCE -1026 00100 #define RPMCLI_POPT_NOFDIGESTS -1027 00101 #define RPMCLI_POPT_NOSCRIPTS -1028 00102 #define RPMCLI_POPT_NOSIGNATURE -1029 00103 #define RPMCLI_POPT_NODIGEST -1030 00104 #define RPMCLI_POPT_NOHDRCHK -1031 00105 #define RPMCLI_POPT_NOCONTEXTS -1032 00106 #define RPMCLI_POPT_TARGETPLATFORM -1033 00107 00108 /* ==================================================================== */ 00111 00116 typedef enum rpmQVSources_e { 00117 RPMQV_PACKAGE = 0, 00118 RPMQV_PATH, 00119 RPMQV_ALL, 00120 RPMQV_RPM, 00121 RPMQV_GROUP, 00122 RPMQV_WHATPROVIDES, 00123 RPMQV_WHATREQUIRES, 00124 RPMQV_TRIGGEREDBY, 00125 RPMQV_DBOFFSET, 00126 RPMQV_SPECFILE, 00127 RPMQV_PKGID, 00128 RPMQV_HDRID, 00129 RPMQV_FILEID, 00130 RPMQV_TID, 00131 RPMQV_HDLIST, 00132 RPMQV_FTSWALK, 00133 RPMQV_WHATNEEDS, 00134 RPMQV_SPECSRPM 00135 } rpmQVSources; 00136 00140 typedef enum rpmVerifyAttrs_e { 00141 RPMVERIFY_NONE = 0, 00142 RPMVERIFY_FDIGEST = (1 << 0), 00143 RPMVERIFY_FILESIZE = (1 << 1), 00144 RPMVERIFY_LINKTO = (1 << 2), 00145 RPMVERIFY_USER = (1 << 3), 00146 RPMVERIFY_GROUP = (1 << 4), 00147 RPMVERIFY_MTIME = (1 << 5), 00148 RPMVERIFY_MODE = (1 << 6), 00149 RPMVERIFY_RDEV = (1 << 7), 00150 /* bits 8-14 unused, reserved for rpmVerifyAttrs */ 00151 RPMVERIFY_CONTEXTS = (1 << 15), 00152 /* bits 16-22 used in rpmVerifyFlags */ 00153 /* bits 23-27 used in rpmQueryFlags */ 00154 RPMVERIFY_READLINKFAIL= (1 << 28), 00155 RPMVERIFY_READFAIL = (1 << 29), 00156 RPMVERIFY_LSTATFAIL = (1 << 30), 00157 RPMVERIFY_LGETFILECONFAIL = (1 << 31) 00158 } rpmVerifyAttrs; 00159 #define RPMVERIFY_MD5 RPMVERIFY_FDIGEST 00160 #define RPMVERIFY_ALL ~(RPMVERIFY_NONE) 00161 #define RPMVERIFY_FAILURES \ 00162 (RPMVERIFY_LSTATFAIL|RPMVERIFY_READFAIL|RPMVERIFY_READLINKFAIL|RPMVERIFY_LGETFILECONFAIL) 00163 00168 typedef enum rpmQueryFlags_e { 00169 /*@-enummemuse@*/ 00170 QUERY_FOR_DEFAULT = 0, 00171 QUERY_FDIGEST = (1 << 0), 00172 QUERY_SIZE = (1 << 1), 00173 QUERY_LINKTO = (1 << 2), 00174 QUERY_USER = (1 << 3), 00175 QUERY_GROUP = (1 << 4), 00176 QUERY_MTIME = (1 << 5), 00177 QUERY_MODE = (1 << 6), 00178 QUERY_RDEV = (1 << 7), 00179 /* bits 8-14 unused, reserved for rpmVerifyAttrs */ 00180 QUERY_CONTEXTS = (1 << 15), 00181 QUERY_FILES = (1 << 16), 00182 QUERY_DEPS = (1 << 17), 00183 QUERY_SCRIPT = (1 << 18), 00184 QUERY_DIGEST = (1 << 19), 00185 QUERY_SIGNATURE = (1 << 20), 00186 QUERY_PATCHES = (1 << 21), 00187 QUERY_HDRCHK = (1 << 22), 00188 /*@=enummemuse@*/ 00189 QUERY_FOR_LIST = (1 << 23), 00190 QUERY_FOR_STATE = (1 << 24), 00191 QUERY_FOR_DOCS = (1 << 25), 00192 QUERY_FOR_CONFIG = (1 << 26), 00193 QUERY_FOR_DUMPFILES = (1 << 27) 00194 } rpmQueryFlags; 00195 00196 #define _QUERY_FOR_BITS \ 00197 (QUERY_FOR_LIST|QUERY_FOR_STATE|QUERY_FOR_DOCS|QUERY_FOR_CONFIG|\ 00198 QUERY_FOR_DUMPFILES) 00199 00203 /*@unchecked@*/ 00204 extern rpmQueryFlags rpmcliQueryFlags; 00205 00210 typedef enum rpmVerifyFlags_e { 00211 /*@-enummemuse@*/ 00212 VERIFY_DEFAULT = 0, 00213 /*@=enummemuse@*/ 00214 VERIFY_FDIGEST = (1 << 0), 00215 VERIFY_SIZE = (1 << 1), 00216 VERIFY_LINKTO = (1 << 2), 00217 VERIFY_USER = (1 << 3), 00218 VERIFY_GROUP = (1 << 4), 00219 VERIFY_MTIME = (1 << 5), 00220 VERIFY_MODE = (1 << 6), 00221 VERIFY_RDEV = (1 << 7), 00222 /* bits 8-14 unused, reserved for rpmVerifyAttrs */ 00223 VERIFY_CONTEXTS = (1 << 15), 00224 VERIFY_FILES = (1 << 16), 00225 VERIFY_DEPS = (1 << 17), 00226 VERIFY_SCRIPT = (1 << 18), 00227 VERIFY_DIGEST = (1 << 19), 00228 VERIFY_SIGNATURE = (1 << 20), 00229 VERIFY_PATCHES = (1 << 21), 00230 VERIFY_HDRCHK = (1 << 22), 00231 /*@-enummemuse@*/ 00232 VERIFY_FOR_LIST = (1 << 23), 00233 VERIFY_FOR_STATE = (1 << 24), 00234 VERIFY_FOR_DOCS = (1 << 25), 00235 VERIFY_FOR_CONFIG = (1 << 26), 00236 VERIFY_FOR_DUMPFILES= (1 << 27) 00237 /*@=enummemuse@*/ 00238 /* bits 28-31 used in rpmVerifyAttrs */ 00239 } rpmVerifyFlags; 00240 00241 #define VERIFY_ATTRS \ 00242 ( VERIFY_FDIGEST | VERIFY_SIZE | VERIFY_LINKTO | VERIFY_USER | VERIFY_GROUP | \ 00243 VERIFY_MTIME | VERIFY_MODE | VERIFY_RDEV | VERIFY_CONTEXTS ) 00244 #define VERIFY_ALL \ 00245 ( VERIFY_ATTRS | VERIFY_FILES | VERIFY_DEPS | VERIFY_SCRIPT | VERIFY_DIGEST |\ 00246 VERIFY_SIGNATURE | VERIFY_HDRCHK ) 00247 00250 typedef struct rpmQVKArguments_s * QVA_t; 00251 00260 typedef int (*QVF_t) (QVA_t qva, rpmts ts, Header h) 00261 /*@globals fileSystem @*/ 00262 /*@modifies qva, ts, fileSystem @*/; 00263 00272 typedef int (*QSpecF_t) (rpmts ts, QVA_t qva, const char * arg) 00273 /*@globals rpmGlobalMacroContext, h_errno, 00274 fileSystem, internalState @*/ 00275 /*@modifies ts, qva, rpmGlobalMacroContext, 00276 fileSystem, internalState @*/; 00277 00280 /*@unchecked@*/ 00281 extern struct poptOption rpmQVSourcePoptTable[]; 00282 00285 /*@unchecked@*/ 00286 extern int specedit; 00287 00290 /*@unchecked@*/ 00291 extern struct poptOption rpmQueryPoptTable[]; 00292 00295 /*@unchecked@*/ 00296 extern struct poptOption rpmVerifyPoptTable[]; 00297 00309 int rpmcliShowMatches(QVA_t qva, rpmts ts) 00310 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00311 /*@modifies qva, rpmGlobalMacroContext, fileSystem, internalState @*/; 00312 00317 void rpmDisplayQueryTags(FILE * fp) 00318 /*@globals fileSystem, internalState @*/ 00319 /*@modifies *fp, fileSystem, internalState @*/; 00320 00333 int rpmQueryVerify(QVA_t qva, rpmts ts, const char * arg) 00334 /*@globals rpmGlobalMacroContext, h_errno, 00335 fileSystem, internalState @*/ 00336 /*@modifies qva, ts, rpmGlobalMacroContext, 00337 fileSystem, internalState @*/; 00338 00347 int showQueryPackage(QVA_t qva, rpmts ts, Header h) 00348 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00349 /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/; 00350 00358 int rpmcliArgIter(rpmts ts, QVA_t qva, /*@null@*/ ARGV_t argv) 00359 /*@globals ftsOpts, rpmGlobalMacroContext, h_errno, 00360 fileSystem, internalState @*/ 00361 /*@modifies ts, qva, ftsOpts, rpmGlobalMacroContext, 00362 fileSystem, internalState @*/; 00363 00372 int rpmcliQuery(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv) 00373 /*@globals rpmGlobalMacroContext, h_errno, 00374 fileSystem, internalState @*/ 00375 /*@modifies ts, qva, rpmGlobalMacroContext, 00376 fileSystem, internalState @*/; 00377 00387 /*@-incondefs@*/ 00388 int rpmVerifyFile(const rpmts ts, rpmfi fi, 00389 /*@out@*/ rpmVerifyAttrs * res, rpmVerifyAttrs omitMask) 00390 /*@globals h_errno, fileSystem, internalState @*/ 00391 /*@modifies ts, fi, *res, fileSystem, internalState @*/ 00392 /*@requires maxSet(res) >= 0 @*/; 00393 /*@=incondefs@*/ 00394 00402 int showVerifyPackage(QVA_t qva, rpmts ts, Header h) 00403 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00404 /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/; 00405 00414 int rpmVerifySignatures(QVA_t qva, rpmts ts, FD_t fd, const char * fn) 00415 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00416 /*@modifies qva, ts, fd, rpmGlobalMacroContext, h_errno, 00417 fileSystem, internalState @*/; 00418 00427 int rpmcliVerify(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv) 00428 /*@globals rpmGlobalMacroContext, h_errno, 00429 fileSystem, internalState @*/ 00430 /*@modifies ts, qva, rpmGlobalMacroContext, 00431 fileSystem, internalState @*/; 00432 00434 /* ==================================================================== */ 00437 /* --- install/upgrade/erase modes */ 00438 00442 typedef enum rpmInstallInterfaceFlags_e { 00443 INSTALL_NONE = 0, 00444 INSTALL_PERCENT = (1 << 0), 00445 INSTALL_HASH = (1 << 1), 00446 INSTALL_NODEPS = (1 << 2), 00447 INSTALL_NOORDER = (1 << 3), 00448 INSTALL_LABEL = (1 << 4), 00449 INSTALL_UPGRADE = (1 << 5), 00450 INSTALL_FRESHEN = (1 << 6), 00451 INSTALL_INSTALL = (1 << 7), 00452 INSTALL_ERASE = (1 << 8), 00453 INSTALL_ALLMATCHES = (1 << 9) 00454 } rpmInstallInterfaceFlags; 00455 00456 /*@unchecked@*/ 00457 extern int rpmcliPackagesTotal; 00458 /*@unchecked@*/ 00459 extern int rpmcliHashesCurrent; 00460 /*@unchecked@*/ 00461 extern int rpmcliHashesTotal; 00462 /*@unchecked@*/ 00463 extern unsigned long long rpmcliProgressCurrent; 00464 /*@unchecked@*/ 00465 extern unsigned long long rpmcliProgressTotal; 00466 00483 /*@null@*/ 00484 void * rpmShowProgress(/*@null@*/ const void * arg, 00485 const rpmCallbackType what, 00486 const unsigned long long amount, 00487 const unsigned long long total, 00488 /*@null@*/ fnpyKey key, 00489 /*@null@*/ void * data) 00490 /*@globals rpmcliHashesCurrent, 00491 rpmcliProgressCurrent, rpmcliProgressTotal, 00492 h_errno, fileSystem, internalState @*/ 00493 /*@modifies rpmcliHashesCurrent, 00494 rpmcliProgressCurrent, rpmcliProgressTotal, 00495 fileSystem, internalState @*/; 00496 00505 int rpmInstallSource(rpmts ts, const char * arg, 00506 /*@null@*/ /*@out@*/ const char ** specFilePtr, 00507 /*@null@*/ /*@out@*/ const char ** cookie) 00508 /*@globals rpmGlobalMacroContext, h_errno, 00509 fileSystem, internalState@*/ 00510 /*@modifies ts, *specFilePtr, *cookie, rpmGlobalMacroContext, 00511 fileSystem, internalState @*/; 00512 00521 int rpmInstall(rpmts ts, QVA_t ia, /*@null@*/ const char ** fileArgv) 00522 /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext, h_errno, 00523 fileSystem, internalState@*/ 00524 /*@modifies ts, ia, rpmcliPackagesTotal, rpmGlobalMacroContext, 00525 fileSystem, internalState @*/; 00526 00534 int rpmErase(rpmts ts, QVA_t ia, /*@null@*/ const char ** argv) 00535 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00536 /*@modifies ts, ia, rpmGlobalMacroContext, 00537 fileSystem, internalState @*/; 00538 00542 /*@-fielduse@*/ 00543 typedef /*@abstract@*/ struct IDT_s * IDT; 00544 #if !defined(SWIG) 00545 struct IDT_s { 00546 int done; 00547 unsigned int instance; 00548 /*@owned@*/ /*@null@*/ 00549 const char * key; 00550 Header h; 00551 union { 00552 uint_32 u32; 00553 } val; 00554 }; 00555 #endif 00556 /*@=fielduse@*/ 00557 00561 typedef /*@abstract@*/ struct IDTindex_s * IDTX; 00562 #if !defined(SWIG) 00563 struct IDTindex_s { 00564 int delta; 00565 int size; 00566 int alloced; 00567 int nidt; 00568 /*@only@*/ /*@null@*/ 00569 IDT idt; 00570 }; 00571 #endif 00572 00578 /*@null@*/ 00579 IDTX IDTXfree(/*@only@*/ /*@null@*/ IDTX idtx) 00580 /*@modifies idtx @*/; 00581 00586 /*@only@*/ 00587 IDTX IDTXnew(void) 00588 /*@*/; 00589 00596 /*@only@*/ /*@null@*/ 00597 IDTX IDTXgrow(/*@only@*/ /*@null@*/ IDTX idtx, int need) 00598 /*@modifies idtx @*/; 00599 00605 /*@only@*/ /*@null@*/ 00606 IDTX IDTXsort(/*@only@*/ /*@null@*/ IDTX idtx) 00607 /*@modifies idtx @*/; 00608 00616 /*@only@*/ /*@null@*/ 00617 IDTX IDTXload(rpmts ts, rpmTag tag, uint_32 rbtid) 00618 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00619 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00620 00629 /*@only@*/ /*@null@*/ 00630 IDTX IDTXglob(rpmts ts, const char * globstr, rpmTag tag, uint_32 rbtid) 00631 /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ 00632 /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/; 00633 00641 int rpmRollback(rpmts ts, QVA_t ia, /*@null@*/ const char ** argv) 00642 /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext, h_errno, 00643 fileSystem, internalState @*/ 00644 /*@modifies ts, ia, rpmcliPackagesTotal, rpmGlobalMacroContext, 00645 fileSystem, internalState @*/; 00646 00649 /*@unchecked@*/ 00650 extern struct poptOption rpmInstallPoptTable[]; 00651 00653 /* ==================================================================== */ 00656 00659 /*@unchecked@*/ 00660 extern struct poptOption rpmDatabasePoptTable[]; 00661 00663 /* ==================================================================== */ 00666 00675 rpmRC rpmcliImportPubkey(const rpmts ts, 00676 const unsigned char * pkt, ssize_t pktlen) 00677 /*@globals RPMVERSION, rpmGlobalMacroContext, h_errno, 00678 fileSystem, internalState @*/ 00679 /*@modifies ts, rpmGlobalMacroContext, 00680 fileSystem, internalState @*/; 00681 00685 /*@-typeuse@*/ 00686 #if !defined(SWIG) 00687 typedef enum rpmSignFlags_e { 00688 RPMSIGN_NONE = 0, 00689 RPMSIGN_CHK_SIGNATURE = 'K', 00690 RPMSIGN_NEW_SIGNATURE = 'R', 00691 RPMSIGN_ADD_SIGNATURE = 'A', 00692 RPMSIGN_DEL_SIGNATURE = 'D', 00693 RPMSIGN_IMPORT_PUBKEY = 'I', 00694 } rpmSignFlags; 00695 #endif 00696 /*@=typeuse@*/ 00697 00700 /*@unchecked@*/ 00701 extern struct poptOption rpmSignPoptTable[]; 00702 00710 int rpmcliSign(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv) 00711 /*@globals RPMVERSION, rpmGlobalMacroContext, h_errno, 00712 fileSystem, internalState @*/ 00713 /*@modifies ts, qva, rpmGlobalMacroContext, 00714 fileSystem, internalState @*/; 00715 00721 #if !defined(SWIG) 00722 struct rpmQVKArguments_s { 00723 rpmQVSources qva_source; 00724 int qva_sourceCount; 00725 rpmQueryFlags qva_flags; 00726 rpmfileAttrs qva_fflags; 00727 /*@only@*/ /*@null@*/ 00728 rpmdbMatchIterator qva_mi; 00729 /*@refccounted@*/ /*@relnull@*/ 00730 rpmgi qva_gi; 00731 rpmRC qva_rc; 00733 /*@null@*/ 00734 QVF_t qva_showPackage; 00735 int qva_showOK; 00736 int qva_showFAIL; 00737 /*@null@*/ 00738 QSpecF_t qva_specQuery; 00739 /*@unused@*/ 00740 int qva_verbose; 00741 /*@only@*/ /*@null@*/ 00742 const char * qva_queryFormat; 00743 int sign; 00744 int trust; 00745 /*@observer@*/ 00746 const char * passPhrase; 00747 /*@owned@*/ /*@null@*/ 00748 const char * qva_prefix; 00749 char qva_mode; 00759 char qva_char; 00761 /* install/erase mode arguments */ 00762 rpmdepFlags depFlags; 00763 rpmtransFlags transFlags; 00764 rpmprobFilterFlags probFilter; 00765 rpmInstallInterfaceFlags installInterfaceFlags; 00766 uint_32 arbtid; 00767 uint_32 rbtid; 00768 uint_32 *rbtidExcludes; 00769 int numrbtidExcludes; 00770 int numRelocations; 00771 int noDeps; 00772 int incldocs; 00773 int no_rollback_links; 00774 /*@owned@*/ /*@null@*/ 00775 rpmRelocation relocations; 00776 00777 /* database mode arguments */ 00778 int init; 00779 int rebuild; 00780 int verify; 00782 /* rollback vectors */ 00783 int (*rbCheck) (rpmts ts); 00784 int (*rbOrder) (rpmts ts); 00785 int (*rbRun) (rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet); 00786 }; 00787 #endif 00788 00791 /*@unchecked@*/ 00792 extern struct rpmQVKArguments_s rpmQVKArgs; 00793 00796 /*@unchecked@*/ 00797 extern struct rpmQVKArguments_s rpmIArgs; 00798 00801 /*@unchecked@*/ 00802 extern struct rpmQVKArguments_s rpmDBArgs; 00803 00804 /* ==================================================================== */ 00807 00811 struct rpmBuildArguments_s { 00812 rpmQueryFlags qva_flags; 00813 int buildAmount; 00814 /*@observer@*/ 00815 const char * passPhrase; 00816 /*@only@*/ /*@null@*/ 00817 const char * cookie; 00818 int force; 00819 int noBuild; 00820 int noDeps; 00821 int noLang; 00822 int shortCircuit; 00823 int sign; 00824 int useCatalog; 00825 char buildMode; 00826 char buildChar; 00827 /*@observer@*/ /*@null@*/ 00828 const char * rootdir; 00829 }; 00830 00833 typedef struct rpmBuildArguments_s * BTA_t; 00834 00837 /*@unchecked@*/ 00838 extern struct rpmBuildArguments_s rpmBTArgs; 00839 00842 /*@unchecked@*/ 00843 extern struct poptOption rpmBuildPoptTable[]; 00844 00847 #ifdef __cplusplus 00848 } 00849 #endif 00850 00851 #endif /* H_RPMCLI */