rpm 5.3.7

lib/rpmcli.h

Go to the documentation of this file.
00001 #ifndef H_RPMCLI
00002 #define H_RPMCLI
00003 
00008 #include <popt.h>
00009 #include <rpmmacro.h>
00010 #include <rpmtypes.h>
00011 #include <rpmtag.h>
00012 #include <rpmps.h>
00013 #include <rpmrc.h>
00014 #include <rpmfi.h>      /* XXX rpmfileAttrs */
00015 #include <rpmts.h>      /* XXX rpmdepFlags */
00016 
00021 /*@-redecl@*/
00022 /*@unchecked@*/
00023 extern headerSprintfExtension rpmHeaderFormats;
00024 /*@=redecl@*/
00025 
00029 /*@-redecl@*/
00030 /*@unchecked@*/
00031 extern int _noDirTokens;
00032 /*@=redecl@*/
00033 
00034 #ifdef __cplusplus
00035 extern "C" {
00036 #endif
00037 
00041 /*@unchecked@*/
00042 extern struct poptOption                rpmcliAllPoptTable[];
00043 
00044 /*@unchecked@*/
00045 extern int global_depFlags;
00046 
00047 /*@unchecked@*/
00048 extern struct poptOption                rpmcliDepFlagsPoptTable[];
00049 
00050 /*@unchecked@*/ /*@observer@*/ /*@null@*/
00051 extern const char * rpmcliTargets;
00052 /*@=redecl@*/
00053 
00061 /*@null@*/
00062 poptContext
00063 rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable)
00064         /*@globals rpmCLIMacroContext, rpmGlobalMacroContext, h_errno, stderr, 
00065                 fileSystem, internalState @*/
00066         /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext, stderr, 
00067                 fileSystem, internalState @*/;
00068 
00073 /*@mayexit@*/
00074 void rpmcliConfigured(void)
00075         /*@globals rpmCLIMacroContext,
00076                 rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00077         /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext,
00078                 fileSystem, internalState @*/;
00079 
00085 poptContext
00086 rpmcliFini(/*@only@*/ /*@null@*/ poptContext optCon)
00087         /*@globals rpmTags, rpmGlobalMacroContext,
00088                 fileSystem, internalState @*/
00089         /*@modifies optCon, rpmTags, rpmGlobalMacroContext,
00090                 fileSystem, internalState @*/;
00091 
00095 #define RPMCLI_POPT_NODEPS              -1026
00096 #define RPMCLI_POPT_NOFDIGESTS          -1027
00097 #define RPMCLI_POPT_NOSCRIPTS           -1028
00098 #define RPMCLI_POPT_NOSIGNATURE         -1029
00099 #define RPMCLI_POPT_NODIGEST            -1030
00100 #define RPMCLI_POPT_NOHDRCHK            -1031
00101 #define RPMCLI_POPT_NOCONTEXTS          -1032
00102 #define RPMCLI_POPT_TARGETPLATFORM      -1033
00103 #define RPMCLI_POPT_NOHMACS             -1034
00104 
00105 /* ==================================================================== */
00108 
00113 typedef enum rpmQVSources_e {
00114     RPMQV_PACKAGE = 0,  
00115     RPMQV_PATH,         
00116     RPMQV_ALL,          
00117     RPMQV_RPM,          
00118     RPMQV_GROUP         = RPMTAG_GROUP,
00119     RPMQV_WHATPROVIDES, 
00120     RPMQV_WHATREQUIRES, 
00121     RPMQV_TRIGGEREDBY   = RPMTAG_TRIGGERNAME,
00122     RPMQV_DBOFFSET,     
00123     RPMQV_SPECFILE,     
00124     RPMQV_PKGID,        
00125     RPMQV_HDRID,        
00126     RPMQV_FILEID,       
00127     RPMQV_TID,          
00128     RPMQV_HDLIST,       
00129     RPMQV_FTSWALK,      
00130     RPMQV_WHATNEEDS,    
00131     RPMQV_SPECSRPM,     
00132     RPMQV_SOURCEPKGID,  
00133     RPMQV_WHATCONFLICTS = RPMTAG_CONFLICTNAME,
00134     RPMQV_WHATOBSOLETES = RPMTAG_OBSOLETENAME
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     RPMVERIFY_CAPS      = (1 << 8),     
00151         /* bits 9-13 unused, reserved for rpmVerifyAttrs */
00152     RPMVERIFY_HMAC      = (1 << 14),
00153     RPMVERIFY_CONTEXTS  = (1 << 15),    
00154         /* bits 16-22 used in rpmVerifyFlags */
00155         /* bits 23-27 used in rpmQueryFlags */
00156     RPMVERIFY_READLINKFAIL= (1 << 28),  
00157     RPMVERIFY_READFAIL  = (1 << 29),    
00158     RPMVERIFY_LSTATFAIL = (1 << 30),    
00159     RPMVERIFY_LGETFILECONFAIL   = (1 << 31)     
00160 } rpmVerifyAttrs;
00161 #define RPMVERIFY_ALL           ~(RPMVERIFY_NONE)
00162 #define RPMVERIFY_FAILURES      \
00163   (RPMVERIFY_LSTATFAIL|RPMVERIFY_READFAIL|RPMVERIFY_READLINKFAIL|RPMVERIFY_LGETFILECONFAIL)
00164 
00169 typedef enum rpmQueryFlags_e {
00170 /*@-enummemuse@*/
00171     QUERY_FOR_DEFAULT   = 0,            
00172     QUERY_FDIGEST       = (1 << 0),     
00173     QUERY_SIZE          = (1 << 1),     
00174     QUERY_LINKTO        = (1 << 2),     
00175     QUERY_USER          = (1 << 3),     
00176     QUERY_GROUP         = (1 << 4),     
00177     QUERY_MTIME         = (1 << 5),     
00178     QUERY_MODE          = (1 << 6),     
00179     QUERY_RDEV          = (1 << 7),     
00180     QUERY_CAPS          = (1 << 8),     
00181         /* bits 9-13 unused, reserved for rpmVerifyAttrs */
00182     QUERY_HMAC          = (1 << 14),
00183     QUERY_CONTEXTS      = (1 << 15),    
00184     QUERY_FILES         = (1 << 16),    
00185     QUERY_DEPS          = (1 << 17),    
00186     QUERY_SCRIPT        = (1 << 18),    
00187     QUERY_DIGEST        = (1 << 19),    
00188     QUERY_SIGNATURE     = (1 << 20),    
00189     QUERY_PATCHES       = (1 << 21),    
00190     QUERY_HDRCHK        = (1 << 22),    
00191 /*@=enummemuse@*/
00192     QUERY_FOR_LIST      = (1 << 23),    
00193     QUERY_FOR_STATE     = (1 << 24),    
00194     QUERY_FOR_DOCS      = (1 << 25),    
00195     QUERY_FOR_CONFIG    = (1 << 26),    
00196     QUERY_FOR_DUMPFILES = (1 << 27)     
00197 } rpmQueryFlags;
00198 
00199 #define _QUERY_FOR_BITS \
00200    (QUERY_FOR_LIST|QUERY_FOR_STATE|QUERY_FOR_DOCS|QUERY_FOR_CONFIG|\
00201     QUERY_FOR_DUMPFILES)
00202 
00206 /*@unchecked@*/
00207 extern rpmQueryFlags rpmcliQueryFlags;
00208 
00213 typedef enum rpmVerifyFlags_e {
00214 /*@-enummemuse@*/
00215     VERIFY_DEFAULT      = 0,            
00216 /*@=enummemuse@*/
00217     VERIFY_FDIGEST      = (1 << 0),     
00218     VERIFY_SIZE         = (1 << 1),     
00219     VERIFY_LINKTO       = (1 << 2),     
00220     VERIFY_USER         = (1 << 3),     
00221     VERIFY_GROUP        = (1 << 4),     
00222     VERIFY_MTIME        = (1 << 5),     
00223     VERIFY_MODE         = (1 << 6),     
00224     VERIFY_RDEV         = (1 << 7),     
00225     VERIFY_CAPS         = (1 << 8),     
00226         /* bits 9-13 unused, reserved for rpmVerifyAttrs */
00227     VERIFY_HMAC         = (1 << 14),
00228     VERIFY_CONTEXTS     = (1 << 15),    
00229     VERIFY_FILES        = (1 << 16),    
00230     VERIFY_DEPS         = (1 << 17),    
00231     VERIFY_SCRIPT       = (1 << 18),    
00232     VERIFY_DIGEST       = (1 << 19),    
00233     VERIFY_SIGNATURE    = (1 << 20),    
00234     VERIFY_PATCHES      = (1 << 21),    
00235     VERIFY_HDRCHK       = (1 << 22),    
00236 /*@-enummemuse@*/
00237     VERIFY_FOR_LIST     = (1 << 23),    
00238     VERIFY_FOR_STATE    = (1 << 24),    
00239     VERIFY_FOR_DOCS     = (1 << 25),    
00240     VERIFY_FOR_CONFIG   = (1 << 26),    
00241     VERIFY_FOR_DUMPFILES= (1 << 27)     
00242 /*@=enummemuse@*/
00243         /* bits 28-31 used in rpmVerifyAttrs */
00244 } rpmVerifyFlags;
00245 
00246 #define VERIFY_ATTRS    \
00247   ( VERIFY_FDIGEST | VERIFY_SIZE | VERIFY_LINKTO | VERIFY_USER | VERIFY_GROUP | \
00248     VERIFY_MTIME | VERIFY_MODE | VERIFY_RDEV | VERIFY_HMAC | VERIFY_CONTEXTS )
00249 #define VERIFY_ALL      \
00250   ( VERIFY_ATTRS | VERIFY_FILES | VERIFY_DEPS | VERIFY_SCRIPT | VERIFY_DIGEST |\
00251     VERIFY_SIGNATURE | VERIFY_HDRCHK )
00252 
00255 typedef struct rpmQVKArguments_s * QVA_t;
00256 
00265 typedef int (*QVF_t) (QVA_t qva, rpmts ts, Header h)
00266         /*@globals fileSystem @*/
00267         /*@modifies qva, ts, fileSystem @*/;
00268 
00277 typedef int (*QSpecF_t) (rpmts ts, QVA_t qva, const char * arg)
00278         /*@globals rpmGlobalMacroContext, h_errno,
00279                 fileSystem, internalState @*/
00280         /*@modifies ts, qva, rpmGlobalMacroContext,
00281                 fileSystem, internalState @*/;
00282 
00285 /*@unchecked@*/
00286 extern struct poptOption rpmQVSourcePoptTable[];
00287 
00290 /*@unchecked@*/
00291 extern int specedit;
00292 
00295 /*@unchecked@*/
00296 extern struct poptOption rpmQueryPoptTable[];
00297 
00300 /*@unchecked@*/
00301 extern struct poptOption rpmVerifyPoptTable[];
00302 
00315 int rpmQueryVerify(QVA_t qva, rpmts ts, const char * arg)
00316         /*@globals rpmGlobalMacroContext, h_errno,
00317                 fileSystem, internalState @*/
00318         /*@modifies qva, ts, rpmGlobalMacroContext,
00319                 fileSystem, internalState @*/;
00320 
00329 int showQueryPackage(QVA_t qva, rpmts ts, Header h)
00330         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00331         /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/;
00332 
00340 int rpmcliArgIter(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
00341         /*@globals rpmGlobalMacroContext, h_errno,
00342                 fileSystem, internalState @*/
00343         /*@modifies ts, qva, rpmGlobalMacroContext,
00344                 fileSystem, internalState @*/;
00345 
00354 int rpmcliQuery(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
00355         /*@globals rpmGlobalMacroContext, h_errno,
00356                 fileSystem, internalState @*/
00357         /*@modifies ts, qva, rpmGlobalMacroContext,
00358                 fileSystem, internalState @*/;
00359 
00367 int showVerifyPackage(QVA_t qva, rpmts ts, Header h)
00368         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00369         /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/;
00370 
00379 int rpmVerifySignatures(QVA_t qva, rpmts ts, void * _fd, const char * fn)
00380         /*@globals fileSystem, internalState @*/
00381         /*@modifies qva, ts, fileSystem, internalState @*/;
00382 
00391 int rpmcliVerify(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
00392         /*@globals rpmGlobalMacroContext, h_errno,
00393                 fileSystem, internalState @*/
00394         /*@modifies ts, qva, rpmGlobalMacroContext,
00395                 fileSystem, internalState @*/;
00396 
00398 /* ==================================================================== */
00401 /* --- install/upgrade/erase modes */
00402 
00406 typedef enum rpmInstallInterfaceFlags_e {
00407     INSTALL_NONE        = 0,
00408     INSTALL_PERCENT     = (1 <<  0),    
00409     INSTALL_HASH        = (1 <<  1),    
00410     INSTALL_NODEPS      = (1 <<  2),    
00411     INSTALL_NOORDER     = (1 <<  3),    
00412     INSTALL_LABEL       = (1 <<  4),    
00413     INSTALL_UPGRADE     = (1 <<  5),    
00414     INSTALL_FRESHEN     = (1 <<  6),    
00415     INSTALL_INSTALL     = (1 <<  7),    
00416     INSTALL_ERASE       = (1 <<  8),    
00417     INSTALL_ALLMATCHES  = (1 <<  9)     
00418 } rpmInstallInterfaceFlags;
00419 
00420 /*@-redecl@*/
00421 /*@unchecked@*/
00422 extern int rpmcliPackagesTotal;
00423 /*@=redecl@*/
00424 /*@unchecked@*/
00425 extern int rpmcliHashesCurrent;
00426 /*@unchecked@*/
00427 extern int rpmcliHashesTotal;
00428 /*@unchecked@*/
00429 extern rpmuint64_t rpmcliProgressCurrent;
00430 /*@unchecked@*/
00431 extern rpmuint64_t rpmcliProgressTotal;
00432 
00449 /*@null@*/
00450 void * rpmShowProgress(/*@null@*/ const void * arg,
00451                 const rpmCallbackType what,
00452                 const rpmuint64_t amount,
00453                 const rpmuint64_t total,
00454                 /*@null@*/ fnpyKey key,
00455                 /*@null@*/ void * data)
00456         /*@globals rpmcliHashesCurrent,
00457                 rpmcliProgressCurrent, rpmcliProgressTotal,
00458                 h_errno, rpmGlobalMacroContext, fileSystem, internalState @*/
00459         /*@modifies arg, rpmcliHashesCurrent,
00460                 rpmcliProgressCurrent, rpmcliProgressTotal,
00461                 rpmGlobalMacroContext, fileSystem, internalState @*/;
00462 
00471 int rpmInstallSource(rpmts ts, const char * arg,
00472                 /*@null@*/ /*@out@*/ const char ** specFilePtr,
00473                 /*@null@*/ /*@out@*/ const char ** cookie)
00474         /*@globals rpmGlobalMacroContext, h_errno,
00475                 fileSystem, internalState@*/
00476         /*@modifies ts, *specFilePtr, *cookie, rpmGlobalMacroContext,
00477                 fileSystem, internalState @*/;
00478 
00486 int rpmcliInstallProblems(rpmts ts, /*@null@*/ const char * msg, int rc)
00487         /*@globals fileSystem, internalState @*/
00488         /*@modifies ts, fileSystem, internalState @*/;
00489 
00495 int rpmcliInstallSuggests(rpmts ts)
00496         /*@globals internalState @*/
00497         /*@modifies ts, internalState @*/;
00498 
00504 int rpmcliInstallCheck(rpmts ts)
00505         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00506         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00507 
00513 int rpmcliInstallOrder(rpmts ts)
00514         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00515         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00516 
00524 int rpmcliInstallRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
00525         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00526         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00527 
00536 int rpmcliInstall(rpmts ts, QVA_t ia, /*@null@*/ const char ** argv)
00537         /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext, h_errno,
00538                 fileSystem, internalState@*/
00539         /*@modifies ts, ia, rpmcliPackagesTotal, rpmGlobalMacroContext,
00540                 fileSystem, internalState @*/;
00541 
00549 int rpmErase(rpmts ts, QVA_t ia, /*@null@*/ const char ** argv)
00550         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00551         /*@modifies ts, ia, rpmGlobalMacroContext,
00552                 fileSystem, internalState @*/;
00553 
00556 /*@unchecked@*/
00557 extern struct poptOption rpmInstallPoptTable[];
00558 
00560 /* ==================================================================== */
00563 
00566 /*@unchecked@*/
00567 extern struct poptOption rpmDatabasePoptTable[];
00568 
00570 /* ==================================================================== */
00573 
00582 rpmRC rpmcliImportPubkey(const rpmts ts,
00583                 const unsigned char * pkt, ssize_t pktlen)
00584         /*@globals rpmGlobalMacroContext, h_errno,
00585                 fileSystem, internalState @*/
00586         /*@modifies ts, rpmGlobalMacroContext,
00587                 fileSystem, internalState @*/;
00588 
00592 /*@-typeuse@*/
00593 #if !defined(SWIG)
00594 typedef enum rpmSignFlags_e {
00595     RPMSIGN_NONE                = 0,
00596     RPMSIGN_CHK_SIGNATURE       = 'K',  
00597     RPMSIGN_NEW_SIGNATURE       = 'R',  
00598     RPMSIGN_ADD_SIGNATURE       = 'A',  
00599     RPMSIGN_DEL_SIGNATURE       = 'D',  
00600     RPMSIGN_IMPORT_PUBKEY       = 'I',  
00601 } rpmSignFlags;
00602 #endif
00603 /*@=typeuse@*/
00604 
00607 /*@unchecked@*/
00608 extern struct poptOption rpmSignPoptTable[];
00609 
00617 int rpmcliSign(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
00618         /*@globals rpmGlobalMacroContext, h_errno,
00619                 fileSystem, internalState @*/
00620         /*@modifies ts, qva, rpmGlobalMacroContext,
00621                 fileSystem, internalState @*/;
00622 
00628 #if !defined(SWIG)
00629 struct rpmQVKArguments_s {
00630     rpmQVSources qva_source;    
00631     int         qva_sourceCount;
00632     rpmQueryFlags qva_flags;    
00633     rpmfileAttrs qva_fflags;    
00634 /*@only@*/ /*@null@*/
00635     rpmmi qva_mi;               
00636 /*@refccounted@*/ /*@relnull@*/
00637     rpmgi qva_gi;               
00638     rpmRC qva_rc;               
00640 /*@null@*/
00641     QVF_t qva_showPackage;      
00642     int qva_showOK;             
00643     int qva_showFAIL;           
00644 /*@null@*/
00645     QSpecF_t qva_specQuery;     
00646 /*@unused@*/
00647     int qva_verbose;            
00648 /*@only@*/ /*@null@*/
00649     const char * qva_queryFormat;
00650     int sign;                   
00651     int nopassword;
00652     int trust;                  
00653 /*@observer@*/
00654     const char * passPhrase;    
00655 /*@owned@*/ /*@null@*/
00656     const char * qva_prefix;    
00657     char qva_mode;
00667     char qva_char;              
00669     /* install/erase mode arguments */
00670     rpmdepFlags depFlags;
00671     rpmtransFlags transFlags;
00672     rpmprobFilterFlags probFilter;
00673     rpmInstallInterfaceFlags installInterfaceFlags;
00674     rpmuint32_t arbtid;         
00675     rpmuint32_t rbtid;          
00676     rpmuint32_t *rbtidExcludes; 
00677     int numrbtidExcludes;       
00678     int noDeps;
00679     int incldocs;
00680     int no_rollback_links;
00681 /*@owned@*/ /*@relnull@*/
00682     rpmRelocation relocations;
00683     int nrelocations;
00684 
00685     /* database mode arguments */
00686     int rebuild;                
00688     /* rollback vectors */
00689     int (*rbCheck) (rpmts ts);
00690     int (*rbOrder) (rpmts ts);
00691     int (*rbRun) (rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet);
00692 };
00693 #endif
00694 
00697 /*@unchecked@*/
00698 extern struct rpmQVKArguments_s rpmQVKArgs;
00699 
00702 /*@unchecked@*/
00703 extern struct rpmQVKArguments_s rpmIArgs;
00704 
00707 /*@unchecked@*/
00708 extern struct rpmQVKArguments_s rpmDBArgs;
00709 
00710 /* ==================================================================== */
00713 
00717 struct rpmBuildArguments_s {
00718     rpmQueryFlags qva_flags;    
00719     int buildAmount;            
00720 /*@observer@*/
00721     const char * passPhrase;    
00722 /*@only@*/ /*@null@*/
00723     const char * cookie;        
00724     const char * specFile;      
00725     int noBuild;                
00726     int noDeps;                 
00727     int noLang;                 
00728     int shortCircuit;           
00729     int sign;                   
00730     int nopassword;
00731     char buildMode;             
00732     char buildChar;             
00733 /*@observer@*/ /*@null@*/
00734     const char * rootdir;
00735 };
00736 
00739 typedef struct rpmBuildArguments_s *    BTA_t;
00740 
00743 /*@unchecked@*/
00744 extern struct rpmBuildArguments_s       rpmBTArgs;
00745 
00748 /*@unchecked@*/
00749 extern struct poptOption                rpmBuildPoptTable[];
00750 
00753 #ifdef __cplusplus
00754 }
00755 #endif
00756 
00757 #endif  /* H_RPMCLI */