00001 #ifndef H_RPMLIB
00002 #define H_RPMLIB
00003
00009
00010
00011
00012
00013 #include "rpmio.h"
00014 #include "rpmmessages.h"
00015 #include "rpmerr.h"
00016 #include "header.h"
00017 #include "popt.h"
00018
00022 typedef enum rpmRC_e {
00023 RPMRC_OK = 0,
00024 RPMRC_BADMAGIC = 1,
00025 RPMRC_FAIL = 2,
00026 RPMRC_BADSIZE = 3,
00027 RPMRC_SHORTREAD = 4,
00028 } rpmRC;
00029
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033
00041 rpmRC rpmReadPackageInfo(FD_t fd, Header * signatures,
00042 Header * hdr)
00043 ;
00044
00054 rpmRC rpmReadPackageHeader(FD_t fd, Header * hdr,
00055 int * isSource, int * major,
00056 int * minor)
00057 ;
00058
00067 int headerNVR(Header h, const char **np, const char **vp,
00068 const char **rp) ;
00069
00075 void headerMergeLegacySigs(Header h, const Header sig)
00076 ;
00077
00083 Header headerRegenSigHeader(const Header h) ;
00084
00098 void rpmBuildFileList(Header h, const char *** fileListPtr,
00099 int * fileCountPtr)
00100 ;
00101
00115 int rpmHeaderGetEntry(Header h, int_32 tag, int_32 *type,
00116 void **p, int_32 *c)
00117 ;
00118
00134 int rpmPackageGetEntry(void *leadp, Header sigs, Header h,
00135 int_32 tag, int_32 *type, void **p, int_32 *c)
00136 ;
00137
00141 extern const struct headerTagTableEntry rpmTagTable[];
00142
00146 extern const int rpmTagTableSize;
00147
00152 extern const struct headerSprintfExtension rpmHeaderFormats[];
00153
00157 #define RPMDBI_PACKAGES 0
00158 #define RPMDBI_DEPENDS 1
00159 #define RPMDBI_LABEL 2
00160 #define RPMDBI_ADDED 3
00161 #define RPMDBI_REMOVED 4
00162 #define RPMDBI_AVAILABLE 5
00168 typedef enum rpmTag_e {
00169
00170 RPMTAG_HEADERIMAGE = HEADER_IMAGE,
00171 RPMTAG_HEADERSIGNATURES = HEADER_SIGNATURES,
00172 RPMTAG_HEADERIMMUTABLE = HEADER_IMMUTABLE,
00173 RPMTAG_HEADERREGIONS = HEADER_REGIONS,
00175 RPMTAG_HEADERI18NTABLE = HEADER_I18NTABLE,
00177
00178
00179
00180 RPMTAG_SIG_BASE = HEADER_SIGBASE,
00181 RPMTAG_SIGSIZE = RPMTAG_SIG_BASE+1,
00182 RPMTAG_SIGLEMD5_1 = RPMTAG_SIG_BASE+2,
00183 RPMTAG_SIGPGP = RPMTAG_SIG_BASE+3,
00184 RPMTAG_SIGLEMD5_2 = RPMTAG_SIG_BASE+4,
00185 RPMTAG_SIGMD5 = RPMTAG_SIG_BASE+5,
00186 RPMTAG_SIGGPG = RPMTAG_SIG_BASE+6,
00187 RPMTAG_SIGPGP5 = RPMTAG_SIG_BASE+7,
00189 RPMTAG_NAME = 1000,
00190 RPMTAG_VERSION = 1001,
00191 RPMTAG_RELEASE = 1002,
00192 RPMTAG_EPOCH = 1003,
00193 #define RPMTAG_SERIAL RPMTAG_EPOCH
00194 RPMTAG_SUMMARY = 1004,
00195 RPMTAG_DESCRIPTION = 1005,
00196 RPMTAG_BUILDTIME = 1006,
00197 RPMTAG_BUILDHOST = 1007,
00198 RPMTAG_INSTALLTIME = 1008,
00199 RPMTAG_SIZE = 1009,
00200 RPMTAG_DISTRIBUTION = 1010,
00201 RPMTAG_VENDOR = 1011,
00202 RPMTAG_GIF = 1012,
00203 RPMTAG_XPM = 1013,
00204 RPMTAG_LICENSE = 1014,
00205 #define RPMTAG_COPYRIGHT RPMTAG_LICENSE
00206 RPMTAG_PACKAGER = 1015,
00207 RPMTAG_GROUP = 1016,
00208 RPMTAG_CHANGELOG = 1017,
00209 RPMTAG_SOURCE = 1018,
00210 RPMTAG_PATCH = 1019,
00211 RPMTAG_URL = 1020,
00212 RPMTAG_OS = 1021,
00213 RPMTAG_ARCH = 1022,
00214 RPMTAG_PREIN = 1023,
00215 RPMTAG_POSTIN = 1024,
00216 RPMTAG_PREUN = 1025,
00217 RPMTAG_POSTUN = 1026,
00218 RPMTAG_OLDFILENAMES = 1027,
00219 RPMTAG_FILESIZES = 1028,
00220 RPMTAG_FILESTATES = 1029,
00221 RPMTAG_FILEMODES = 1030,
00222 RPMTAG_FILEUIDS = 1031,
00223 RPMTAG_FILEGIDS = 1032,
00224 RPMTAG_FILERDEVS = 1033,
00225 RPMTAG_FILEMTIMES = 1034,
00226 RPMTAG_FILEMD5S = 1035,
00227 RPMTAG_FILELINKTOS = 1036,
00228 RPMTAG_FILEFLAGS = 1037,
00229 RPMTAG_ROOT = 1038,
00230 RPMTAG_FILEUSERNAME = 1039,
00231 RPMTAG_FILEGROUPNAME = 1040,
00232 RPMTAG_EXCLUDE = 1041,
00233 RPMTAG_EXCLUSIVE = 1042,
00234 RPMTAG_ICON = 1043,
00235 RPMTAG_SOURCERPM = 1044,
00236 RPMTAG_FILEVERIFYFLAGS = 1045,
00237 RPMTAG_ARCHIVESIZE = 1046,
00238 RPMTAG_PROVIDENAME = 1047,
00239 #define RPMTAG_PROVIDES RPMTAG_PROVIDENAME
00240 RPMTAG_REQUIREFLAGS = 1048,
00241 RPMTAG_REQUIRENAME = 1049,
00242 RPMTAG_REQUIREVERSION = 1050,
00243 RPMTAG_NOSOURCE = 1051,
00244 RPMTAG_NOPATCH = 1052,
00245 RPMTAG_CONFLICTFLAGS = 1053,
00246 RPMTAG_CONFLICTNAME = 1054,
00247 RPMTAG_CONFLICTVERSION = 1055,
00248 RPMTAG_DEFAULTPREFIX = 1056,
00249 RPMTAG_BUILDROOT = 1057,
00250 RPMTAG_INSTALLPREFIX = 1058,
00251 RPMTAG_EXCLUDEARCH = 1059,
00252 RPMTAG_EXCLUDEOS = 1060,
00253 RPMTAG_EXCLUSIVEARCH = 1061,
00254 RPMTAG_EXCLUSIVEOS = 1062,
00255 RPMTAG_AUTOREQPROV = 1063,
00256 RPMTAG_RPMVERSION = 1064,
00257 RPMTAG_TRIGGERSCRIPTS = 1065,
00258 RPMTAG_TRIGGERNAME = 1066,
00259 RPMTAG_TRIGGERVERSION = 1067,
00260 RPMTAG_TRIGGERFLAGS = 1068,
00261 RPMTAG_TRIGGERINDEX = 1069,
00262 RPMTAG_VERIFYSCRIPT = 1079,
00263 RPMTAG_CHANGELOGTIME = 1080,
00264 RPMTAG_CHANGELOGNAME = 1081,
00265 RPMTAG_CHANGELOGTEXT = 1082,
00266 RPMTAG_BROKENMD5 = 1083,
00267 RPMTAG_PREREQ = 1084,
00268 RPMTAG_PREINPROG = 1085,
00269 RPMTAG_POSTINPROG = 1086,
00270 RPMTAG_PREUNPROG = 1087,
00271 RPMTAG_POSTUNPROG = 1088,
00272 RPMTAG_BUILDARCHS = 1089,
00273 RPMTAG_OBSOLETENAME = 1090,
00274 #define RPMTAG_OBSOLETES RPMTAG_OBSOLETENAME
00275 RPMTAG_VERIFYSCRIPTPROG = 1091,
00276 RPMTAG_TRIGGERSCRIPTPROG = 1092,
00277 RPMTAG_DOCDIR = 1093,
00278 RPMTAG_COOKIE = 1094,
00279 RPMTAG_FILEDEVICES = 1095,
00280 RPMTAG_FILEINODES = 1096,
00281 RPMTAG_FILELANGS = 1097,
00282 RPMTAG_PREFIXES = 1098,
00283 RPMTAG_INSTPREFIXES = 1099,
00284 RPMTAG_TRIGGERIN = 1100,
00285 RPMTAG_TRIGGERUN = 1101,
00286 RPMTAG_TRIGGERPOSTUN = 1102,
00287 RPMTAG_AUTOREQ = 1103,
00288 RPMTAG_AUTOPROV = 1104,
00289 RPMTAG_CAPABILITY = 1105,
00290 RPMTAG_SOURCEPACKAGE = 1106,
00291 RPMTAG_OLDORIGFILENAMES = 1107,
00292 RPMTAG_BUILDPREREQ = 1108,
00293 RPMTAG_BUILDREQUIRES = 1109,
00294 RPMTAG_BUILDCONFLICTS = 1110,
00295 RPMTAG_BUILDMACROS = 1111,
00296 RPMTAG_PROVIDEFLAGS = 1112,
00297 RPMTAG_PROVIDEVERSION = 1113,
00298 RPMTAG_OBSOLETEFLAGS = 1114,
00299 RPMTAG_OBSOLETEVERSION = 1115,
00300 RPMTAG_DIRINDEXES = 1116,
00301 RPMTAG_BASENAMES = 1117,
00302 RPMTAG_DIRNAMES = 1118,
00303 RPMTAG_ORIGDIRINDEXES = 1119,
00304 RPMTAG_ORIGBASENAMES = 1120,
00305 RPMTAG_ORIGDIRNAMES = 1121,
00306 RPMTAG_OPTFLAGS = 1122,
00307 RPMTAG_DISTURL = 1123,
00308 RPMTAG_PAYLOADFORMAT = 1124,
00309 RPMTAG_PAYLOADCOMPRESSOR = 1125,
00310 RPMTAG_PAYLOADFLAGS = 1126,
00311 RPMTAG_MULTILIBS = 1127,
00312 RPMTAG_INSTALLTID = 1128,
00313 RPMTAG_REMOVETID = 1129,
00314 RPMTAG_FIRSTFREE_TAG
00315 } rpmTag;
00316
00317 #define RPMTAG_EXTERNAL_TAG 1000000
00318
00322 typedef enum rpmfileStates_e {
00323 RPMFILE_STATE_NORMAL = 0,
00324 RPMFILE_STATE_REPLACED = 1,
00325 RPMFILE_STATE_NOTINSTALLED = 2,
00326 RPMFILE_STATE_NETSHARED = 3
00327 } rpmfileStates;
00328
00332 typedef enum rpmfileAttrs_e {
00333 RPMFILE_CONFIG = (1 << 0),
00334 RPMFILE_DOC = (1 << 1),
00335 RPMFILE_DONOTUSE = (1 << 2),
00336 RPMFILE_MISSINGOK = (1 << 3),
00337 RPMFILE_NOREPLACE = (1 << 4),
00338 RPMFILE_SPECFILE = (1 << 5),
00339 RPMFILE_GHOST = (1 << 6),
00340 RPMFILE_LICENSE = (1 << 7),
00341 RPMFILE_README = (1 << 8),
00342 RPMFILE_EXCLUDE = (1 << 9)
00343 } rpmfileAttrs;
00344 #define RPMFILE_MULTILIB_SHIFT 9
00345 #define RPMFILE_MULTILIB(N) ((N) << RPMFILE_MULTILIB_SHIFT)
00346 #define RPMFILE_MULTILIB_MASK RPMFILE_MULTILIB(7)
00347
00348
00349 #define isFileMULTILIB(_fflags) ((_fflags) & RPMFILE_MULTILIB_MASK)
00350
00354 typedef enum rpmsenseFlags_e {
00355 RPMSENSE_ANY = 0,
00356 RPMSENSE_SERIAL = (1 << 0),
00357 RPMSENSE_LESS = (1 << 1),
00358 RPMSENSE_GREATER = (1 << 2),
00359 RPMSENSE_EQUAL = (1 << 3),
00360 RPMSENSE_PROVIDES = (1 << 4),
00361 RPMSENSE_CONFLICTS = (1 << 5),
00362 RPMSENSE_PREREQ = (1 << 6),
00363 RPMSENSE_OBSOLETES = (1 << 7),
00364 RPMSENSE_INTERP = (1 << 8),
00365 RPMSENSE_SCRIPT_PRE = ((1 << 9)|RPMSENSE_PREREQ),
00366 RPMSENSE_SCRIPT_POST = ((1 << 10)|RPMSENSE_PREREQ),
00367 RPMSENSE_SCRIPT_PREUN = ((1 << 11)|RPMSENSE_PREREQ),
00368 RPMSENSE_SCRIPT_POSTUN = ((1 << 12)|RPMSENSE_PREREQ),
00369 RPMSENSE_SCRIPT_VERIFY = (1 << 13),
00370 RPMSENSE_FIND_REQUIRES = (1 << 14),
00371 RPMSENSE_FIND_PROVIDES = (1 << 15),
00373 RPMSENSE_TRIGGERIN = (1 << 16),
00374 RPMSENSE_TRIGGERUN = (1 << 17),
00375 RPMSENSE_TRIGGERPOSTUN = (1 << 18),
00376 RPMSENSE_MULTILIB = (1 << 19),
00377 RPMSENSE_SCRIPT_PREP = (1 << 20),
00378 RPMSENSE_SCRIPT_BUILD = (1 << 21),
00379 RPMSENSE_SCRIPT_INSTALL = (1 << 22),
00380 RPMSENSE_SCRIPT_CLEAN = (1 << 23),
00381 RPMSENSE_RPMLIB = ((1 << 24) | RPMSENSE_PREREQ),
00382 RPMSENSE_TRIGGERPREIN = (1 << 25)
00384 } rpmsenseFlags;
00385
00386 #define RPMSENSE_SENSEMASK 15
00387
00388
00389 #define RPMSENSE_TRIGGER \
00390 (RPMSENSE_TRIGGERIN | RPMSENSE_TRIGGERUN | RPMSENSE_TRIGGERPOSTUN)
00391
00392 #define isDependsMULTILIB(_dflags) ((_dflags) & RPMSENSE_MULTILIB)
00393
00394 #define _ALL_REQUIRES_MASK (\
00395 RPMSENSE_INTERP | \
00396 RPMSENSE_SCRIPT_PRE | \
00397 RPMSENSE_SCRIPT_POST | \
00398 RPMSENSE_SCRIPT_PREUN | \
00399 RPMSENSE_SCRIPT_POSTUN | \
00400 RPMSENSE_SCRIPT_VERIFY | \
00401 RPMSENSE_FIND_REQUIRES | \
00402 RPMSENSE_SCRIPT_PREP | \
00403 RPMSENSE_SCRIPT_BUILD | \
00404 RPMSENSE_SCRIPT_INSTALL | \
00405 RPMSENSE_SCRIPT_CLEAN | \
00406 RPMSENSE_RPMLIB )
00407
00408 #define _notpre(_x) ((_x) & ~RPMSENSE_PREREQ)
00409 #define _INSTALL_ONLY_MASK \
00410 _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_RPMLIB)
00411 #define _ERASE_ONLY_MASK \
00412 _notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
00413
00414 #define isLegacyPreReq(_x) (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
00415 #define isInstallPreReq(_x) ((_x) & _INSTALL_ONLY_MASK)
00416 #define isErasePreReq(_x) ((_x) & _ERASE_ONLY_MASK)
00417
00418
00421
00422
00423 #define RPMVAR_OPTFLAGS 3
00424 #define RPMVAR_PROVIDES 38
00425 #define RPMVAR_INCLUDE 43
00426 #define RPMVAR_MACROFILES 49
00427
00428 #define RPMVAR_NUM 55
00429
00435 const char * rpmGetVar(int var);
00436
00442 void rpmSetVar(int var, const char *val);
00443
00449 extern const char * macrofiles;
00450
00455 enum rpm_machtable_e {
00456 RPM_MACHTABLE_INSTARCH = 0,
00457 RPM_MACHTABLE_INSTOS = 1,
00458 RPM_MACHTABLE_BUILDARCH = 2,
00459 RPM_MACHTABLE_BUILDOS = 3
00460 };
00461 #define RPM_MACHTABLE_COUNT 4
00469 int rpmReadConfigFiles(const char * file, const char * target);
00470
00476 int rpmReadRC(const char * file);
00477
00484 void rpmGetArchInfo( const char ** name, int * num);
00485
00492 void rpmGetOsInfo( const char ** name, int * num);
00493
00507 int rpmMachineScore(int type, const char * name);
00508
00514 int rpmShowRC(FILE *f);
00515
00522 void rpmSetTables(int archTable, int osTable);
00523
00534 void rpmSetMachine(const char * arch, const char * os);
00535
00544 void rpmGetMachine( const char **arch, const char **os);
00545
00550 void rpmFreeRpmrc(void);
00551
00553
00558 typedef struct rpmdb_s * rpmdb;
00559
00562 typedef struct _dbiIndexSet * dbiIndexSet;
00563
00572 int rpmdbOpen (const char * root, rpmdb * dbp, int mode, int perms);
00573
00580 int rpmdbInit(const char * root, int perms);
00581
00587 int rpmdbClose ( rpmdb rpmdb);
00588
00594 int rpmdbSync (rpmdb rpmdb);
00595
00601 int rpmdbOpenAll (rpmdb rpmdb);
00602
00609 int rpmdbCountPackages(rpmdb db, const char *name);
00610
00613 typedef struct _rpmdbMatchIterator * rpmdbMatchIterator;
00614
00619 void rpmdbFreeIterator( rpmdbMatchIterator mi);
00620
00626 rpmdb rpmdbGetIteratorRpmDB(rpmdbMatchIterator mi) ;
00627
00633 unsigned int rpmdbGetIteratorOffset(rpmdbMatchIterator mi) ;
00634
00640 int rpmdbGetIteratorCount(rpmdbMatchIterator mi) ;
00641
00649 int rpmdbAppendIterator(rpmdbMatchIterator mi, const int * hdrNums,
00650 int nHdrNums)
00651 ;
00652
00661 int rpmdbPruneIterator(rpmdbMatchIterator mi, int * hdrNums,
00662 int nHdrNums, int sorted)
00663 ;
00664
00671 void rpmdbSetIteratorVersion(rpmdbMatchIterator mi, const char * version)
00672 ;
00673
00680 void rpmdbSetIteratorRelease(rpmdbMatchIterator mi, const char * release)
00681 ;
00682
00689 int rpmdbSetIteratorModified(rpmdbMatchIterator mi, int modified)
00690 ;
00691
00697 Header rpmdbNextIterator(rpmdbMatchIterator mi)
00698 ;
00699 #define rpmdbNextIterator(_a) \
00700 XrpmdbNextIterator(_a, __FILE__, __LINE__)
00701 Header XrpmdbNextIterator(rpmdbMatchIterator mi, const char * f, unsigned int l)
00702 ;
00703
00712 rpmdbMatchIterator rpmdbInitIterator(
00713 rpmdb rpmdb, int rpmtag,
00714 const void * key, size_t keylen);
00715
00723 int rpmdbAdd(rpmdb rpmdb, int iid, Header h)
00724 ;
00725
00733 int rpmdbRemove(rpmdb db, int rid, unsigned int offset);
00734
00739 int rpmdbRebuild(const char * root);
00740
00742
00745
00749 typedef enum rpmProblemType_e {
00750 RPMPROB_BADARCH,
00751 RPMPROB_BADOS,
00752 RPMPROB_PKG_INSTALLED,
00753 RPMPROB_BADRELOCATE,
00754 RPMPROB_REQUIRES,
00755 RPMPROB_CONFLICT,
00756 RPMPROB_NEW_FILE_CONFLICT,
00757 RPMPROB_FILE_CONFLICT,
00758 RPMPROB_OLDPACKAGE,
00759 RPMPROB_DISKSPACE,
00760 RPMPROB_DISKNODES,
00761 RPMPROB_BADPRETRANS
00762 } rpmProblemType;
00763
00766 typedef struct rpmProblem_s {
00767 const char * pkgNEVR;
00768 const char * altNEVR;
00769 const void * key;
00770 Header h;
00771 rpmProblemType type;
00772 int ignoreProblem;
00773 const char * str1;
00774 unsigned long ulong1;
00775 } * rpmProblem;
00776
00779 typedef struct rpmProblemSet_s {
00780 int numProblems;
00781 int numProblemsAlloced;
00782 rpmProblem probs;
00783 } * rpmProblemSet;
00784
00787 void printDepFlags(FILE *fp, const char *version, int flags)
00788 ;
00789
00792 struct rpmDependencyConflict {
00793 const char * byName;
00794 const char * byVersion;
00795 const char * byRelease;
00796 Header byHeader;
00797
00798
00799 const char * needsName;
00800 const char * needsVersion;
00801 int needsFlags;
00802 const void * suggestedPackage;
00803 enum {
00804 RPMDEP_SENSE_REQUIRES,
00805 RPMDEP_SENSE_CONFLICTS
00806 } sense;
00807 } ;
00808
00811 void printDepProblems(FILE *fp, struct rpmDependencyConflict *conflicts,
00812 int numConflicts) ;
00813
00820 const char * rpmProblemString(rpmProblem prob) ;
00821
00828 void rpmProblemPrint(FILE *fp, rpmProblem prob) ;
00829
00835 void rpmProblemSetPrint(FILE *fp, rpmProblemSet probs)
00836 ;
00837
00842 void rpmProblemSetFree( rpmProblemSet probs);
00843
00845
00851 typedef
00852 void * (*HFD_t) ( const void * data, rpmTagType type);
00853
00857 typedef int (*HGE_t) (Header h, int_32 tag, int_32 * type,
00858 void ** p, int_32 * c)
00859 ;
00860
00861
00862 typedef struct rpmRelocation_s {
00863 const char * oldPath;
00864 const char * newPath;
00865 } rpmRelocation;
00866
00877 rpmRC rpmInstallSourcePackage(const char * root, FD_t fd,
00878 const char ** specFile,
00879 rpmCallbackFunction notify, rpmCallbackData notifyData,
00880 char ** cookie)
00881 ;
00882
00889 int rpmVersionCompare(Header first, Header second);
00890
00894 typedef enum fileAction_e {
00895 FA_UNKNOWN = 0,
00896 FA_CREATE,
00897 FA_COPYIN,
00898 FA_COPYOUT,
00899 FA_BACKUP,
00900 FA_SAVE,
00901 FA_SKIP,
00902 FA_ALTNAME,
00903 FA_ERASE,
00904 FA_SKIPNSTATE,
00905 FA_SKIPNETSHARED,
00906 FA_SKIPMULTILIB,
00907 } fileAction;
00908
00909 #define XFA_SKIPPING(_a) \
00910 ((_a) == FA_SKIP || (_a) == FA_SKIPNSTATE || (_a) == FA_SKIPNETSHARED || (_a) == FA_SKIPMULTILIB)
00911
00919 typedef enum fileTypes_e {
00920 PIPE = 1,
00921 CDEV = 2,
00922 XDIR = 4,
00923 BDEV = 6,
00924 REG = 8,
00925 LINK = 10,
00926 SOCK = 12,
00927 } fileTypes;
00928
00932 typedef struct fsmIterator_s * FSMI_t;
00933
00937 typedef struct fsm_s * FSM_t;
00938
00942 typedef struct psm_s * PSM_t;
00943
00946 typedef struct transactionFileInfo_s * TFI_t;
00947
00954 typedef struct rpmTransactionSet_s * rpmTransactionSet;
00955
00962 rpmTransactionSet rpmtransCreateSet(rpmdb rpmdb,
00963 const char * rootdir);
00964
00981 int rpmtransAddPackage(rpmTransactionSet ts, Header h, FD_t fd,
00982 const void * key, int update,
00983 rpmRelocation * relocs);
00984
00991 void rpmtransAvailablePackage(rpmTransactionSet ts, Header h,
00992 const void * key);
00993
00999 void rpmtransRemovePackage(rpmTransactionSet ts, int dboffset);
01000
01005 void rpmtransFree( rpmTransactionSet ts);
01006
01012 void rpmtransSetScriptFd(rpmTransactionSet ts, FD_t fd)
01013 ;
01014
01023 int rpmtransGetKeys(const rpmTransactionSet ts,
01024 const void *** ep, int * nep)
01025 ;
01026
01034 int rpmdepCheck(rpmTransactionSet ts,
01035 struct rpmDependencyConflict ** conflicts,
01036 int * numConflicts);
01037
01057 int rpmdepOrder(rpmTransactionSet ts) ;
01058
01064 void rpmdepFreeConflicts( struct rpmDependencyConflict * conflicts,
01065 int numConflicts);
01066
01070 typedef enum rpmtransFlags_e {
01071 RPMTRANS_FLAG_NONE = 0,
01072 RPMTRANS_FLAG_TEST = (1 << 0),
01073 RPMTRANS_FLAG_BUILD_PROBS = (1 << 1),
01074 RPMTRANS_FLAG_NOSCRIPTS = (1 << 2),
01075 RPMTRANS_FLAG_JUSTDB = (1 << 3),
01076 RPMTRANS_FLAG_NOTRIGGERS = (1 << 4),
01077 RPMTRANS_FLAG_NODOCS = (1 << 5),
01078 RPMTRANS_FLAG_ALLFILES = (1 << 6),
01079 RPMTRANS_FLAG_KEEPOBSOLETE = (1 << 7),
01080 RPMTRANS_FLAG_MULTILIB = (1 << 8),
01081 RPMTRANS_FLAG_DIRSTASH = (1 << 9),
01082 RPMTRANS_FLAG_REPACKAGE = (1 << 10),
01084 RPMTRANS_FLAG_PKGCOMMIT = (1 << 11),
01085 RPMTRANS_FLAG_PKGUNDO = (1 << 12),
01086 RPMTRANS_FLAG_COMMIT = (1 << 13),
01087 RPMTRANS_FLAG_UNDO = (1 << 14),
01088 RPMTRANS_FLAG_REVERSE = (1 << 15),
01089
01090 RPMTRANS_FLAG_NOTRIGGERPREIN= (1 << 16),
01091 RPMTRANS_FLAG_NOPRE = (1 << 17),
01092 RPMTRANS_FLAG_NOPOST = (1 << 18),
01093 RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19),
01094 RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20),
01095 RPMTRANS_FLAG_NOPREUN = (1 << 21),
01096 RPMTRANS_FLAG_NOPOSTUN = (1 << 22),
01097 RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23),
01098 RPMTRANS_FLAG_NOPAYLOAD = (1 << 24),
01099 RPMTRANS_FLAG_APPLYONLY = (1 << 25),
01100
01101 RPMTRANS_FLAG_CHAINSAW = (1 << 26),
01102 } rpmtransFlags;
01103
01104 #define _noTransScripts \
01105 ( RPMTRANS_FLAG_NOPRE | \
01106 RPMTRANS_FLAG_NOPOST | \
01107 RPMTRANS_FLAG_NOPREUN | \
01108 RPMTRANS_FLAG_NOPOSTUN \
01109 )
01110
01111 #define _noTransTriggers \
01112 ( RPMTRANS_FLAG_NOTRIGGERPREIN | \
01113 RPMTRANS_FLAG_NOTRIGGERIN | \
01114 RPMTRANS_FLAG_NOTRIGGERUN | \
01115 RPMTRANS_FLAG_NOTRIGGERPOSTUN \
01116 )
01117
01125 int rpmGetRpmlibProvides( const char *** provNames,
01126 int ** provFlags, const char *** provVersions)
01127 ;
01128
01139 int rpmRangesOverlap(const char *AName, const char *AEVR, int AFlags,
01140 const char *BName, const char *BEVR, int BFlags) ;
01141
01149 int rpmCheckRpmlibProvides(const char * keyName, const char * keyEVR,
01150 int keyFlags) ;
01151
01156 void rpmShowRpmlibProvides(FILE * fp) ;
01157
01161 typedef enum rpmprobFilterFlags_e {
01162 RPMPROB_FILTER_NONE = 0,
01163 RPMPROB_FILTER_IGNOREOS = (1 << 0),
01164 RPMPROB_FILTER_IGNOREARCH = (1 << 1),
01165 RPMPROB_FILTER_REPLACEPKG = (1 << 2),
01166 RPMPROB_FILTER_FORCERELOCATE= (1 << 3),
01167 RPMPROB_FILTER_REPLACENEWFILES= (1 << 4),
01168 RPMPROB_FILTER_REPLACEOLDFILES= (1 << 5),
01169 RPMPROB_FILTER_OLDPACKAGE = (1 << 6),
01170 RPMPROB_FILTER_DISKSPACE = (1 << 7),
01171 RPMPROB_FILTER_DISKNODES = (1 << 8)
01172 } rpmprobFilterFlags;
01173
01185 int rpmRunTransactions(rpmTransactionSet ts,
01186 rpmCallbackFunction notify,
01187 rpmCallbackData notifyData,
01188 rpmProblemSet okProbs,
01189 rpmProblemSet * newProbs,
01190 rpmtransFlags transFlags,
01191 rpmprobFilterFlags ignoreSet);
01192
01200 const char *const tagName(int tag) ;
01201
01207 int tagValue(const char *tagstr) ;
01208
01209 #define RPMLEAD_BINARY 0
01210 #define RPMLEAD_SOURCE 1
01211
01212 #define RPMLEAD_MAGIC0 0xed
01213 #define RPMLEAD_MAGIC1 0xab
01214 #define RPMLEAD_MAGIC2 0xee
01215 #define RPMLEAD_MAGIC3 0xdb
01216
01217 #define RPMLEAD_SIZE 96
01225 struct rpmlead {
01226 unsigned char magic[4];
01227 unsigned char major, minor;
01228 short type;
01229 short archnum;
01230 char name[66];
01231 short osnum;
01232 short signature_type;
01233 char reserved[16];
01234 } ;
01235
01239 void freeFilesystems(void);
01240
01247 int rpmGetFilesystemList( const char *** listptr, int * num)
01248 ;
01249
01259 int rpmGetFilesystemUsage(const char ** filelist, int_32 * fssizes,
01260 int numFiles, uint_32 ** usagesPtr, int flags);
01261
01262
01265
01269 struct rpmBuildArguments {
01270 int buildAmount;
01271 const char *buildRootOverride;
01272 char *targets;
01273 int force;
01274 int noBuild;
01275 int noDeps;
01276 int noLang;
01277 int shortCircuit;
01278 int sign;
01279 int useCatalog;
01280 char buildMode;
01281 char buildChar;
01282 const char *rootdir;
01283 };
01286 typedef struct rpmBuildArguments BTA_t;
01287
01290 extern struct rpmBuildArguments rpmBTArgs;
01291
01294 extern struct poptOption rpmBuildPoptTable[];
01295
01297
01300
01304 typedef enum rpmVerifyAttrs_e {
01305 RPMVERIFY_NONE = 0,
01306 RPMVERIFY_MD5 = (1 << 0),
01307 RPMVERIFY_FILESIZE = (1 << 1),
01308 RPMVERIFY_LINKTO = (1 << 2),
01309 RPMVERIFY_USER = (1 << 3),
01310 RPMVERIFY_GROUP = (1 << 4),
01311 RPMVERIFY_MTIME = (1 << 5),
01312 RPMVERIFY_MODE = (1 << 6),
01313 RPMVERIFY_RDEV = (1 << 7),
01314 RPMVERIFY_READLINKFAIL= (1 << 28),
01315 RPMVERIFY_READFAIL = (1 << 29),
01316 RPMVERIFY_LSTATFAIL = (1 << 30)
01317 } rpmVerifyAttrs;
01318 #define RPMVERIFY_ALL ~(RPMVERIFY_NONE)
01319
01331 int rpmVerifyFile(const char * root, Header h, int filenum,
01332 int * result, int omitMask);
01333
01342 int rpmVerifyScript(const char * rootDir, Header h, FD_t scriptFd);
01343
01347 typedef enum rpmQVSources_e {
01348 RPMQV_PACKAGE = 0,
01349 RPMQV_PATH,
01350 RPMQV_ALL,
01351 RPMQV_RPM,
01352 RPMQV_GROUP,
01353 RPMQV_WHATPROVIDES,
01354 RPMQV_WHATREQUIRES,
01355 RPMQV_TRIGGEREDBY,
01356 RPMQV_DBOFFSET,
01357 RPMQV_SPECFILE
01358 } rpmQVSources;
01359
01363 typedef enum rpmQueryFlags_e {
01364 QUERY_FOR_LIST = (1 << 1),
01365 QUERY_FOR_STATE = (1 << 2),
01366 QUERY_FOR_DOCS = (1 << 3),
01367 QUERY_FOR_CONFIG = (1 << 4),
01368 QUERY_FOR_DUMPFILES = (1 << 8)
01369 } rpmQueryFlags;
01370
01374 typedef enum rpmVerifyFlags_e {
01375 VERIFY_FILES = (1 << 9),
01376 VERIFY_DEPS = (1 << 10),
01377 VERIFY_SCRIPT = (1 << 11),
01378 VERIFY_MD5 = (1 << 12)
01379 } rpmVerifyFlags;
01380
01384 typedef struct rpmQVArguments {
01385 rpmQVSources qva_source;
01386 int qva_sourceCount;
01387 int qva_flags;
01388 int qva_verbose;
01389 const char *qva_queryFormat;
01390 const char *qva_prefix;
01391 char qva_mode;
01392 char qva_char;
01393 } QVA_t;
01394
01397 extern QVA_t rpmQVArgs;
01398
01401 extern struct poptOption rpmQVSourcePoptTable[];
01402
01408 typedef int (*QVF_t) (QVA_t *qva, rpmdb db, Header h);
01409
01417 int showMatches(QVA_t *qva, rpmdbMatchIterator mi,
01418 QVF_t showPackage);
01419
01422 extern int specedit;
01423
01426 extern struct poptOption rpmQueryPoptTable[];
01427
01432 void rpmDisplayQueryTags(FILE * f);
01433
01443 int rpmQueryVerify(QVA_t *qva, rpmQVSources source, const char * arg,
01444 rpmdb db, QVF_t showPackage);
01445
01454 int showQueryPackage(QVA_t *qva, rpmdb db, Header h);
01455
01463 int rpmQuery(QVA_t *qva, rpmQVSources source, const char * arg);
01464
01467 extern struct poptOption rpmVerifyPoptTable[];
01468
01476 int showVerifyPackage(QVA_t *qva, rpmdb db, Header h);
01477
01485 int rpmVerify(QVA_t *qva, rpmQVSources source, const char *arg);
01486
01488
01491
01492
01496 typedef enum rpmInstallInterfaceFlags_e {
01497 INSTALL_NONE = 0,
01498 INSTALL_PERCENT = (1 << 0),
01499 INSTALL_HASH = (1 << 1),
01500 INSTALL_NODEPS = (1 << 2),
01501 INSTALL_NOORDER = (1 << 3),
01502 INSTALL_LABEL = (1 << 4),
01503 INSTALL_UPGRADE = (1 << 5),
01504 INSTALL_FRESHEN = (1 << 6)
01505 } rpmInstallInterfaceFlags;
01506
01517 int rpmInstall(const char * rootdir, const char ** argv,
01518 rpmtransFlags transFlags,
01519 rpmInstallInterfaceFlags interfaceFlags,
01520 rpmprobFilterFlags probFilter,
01521 rpmRelocation * relocations);
01522
01531 int rpmInstallSource(const char * prefix, const char * arg,
01532 const char ** specFile, char ** cookie);
01533
01537 typedef enum rpmEraseInterfaceFlags_e {
01538 UNINSTALL_NONE = 0,
01539 UNINSTALL_NODEPS = (1 << 0),
01540 UNINSTALL_ALLMATCHES= (1 << 1)
01541 } rpmEraseInterfaceFlags;
01542
01551 int rpmErase(const char * rootdir, const char ** argv,
01552 rpmtransFlags transFlags,
01553 rpmEraseInterfaceFlags interfaceFlags);
01554
01556
01559
01563 enum rpmtagSignature {
01564 RPMSIGTAG_SIZE = 1000,
01565
01566 RPMSIGTAG_LEMD5_1 = 1001,
01567 RPMSIGTAG_PGP = 1002,
01568 RPMSIGTAG_LEMD5_2 = 1003,
01569 RPMSIGTAG_MD5 = 1004,
01570 RPMSIGTAG_GPG = 1005,
01571 RPMSIGTAG_PGP5 = 1006,
01573
01574
01575 RPMTAG_PK_BASE = 512,
01576 RPMTAG_PK_RSA_ES = RPMTAG_PK_BASE+1,
01577 RPMTAG_PK_RSA_E = RPMTAG_PK_BASE+2,
01578 RPMTAG_PK_RSA_S = RPMTAG_PK_BASE+3,
01579 RPMTAG_PK_ELGAMAL_E = RPMTAG_PK_BASE+16,
01580 RPMTAG_PK_DSA = RPMTAG_PK_BASE+17,
01581 RPMTAG_PK_ELLIPTIC = RPMTAG_PK_BASE+18,
01582 RPMTAG_PK_ECDSA = RPMTAG_PK_BASE+19,
01583 RPMTAG_PK_ELGAMAL_ES= RPMTAG_PK_BASE+20,
01584 RPMTAG_PK_DH = RPMTAG_PK_BASE+21,
01586 RPMTAG_HASH_BASE = 512+64,
01587 RPMTAG_HASH_MD5 = RPMTAG_HASH_BASE+1,
01588 RPMTAG_HASH_SHA1 = RPMTAG_HASH_BASE+2,
01589 RPMTAG_HASH_RIPEMD160= RPMTAG_HASH_BASE+3,
01590 RPMTAG_HASH_MD2 = RPMTAG_HASH_BASE+5,
01591 RPMTAG_HASH_TIGER192= RPMTAG_HASH_BASE+6,
01592 RPMTAG_HASH_HAVAL_5_160= RPMTAG_HASH_BASE+7
01593 };
01594
01598 typedef enum rpmVerifySignatureReturn_e {
01599 RPMSIG_OK = 0,
01600 RPMSIG_UNKNOWN = 1,
01601 RPMSIG_BAD = 2,
01602 RPMSIG_NOKEY = 3,
01603 RPMSIG_NOTTRUSTED = 4
01604 } rpmVerifySignatureReturn;
01605
01615 rpmVerifySignatureReturn rpmVerifySignature(const char *file,
01616 int_32 sigTag, const void * sig, int count, char *result);
01617
01621 void rpmFreeSignature(Header h);
01622
01623
01624
01628 typedef enum rpmCheckSigFlags_e {
01629 CHECKSIG_NONE = 0,
01630 CHECKSIG_PGP = (1 << 0),
01631 CHECKSIG_MD5 = (1 << 1),
01632 CHECKSIG_GPG = (1 << 2)
01633 } rpmCheckSigFlags;
01634
01641 int rpmCheckSig(rpmCheckSigFlags flags, const char ** argv);
01642
01646 typedef enum rpmResignFlags_e {
01647 RESIGN_NEW_SIGNATURE = 0,
01648 RESIGN_ADD_SIGNATURE
01649 } rpmResignFlags;
01650
01658 int rpmReSign(rpmResignFlags add, char *passPhrase, const char ** argv);
01659
01662 #ifdef __cplusplus
01663 }
01664 #endif
01665
01666 #endif