lib/rpmcli.h

Go to the documentation of this file.
00001 #ifndef H_RPMCLI
00002 #define H_RPMCLI
00003 
00008 #include "rpmlib.h"
00009 #include "rpmurl.h"
00010 #include "rpmmacro.h"
00011 #include "argv.h"
00012 
00016 /*@-redecl@*/
00017 /*@unchecked@*/
00018 extern int _noDirTokens;
00019 /*@=redecl@*/
00020 
00021 #ifdef __cplusplus
00022 extern "C" {
00023 #endif
00024 
00028 /*@unchecked@*/
00029 extern struct poptOption                rpmcliAllPoptTable[];
00030 
00031 /*@unchecked@*/
00032 extern int ftsOpts;
00033 
00034 /*@unchecked@*/
00035 extern struct poptOption                rpmcliFtsPoptTable[];
00036 
00037 /*@unchecked@*/ /*@observer@*/ /*@null@*/
00038 extern const char * rpmcliPipeOutput;
00039 
00040 /*@unchecked@*/ /*@observer@*/ /*@null@*/
00041 extern const char * rpmcliRcfile;
00042 
00043 /*@unchecked@*/ /*@observer@*/ /*@null@*/
00044 extern const char * rpmcliRootDir;
00045 
00053 /*@null@*/
00054 poptContext
00055 rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable)
00056         /*@globals rpmCLIMacroContext, rpmGlobalMacroContext, h_errno, stderr, 
00057                 fileSystem, internalState @*/
00058         /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext, stderr, 
00059                 fileSystem, internalState @*/;
00060 
00065 /*@mayexit@*/
00066 void rpmcliConfigured(void)
00067         /*@globals rpmCLIMacroContext, rpmGlobalMacroContext, h_errno,
00068                 fileSystem, internalState @*/
00069         /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext,
00070                 fileSystem, internalState @*/;
00071 
00077 poptContext
00078 rpmcliFini(/*@only@*/ /*@null@*/ poptContext optCon)
00079         /*@modifies optCon @*/;
00080 
00084 #define RPMCLI_POPT_NODEPS              -1025
00085 #define RPMCLI_POPT_FORCE               -1026
00086 #define RPMCLI_POPT_NOMD5               -1027
00087 #define RPMCLI_POPT_NOSCRIPTS           -1028
00088 #define RPMCLI_POPT_NOSIGNATURE         -1029
00089 #define RPMCLI_POPT_NODIGEST            -1030
00090 #define RPMCLI_POPT_NOHDRCHK            -1031
00091 #define RPMCLI_POPT_NOCONTEXTS          -1032
00092 
00093 /* ==================================================================== */
00096 
00101 typedef enum rpmQVSources_e {
00102     RPMQV_PACKAGE = 0,  
00103     RPMQV_PATH,         
00104     RPMQV_ALL,          
00105     RPMQV_RPM,          
00106     RPMQV_GROUP,        
00107     RPMQV_WHATPROVIDES, 
00108     RPMQV_WHATREQUIRES, 
00109     RPMQV_TRIGGEREDBY,  
00110     RPMQV_DBOFFSET,     
00111     RPMQV_SPECFILE,     
00112     RPMQV_PKGID,        
00113     RPMQV_HDRID,        
00114     RPMQV_FILEID,       
00115     RPMQV_TID,          
00116     RPMQV_HDLIST,       
00117     RPMQV_FTSWALK       
00118 } rpmQVSources;
00119 
00123 typedef enum rpmVerifyAttrs_e {
00124     RPMVERIFY_NONE      = 0,            
00125     RPMVERIFY_MD5       = (1 << 0),     
00126     RPMVERIFY_FILESIZE  = (1 << 1),     
00127     RPMVERIFY_LINKTO    = (1 << 2),     
00128     RPMVERIFY_USER      = (1 << 3),     
00129     RPMVERIFY_GROUP     = (1 << 4),     
00130     RPMVERIFY_MTIME     = (1 << 5),     
00131     RPMVERIFY_MODE      = (1 << 6),     
00132     RPMVERIFY_RDEV      = (1 << 7),     
00133         /* bits 8-14 unused, reserved for rpmVerifyAttrs */
00134     RPMVERIFY_CONTEXTS  = (1 << 15),    
00135         /* bits 16-22 used in rpmVerifyFlags */
00136         /* bits 23-27 used in rpmQueryFlags */
00137     RPMVERIFY_READLINKFAIL= (1 << 28),  
00138     RPMVERIFY_READFAIL  = (1 << 29),    
00139     RPMVERIFY_LSTATFAIL = (1 << 30),    
00140     RPMVERIFY_LGETFILECONFAIL   = (1 << 31)     
00141 } rpmVerifyAttrs;
00142 #define RPMVERIFY_ALL           ~(RPMVERIFY_NONE)
00143 #define RPMVERIFY_FAILURES      \
00144   (RPMVERIFY_LSTATFAIL|RPMVERIFY_READFAIL|RPMVERIFY_READLINKFAIL|RPMVERIFY_LGETFILECONFAIL)
00145 
00150 typedef enum rpmQueryFlags_e {
00151 /*@-enummemuse@*/
00152     QUERY_FOR_DEFAULT   = 0,            
00153     QUERY_MD5           = (1 << 0),     
00154     QUERY_SIZE          = (1 << 1),     
00155     QUERY_LINKTO        = (1 << 2),     
00156     QUERY_USER          = (1 << 3),     
00157     QUERY_GROUP         = (1 << 4),     
00158     QUERY_MTIME         = (1 << 5),     
00159     QUERY_MODE          = (1 << 6),     
00160     QUERY_RDEV          = (1 << 7),     
00161         /* bits 8-14 unused, reserved for rpmVerifyAttrs */
00162     QUERY_CONTEXTS      = (1 << 15),    
00163     QUERY_FILES         = (1 << 16),    
00164     QUERY_DEPS          = (1 << 17),    
00165     QUERY_SCRIPT        = (1 << 18),    
00166     QUERY_DIGEST        = (1 << 19),    
00167     QUERY_SIGNATURE     = (1 << 20),    
00168     QUERY_PATCHES       = (1 << 21),    
00169     QUERY_HDRCHK        = (1 << 22),    
00170 /*@=enummemuse@*/
00171     QUERY_FOR_LIST      = (1 << 23),    
00172     QUERY_FOR_STATE     = (1 << 24),    
00173     QUERY_FOR_DOCS      = (1 << 25),    
00174     QUERY_FOR_CONFIG    = (1 << 26),    
00175     QUERY_FOR_DUMPFILES = (1 << 27)     
00176 } rpmQueryFlags;
00177 
00178 #define _QUERY_FOR_BITS \
00179    (QUERY_FOR_LIST|QUERY_FOR_STATE|QUERY_FOR_DOCS|QUERY_FOR_CONFIG|\
00180     QUERY_FOR_DUMPFILES)
00181 
00185 /*@unchecked@*/
00186 extern rpmQueryFlags rpmcliQueryFlags;
00187 
00192 typedef enum rpmVerifyFlags_e {
00193 /*@-enummemuse@*/
00194     VERIFY_DEFAULT      = 0,            
00195 /*@=enummemuse@*/
00196     VERIFY_MD5          = (1 << 0),     
00197     VERIFY_SIZE         = (1 << 1),     
00198     VERIFY_LINKTO       = (1 << 2),     
00199     VERIFY_USER         = (1 << 3),     
00200     VERIFY_GROUP        = (1 << 4),     
00201     VERIFY_MTIME        = (1 << 5),     
00202     VERIFY_MODE         = (1 << 6),     
00203     VERIFY_RDEV         = (1 << 7),     
00204         /* bits 8-14 unused, reserved for rpmVerifyAttrs */
00205     VERIFY_CONTEXTS     = (1 << 15),    
00206     VERIFY_FILES        = (1 << 16),    
00207     VERIFY_DEPS         = (1 << 17),    
00208     VERIFY_SCRIPT       = (1 << 18),    
00209     VERIFY_DIGEST       = (1 << 19),    
00210     VERIFY_SIGNATURE    = (1 << 20),    
00211     VERIFY_PATCHES      = (1 << 21),    
00212     VERIFY_HDRCHK       = (1 << 22),    
00213 /*@-enummemuse@*/
00214     VERIFY_FOR_LIST     = (1 << 23),    
00215     VERIFY_FOR_STATE    = (1 << 24),    
00216     VERIFY_FOR_DOCS     = (1 << 25),    
00217     VERIFY_FOR_CONFIG   = (1 << 26),    
00218     VERIFY_FOR_DUMPFILES= (1 << 27)     
00219 /*@=enummemuse@*/
00220         /* bits 28-31 used in rpmVerifyAttrs */
00221 } rpmVerifyFlags;
00222 
00223 #define VERIFY_ATTRS    \
00224   ( VERIFY_MD5 | VERIFY_SIZE | VERIFY_LINKTO | VERIFY_USER | VERIFY_GROUP | \
00225     VERIFY_MTIME | VERIFY_MODE | VERIFY_RDEV | VERIFY_CONTEXTS )
00226 #define VERIFY_ALL      \
00227   ( VERIFY_ATTRS | VERIFY_FILES | VERIFY_DEPS | VERIFY_SCRIPT | VERIFY_DIGEST |\
00228     VERIFY_SIGNATURE | VERIFY_HDRCHK )
00229 
00232 typedef struct rpmQVKArguments_s * QVA_t;
00233 
00242 typedef int (*QVF_t) (QVA_t qva, rpmts ts, Header h)
00243         /*@globals fileSystem @*/
00244         /*@modifies qva, ts, fileSystem @*/;
00245 
00254 typedef int (*QSpecF_t) (rpmts ts, QVA_t qva, const char * arg)
00255         /*@globals rpmGlobalMacroContext, h_errno,
00256                 fileSystem, internalState @*/
00257         /*@modifies ts, qva, rpmGlobalMacroContext,
00258                 fileSystem, internalState @*/;
00259 
00263 struct rpmQVKArguments_s {
00264     rpmQVSources qva_source;    
00265     int         qva_sourceCount;
00266     rpmQueryFlags qva_flags;    
00267     rpmfileAttrs qva_fflags;    
00268 /*@only@*/ /*@null@*/
00269     rpmdbMatchIterator qva_mi;  
00270 /*@refccounted@*/ /*@relnull@*/
00271     rpmgi qva_gi;               
00272     rpmRC qva_rc;               
00274 /*@null@*/
00275     QVF_t qva_showPackage;      
00276 /*@null@*/
00277     QSpecF_t qva_specQuery;     
00278 /*@unused@*/
00279     int qva_verbose;            
00280 /*@only@*/ /*@null@*/
00281     const char * qva_queryFormat;
00282     int sign;                   
00283 /*@observer@*/
00284     const char * passPhrase;    
00285 /*@observer@*/ /*@null@*/
00286     const char * qva_prefix;    
00287     char        qva_mode;
00297     char        qva_char;       
00298 };
00299 
00302 /*@unchecked@*/
00303 extern struct rpmQVKArguments_s rpmQVKArgs;
00304 
00307 /*@unchecked@*/
00308 extern struct poptOption rpmQVSourcePoptTable[];
00309 
00312 /*@unchecked@*/
00313 extern int specedit;
00314 
00317 /*@unchecked@*/
00318 extern struct poptOption rpmQueryPoptTable[];
00319 
00322 /*@unchecked@*/
00323 extern struct poptOption rpmVerifyPoptTable[];
00324 
00336 int rpmcliShowMatches(QVA_t qva, rpmts ts)
00337         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00338         /*@modifies qva, rpmGlobalMacroContext, fileSystem, internalState @*/;
00339 
00344 void rpmDisplayQueryTags(FILE * fp)
00345         /*@globals fileSystem @*/
00346         /*@modifies *fp, fileSystem @*/;
00347 
00360 int rpmQueryVerify(QVA_t qva, rpmts ts, const char * arg)
00361         /*@globals rpmGlobalMacroContext, h_errno,
00362                 fileSystem, internalState @*/
00363         /*@modifies qva, ts, rpmGlobalMacroContext,
00364                 fileSystem, internalState @*/;
00365 
00374 int showQueryPackage(QVA_t qva, rpmts ts, Header h)
00375         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00376         /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/;
00377 
00385 int rpmcliArgIter(rpmts ts, QVA_t qva, /*@null@*/ ARGV_t argv)
00386         /*@globals ftsOpts, rpmGlobalMacroContext, h_errno,
00387                 fileSystem, internalState @*/
00388         /*@modifies ts, qva, ftsOpts, rpmGlobalMacroContext,
00389                 fileSystem, internalState @*/;
00390 
00399 int rpmcliQuery(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
00400         /*@globals rpmGlobalMacroContext, h_errno,
00401                 fileSystem, internalState @*/
00402         /*@modifies ts, qva, rpmGlobalMacroContext,
00403                 fileSystem, internalState @*/;
00404 
00414 /*@-incondefs@*/
00415 int rpmVerifyFile(const rpmts ts, rpmfi fi,
00416                 /*@out@*/ rpmVerifyAttrs * res, rpmVerifyAttrs omitMask)
00417         /*@globals h_errno, fileSystem, internalState @*/
00418         /*@modifies ts, fi, *res, fileSystem, internalState @*/
00419         /*@requires maxSet(res) >= 0 @*/;
00420 /*@=incondefs@*/
00421 
00429 int showVerifyPackage(QVA_t qva, rpmts ts, Header h)
00430         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00431         /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/;
00432 
00441 int rpmVerifySignatures(QVA_t qva, rpmts ts, FD_t fd, const char * fn)
00442         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00443         /*@modifies qva, ts, fd, rpmGlobalMacroContext, h_errno,
00444                 fileSystem, internalState @*/;
00445 
00454 int rpmcliVerify(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
00455         /*@globals rpmGlobalMacroContext, h_errno,
00456                 fileSystem, internalState @*/
00457         /*@modifies ts, qva, rpmGlobalMacroContext,
00458                 fileSystem, internalState @*/;
00459 
00461 /* ==================================================================== */
00464 
00468 struct rpmBuildArguments_s {
00469     rpmQueryFlags qva_flags;    
00470     int buildAmount;            
00471 /*@null@*/
00472     const char * buildRootOverride; 
00473 /*@null@*/
00474     char * targets;             
00475 /*@observer@*/
00476     const char * passPhrase;    
00477 /*@only@*/ /*@null@*/
00478     const char * cookie;        
00479     int force;                  
00480     int noBuild;                
00481     int noDeps;                 
00482     int noLang;                 
00483     int shortCircuit;           
00484     int sign;                   
00485     int useCatalog;             
00486     char buildMode;             
00487     char buildChar;             
00488 /*@observer@*/ /*@null@*/
00489     const char * rootdir;
00490 };
00491 
00494 typedef struct rpmBuildArguments_s *    BTA_t;
00495 
00498 /*@unchecked@*/
00499 extern struct rpmBuildArguments_s       rpmBTArgs;
00500 
00503 /*@unchecked@*/
00504 extern struct poptOption                rpmBuildPoptTable[];
00505 
00507 /* ==================================================================== */
00510 /* --- install/upgrade/erase modes */
00511 
00512 /*@unchecked@*/
00513 extern int rpmcliPackagesTotal;
00514 /*@unchecked@*/
00515 extern int rpmcliHashesCurrent;
00516 /*@unchecked@*/
00517 extern int rpmcliHashesTotal;
00518 /*@unchecked@*/
00519 extern int rpmcliProgressCurrent;
00520 /*@unchecked@*/
00521 extern int rpmcliProgressTotal;
00522 
00537 /*@null@*/
00538 void * rpmShowProgress(/*@null@*/ const void * arg,
00539                 const rpmCallbackType what,
00540                 const unsigned long amount,
00541                 const unsigned long total,
00542                 /*@null@*/ fnpyKey key,
00543                 /*@null@*/ void * data)
00544         /*@globals rpmcliHashesCurrent,
00545                 rpmcliProgressCurrent, rpmcliProgressTotal,
00546                 h_errno, fileSystem, internalState @*/
00547         /*@modifies rpmcliHashesCurrent,
00548                 rpmcliProgressCurrent, rpmcliProgressTotal,
00549                 fileSystem, internalState @*/;
00550 
00559 int rpmInstallSource(rpmts ts, const char * arg,
00560                 /*@null@*/ /*@out@*/ const char ** specFilePtr,
00561                 /*@null@*/ /*@out@*/ const char ** cookie)
00562         /*@globals rpmGlobalMacroContext, h_errno,
00563                 fileSystem, internalState@*/
00564         /*@modifies ts, *specFilePtr, *cookie, rpmGlobalMacroContext,
00565                 fileSystem, internalState @*/;
00566 
00570 struct rpmInstallArguments_s {
00571     rpmtransFlags transFlags;
00572     rpmprobFilterFlags probFilter;
00573     rpmInstallInterfaceFlags installInterfaceFlags;
00574     rpmEraseInterfaceFlags eraseInterfaceFlags;
00575     rpmQueryFlags qva_flags;    
00576     uint_32 rbtid;              
00577     int numRelocations;
00578     int noDeps;
00579     int incldocs;
00580 /*@owned@*/ /*@null@*/
00581     rpmRelocation * relocations;
00582 /*@null@*/
00583     const char * prefix;
00584 /*@observer@*/ /*@null@*/
00585     const char * rootdir;
00586 };
00587 
00595 int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia,
00596                 /*@null@*/ const char ** fileArgv)
00597         /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext, h_errno,
00598                 fileSystem, internalState@*/
00599         /*@modifies ts, ia, rpmcliPackagesTotal, rpmGlobalMacroContext,
00600                 fileSystem, internalState @*/;
00601 
00609 int rpmErase(rpmts ts, struct rpmInstallArguments_s * ia,
00610                 /*@null@*/ const char ** argv)
00611         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00612         /*@modifies ts, ia, rpmGlobalMacroContext,
00613                 fileSystem, internalState @*/;
00614 
00618 /*@-fielduse@*/
00619 typedef /*@abstract@*/ struct IDT_s {
00620     unsigned int instance;      
00621 /*@owned@*/ /*@null@*/
00622     const char * key;           
00623     Header h;                   
00624     union {
00625         uint_32 u32;            
00626     } val;
00627 } * IDT;
00628 /*@=fielduse@*/
00629 
00633 typedef /*@abstract@*/ struct IDTindex_s {
00634     int delta;                  
00635     int size;                   
00636     int alloced;                
00637     int nidt;                   
00638 /*@only@*/ /*@null@*/
00639     IDT idt;                    
00640 } * IDTX;
00641 
00647 /*@null@*/
00648 IDTX IDTXfree(/*@only@*/ /*@null@*/ IDTX idtx)
00649         /*@modifies idtx @*/;
00650 
00655 /*@only@*/
00656 IDTX IDTXnew(void)
00657         /*@*/;
00658 
00665 /*@only@*/ /*@null@*/
00666 IDTX IDTXgrow(/*@only@*/ /*@null@*/ IDTX idtx, int need)
00667         /*@modifies idtx @*/;
00668 
00674 /*@only@*/ /*@null@*/
00675 IDTX IDTXsort(/*@only@*/ /*@null@*/ IDTX idtx)
00676         /*@modifies idtx @*/;
00677 
00684 /*@only@*/ /*@null@*/
00685 IDTX IDTXload(rpmts ts, rpmTag tag)
00686         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00687         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState  @*/;
00688 
00696 /*@only@*/ /*@null@*/
00697 IDTX IDTXglob(rpmts ts, const char * globstr, rpmTag tag)
00698         /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/
00699         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
00700 
00708 int rpmRollback(rpmts ts, struct rpmInstallArguments_s * ia,
00709                 /*@null@*/ const char ** argv)
00710         /*@globals rpmcliPackagesTotal, rpmGlobalMacroContext, h_errno,
00711                 fileSystem, internalState @*/
00712         /*@modifies ts, ia, rpmcliPackagesTotal, rpmGlobalMacroContext,
00713                 fileSystem, internalState @*/;
00714 
00717 /*@unchecked@*/
00718 extern struct rpmInstallArguments_s rpmIArgs;
00719 
00722 /*@unchecked@*/
00723 extern struct poptOption rpmInstallPoptTable[];
00724 
00726 /* ==================================================================== */
00729 /* --- database modes */
00730 
00734 struct rpmDatabaseArguments_s {
00735     int init;                   
00736     int rebuild;                
00737     int verify;                 
00738 };
00739 
00742 /*@unchecked@*/
00743 extern struct rpmDatabaseArguments_s rpmDBArgs;
00744 
00747 /*@unchecked@*/
00748 extern struct poptOption rpmDatabasePoptTable[];
00749 
00751 /* ==================================================================== */
00754 
00763 rpmRC rpmcliImportPubkey(const rpmts ts,
00764                 const unsigned char * pkt, ssize_t pktlen)
00765         /*@globals RPMVERSION, rpmGlobalMacroContext, h_errno,
00766                 fileSystem, internalState @*/
00767         /*@modifies ts, rpmGlobalMacroContext,
00768                 fileSystem, internalState @*/;
00769 
00773 /*@-typeuse@*/
00774 typedef enum rpmSignFlags_e {
00775     RPMSIGN_NONE                = 0,
00776     RPMSIGN_CHK_SIGNATURE       = 'K',  
00777     RPMSIGN_NEW_SIGNATURE       = 'R',  
00778     RPMSIGN_ADD_SIGNATURE       = 'A',  
00779     RPMSIGN_DEL_SIGNATURE       = 'D',  
00780     RPMSIGN_IMPORT_PUBKEY       = 'I',  
00781 } rpmSignFlags;
00782 /*@=typeuse@*/
00783 
00786 /*@unchecked@*/
00787 extern struct poptOption rpmSignPoptTable[];
00788 
00796 int rpmcliSign(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
00797         /*@globals RPMVERSION, rpmGlobalMacroContext, h_errno,
00798                 fileSystem, internalState @*/
00799         /*@modifies ts, qva, rpmGlobalMacroContext,
00800                 fileSystem, internalState @*/;
00801 
00804 #ifdef __cplusplus
00805 }
00806 #endif
00807 
00808 #endif  /* H_RPMCLI */

Generated on Mon Mar 5 14:31:03 2007 for rpm by  doxygen 1.5.1