#include "system.h"
#include <sys/file.h>
#include <rpmio.h>
#include <rpmpgp.h>
#include <rpmurl.h>
#include <rpmmacro.h>
#include <rpmsq.h>
#include <rpmevr.h>
#include "rpmdb.h"
#include "fprint.h"
#include "legacy.h"
#include "header_internal.h"
#include "debug.h"
Include dependency graph for rpmdb.c:
Go to the source code of this file.
Data Structures | |
struct | pbm_set |
union | _dbswap |
struct | _rpmdbMatchIterator |
Defines | |
#define | _USE_COPY_LOAD |
#define | _RPMEVR_INTERNAL |
#define | _RPMDB_INTERNAL |
#define | _MIRE_INTERNAL |
#define | _DB_TAGGED_FILE_INDICES 1 |
#define | _DBI_FLAGS 0 |
#define | _DBI_PERMS 0644 |
#define | _DBI_MAJOR -1 |
#define | __PBM_NBITS (8 * sizeof (__pbm_bits)) |
#define | __PBM_IX(d) ((d) / __PBM_NBITS) |
#define | __PBM_MASK(d) ((__pbm_bits) 1 << (((unsigned)(d)) % __PBM_NBITS)) |
#define | __PBM_BITS(set) ((set)->bits) |
#define | PBM_FREE(s) _free(s); |
#define | PBM_SET(d, s) (__PBM_BITS (s)[__PBM_IX (d)] |= __PBM_MASK (d)) |
#define | PBM_CLR(d, s) (__PBM_BITS (s)[__PBM_IX (d)] &= ~__PBM_MASK (d)) |
#define | PBM_ISSET(d, s) ((__PBM_BITS (s)[__PBM_IX (d)] & __PBM_MASK (d)) != 0) |
#define | PBM_ALLOC(d) xcalloc(__PBM_IX (d) + 1, sizeof(__pbm_bits)) |
#define | DB1vec NULL |
#define | DB2vec NULL |
#define | DB3vec NULL |
#define | SQLITEvec NULL |
#define | _DBSWAP(_a) |
#define | _DB_ROOT "/" |
#define | _DB_HOME "%{?_dbpath}" |
#define | _DB_FLAGS 0 |
#define | _DB_MODE 0 |
#define | _DB_PERMS 0644 |
#define | _DB_MAJOR -1 |
#define | _DB_ERRPFX "rpmdb" |
#define | _VARLIBRPM "/var/lib/rpm" |
#define | _RECNUM rpmdbGetIteratorOffset(mi) |
Typedefs | |
typedef unsigned int | __pbm_bits |
Functions | |
static pbm_set * | PBM_REALLOC (pbm_set **sp, int *odp, int nd) |
Reallocate a bit map. | |
static unsigned char | nibble (char c) |
Convert hex to binary nibble. | |
static int | dbiTagToDbix (rpmdb db, int rpmtag) |
Return dbi index used for rpm tag. | |
static void | dbiTagsInit (int **dbiTagsP, int *dbiTagsMaxP) |
Initialize database (index, tag) tuple from configuration. | |
dbiIndex | dbiOpen (rpmdb db, rpmTag rpmtag, unsigned int flags) |
static dbiIndexItem | dbiIndexNewItem (unsigned int hdrNum, unsigned int tagNum) |
Create and initialize item for index database set. | |
static int | dbt2set (dbiIndex dbi, DBT *data, dbiIndexSet *setp) |
Convert retrieved data to index set. | |
static int | set2dbt (dbiIndex dbi, DBT *data, dbiIndexSet set) |
Convert index set to database representation. | |
static int | hdrNumCmp (const void *one, const void *two) |
static int | dbiAppendSet (dbiIndexSet set, const void *recs, int nrecs, size_t recsize, int sortset) |
Append element(s) to set of index database items. | |
static int | dbiPruneSet (dbiIndexSet set, void *recs, int nrecs, size_t recsize, int sorted) |
Remove element(s) from set of index database items. | |
unsigned int | dbiIndexSetCount (dbiIndexSet set) |
unsigned int | dbiIndexRecordOffset (dbiIndexSet set, int recno) |
unsigned int | dbiIndexRecordFileNumber (dbiIndexSet set, int recno) |
dbiIndexSet | dbiFreeIndexSet (dbiIndexSet set) |
int | rpmdbCheckSignals (void) |
Check rpmdb signal handler for trapped signal exit. | |
static int | blockSignals (rpmdb db, sigset_t *oldMask) |
Block all signals, returning previous signal mask. | |
static int | unblockSignals (rpmdb db, sigset_t *oldMask) |
Restore signal mask. | |
static const char * | queryHeader (Header h, const char *qfmt) |
Return header query string. | |
static int | rpmdbExportInfo (rpmdb db, Header h, int adding) |
Write added/removed header info. | |
int | rpmdbOpenAll (rpmdb db) |
Open all database indices. | |
int | rpmdbBlockDBI (rpmdb db, int rpmtag) |
Block access to a single database index. | |
int | rpmdbCloseDBI (rpmdb db, int rpmtag) |
Close a single database index. | |
int | rpmdbClose (rpmdb db) |
Close all database indices and free rpmdb. | |
int | rpmdbSync (rpmdb db) |
Sync all database indices. | |
static const char * | rpmdbURIPath (const char *uri) |
Return macro expanded absolute path to rpmdb. | |
rpmdb | rpmdbNew (const char *root, const char *home, int mode, int perms, int flags) |
int | rpmdbOpenDatabase (const char *prefix, const char *dbpath, int _dbapi, rpmdb *dbp, int mode, int perms, int flags) |
rpmdb | XrpmdbUnlink (rpmdb db, const char *msg, const char *fn, unsigned ln) |
rpmdb | XrpmdbLink (rpmdb db, const char *msg, const char *fn, unsigned ln) |
int | rpmdbOpen (const char *prefix, rpmdb *dbp, int mode, int perms) |
Open rpm database. | |
int | rpmdbInit (const char *prefix, int perms) |
Initialize database. | |
int | rpmdbVerifyAllDBI (rpmdb db) |
Verify all database components. | |
int | rpmdbVerify (const char *prefix) |
Open and verify all database components. | |
static unsigned | taghash (const char *s) |
Return a tagnum with hash on the (directory) path in upper 16 bits. | |
static int | rpmdbFindByFile (rpmdb db, const char *filespec, DBT *key, DBT *data, dbiIndexSet *matches) |
Find file matches in database. | |
int | rpmdbCountPackages (rpmdb db, const char *name) |
Return number of instances of package in rpm database. | |
static rpmRC | dbiFindMatches (dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *data, const char *name, const char *version, const char *release, dbiIndexSet *matches) |
Attempt partial matches on name[-version[-release]] strings. | |
static rpmRC | dbiFindByLabel (dbiIndex dbi, DBC *dbcursor, DBT *key, DBT *data, const char *arg, dbiIndexSet *matches) |
Lookup by name, name-version, and finally by name-version-release. | |
void * | dbiStatsAccumulator (dbiIndex dbi, int opx) |
static int | miFreeHeader (rpmdbMatchIterator mi, dbiIndex dbi) |
Rewrite a header into packages (if necessary) and free the header. | |
rpmdbMatchIterator | rpmdbFreeIterator (rpmdbMatchIterator mi) |
Destroy rpm database iterator. | |
unsigned int | rpmdbGetIteratorOffset (rpmdbMatchIterator mi) |
Return header join key for current position of rpm database iterator. | |
unsigned int | rpmdbGetIteratorFileNum (rpmdbMatchIterator mi) |
int | rpmdbGetIteratorCount (rpmdbMatchIterator mi) |
Return number of elements in rpm database iterator. | |
static int | mireCmp (const void *a, const void *b) |
Compare iterator selectors by rpm tag (qsort/bsearch). | |
static char * | mireDup (rpmTag tag, rpmMireMode *modep, const char *pattern) |
Copy pattern, escaping for appropriate mode. | |
int | rpmdbSetIteratorRE (rpmdbMatchIterator mi, rpmTag tag, rpmMireMode mode, const char *pattern) |
Add pattern to iterator selector. | |
static int | mireSkip (const rpmdbMatchIterator mi) |
Return iterator selector match. | |
int | rpmdbSetIteratorRewrite (rpmdbMatchIterator mi, int rewrite) |
Prepare iterator for lazy writes. | |
int | rpmdbSetIteratorModified (rpmdbMatchIterator mi, int modified) |
Modify iterator to mark header for lazy write on release. | |
int | rpmdbSetHdrChk (rpmdbMatchIterator mi, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg)) |
Modify iterator to verify retrieved header blobs. | |
Header | rpmdbNextIterator (rpmdbMatchIterator mi) |
Return next package header from iteration. | |
static void | rpmdbSortIterator (rpmdbMatchIterator mi) |
static int | rpmdbGrowIterator (rpmdbMatchIterator mi, int fpNum, unsigned int exclude, unsigned int tag) |
int | rpmdbPruneIterator (rpmdbMatchIterator mi, int *hdrNums, int nHdrNums, int sorted) |
Remove items from set of package instances to iterate. | |
int | rpmdbAppendIterator (rpmdbMatchIterator mi, const int *hdrNums, int nHdrNums) |
Append items to set of package instances to iterate. | |
rpmdbMatchIterator | rpmdbInitIterator (rpmdb db, rpmTag rpmtag, const void *keyp, size_t keylen) |
Return database iterator. | |
int | rpmdbRemove (rpmdb db, int rid, unsigned int hdrNum, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg)) |
Remove package header from rpm database and indices. | |
int | rpmdbAdd (rpmdb db, int iid, Header h, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg)) |
Add package header to rpm database and indices. | |
int | rpmdbFindFpList (rpmdb db, fingerPrint *fpList, dbiIndexSet *matchList, int numItems, unsigned int exclude) |
Find fingerprint matches in database. | |
static int | rpmioFileExists (const char *urlfn) |
Check if file esists using stat(2). | |
static int | rpmdbRemoveDatabase (const char *prefix, const char *dbpath, int _dbapi, const int *dbiTags, int dbiTagsMax) |
static int | rpmdbMoveDatabase (const char *prefix, const char *olddbpath, int _olddbapi, const char *newdbpath, int _newdbapi, const int *dbiTags, int dbiTagsMax) |
int | rpmdbRebuild (const char *prefix, rpmts ts, rpmRC(*hdrchk)(rpmts ts, const void *uh, size_t uc, const char **msg)) |
Rebuild database indices from package headers. | |
Variables | |
int | _rpmdb_debug = 0 |
int | _rsegfault = 0 |
int | _wsegfault = 0 |
static int | _rebuildinprogress = 0 |
static int | _db_filter_dups = 0 |
static int | _db_tagged_file_indices = 1 |
static struct _dbiVec * | mydbvecs [] |
static rpmdb | rpmdbRock |
static rpmdbMatchIterator | rpmmiRock |
static struct rpmdb_s | dbTemplate |
Definition in file rpmdb.c.
|
Definition at line 71 of file rpmdb.c. Referenced by PBM_REALLOC(). |
|
Definition at line 64 of file rpmdb.c. Referenced by PBM_REALLOC(). |
|
|
|
|
|
Definition at line 851 of file rpmdb.c. Referenced by rpmdbNew(). |
|
|
|
Definition at line 845 of file rpmdb.c. Referenced by rpmdbNew(). |
|
|
|
|
|
|
|
Definition at line 844 of file rpmdb.c. Referenced by rpmdbNew(). |
|
|
|
|
|
|
|
|
|
Value: /*@-bounds@*/ \ { unsigned char _b, *_c = (_a).uc; \ _b = _c[3]; _c[3] = _c[0]; _c[0] = _b; \ _b = _c[2]; _c[2] = _c[1]; _c[1] = _b; \ /*@=bounds@*/ \ } Definition at line 396 of file rpmdb.c. Referenced by dbt2set(), rpmdbAdd(), rpmdbInitIterator(), rpmdbNextIterator(), rpmdbRemove(), and set2dbt(). |
|
|
|
Referenced by rpmdbRebuild(). |
|
|
|
|
|
Definition at line 7 of file rpmdb.c. Referenced by rpmdbNextIterator(). |
|
Referenced by rpmdbNew(). |
|
|
|
|
|
|
|
Definition at line 78 of file rpmdb.c. Referenced by dbiOpen(). |
|
|
|
Definition at line 73 of file rpmdb.c. Referenced by rpmdbClose(). |
|
Definition at line 76 of file rpmdb.c. Referenced by rpmdbNextIterator(). |
|
Definition at line 74 of file rpmdb.c. Referenced by rpmdbNextIterator(). |
|
|
|
|
|
Block all signals, returning previous signal mask.
Definition at line 739 of file rpmdb.c. Referenced by miFreeHeader(), rpmdbAdd(), and rpmdbRemove(). |
|
Append element(s) to set of index database items.
Definition at line 558 of file rpmdb.c. References hdrNumCmp(), and xrealloc(). Referenced by rpmdbAppendIterator(). |
|
Lookup by name, name-version, and finally by name-version-release. Both version and release can be patterns.
Definition at line 1686 of file rpmdb.c. References alloca(), dbiFindMatches(), dbiFreeIndexSet(), RPMRC_NOTFOUND, and stpcpy(). Referenced by rpmdbInitIterator(). |
|
Attempt partial matches on name[-version[-release]] strings.
Definition at line 1586 of file rpmdb.c. References _, dbiIndexRecordOffset(), dbiIndexSetCount(), dbt2set(), rpmdbFreeIterator(), RPMDBI_PACKAGES, rpmdbInitIterator(), rpmdbNextIterator(), rpmdbSetIteratorRE(), RPMERR_DBGETINDEX, rpmError, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMTAG_RELEASE, RPMTAG_VERSION, and tagName(). Referenced by dbiFindByLabel(). |
|
Definition at line 639 of file rpmdb.c. References _free(). Referenced by dbiFindByLabel(), rpmdbCountPackages(), rpmdbFreeIterator(), rpmdbInitIterator(), rpmdbRemove(), and rpmtsRun(). |
|
Create and initialize item for index database set.
Definition at line 382 of file rpmdb.c. References xcalloc(). Referenced by rpmdbAdd(), and rpmdbRemove(). |
|
Definition at line 634 of file rpmdb.c. Referenced by rpmdbNextIterator(), and rpmtsRun(). |
|
Definition at line 629 of file rpmdb.c. Referenced by dbiFindMatches(), rpmdbNextIterator(), and rpmtsRun(). |
|
Definition at line 624 of file rpmdb.c. Referenced by dbiFindMatches(), rpmdbCountPackages(), and rpmtsRun(). |
|
Definition at line 275 of file rpmdb.c. References _, _rebuildinprogress, _rpmdb_debug, db3Free(), dbiTagToDbix(), errno, PBM_ALLOC, RPMDBI_PACKAGES, RPMERR_DBOPEN, rpmError, rpmExpandNumeric(), RPMMESS_DEBUG, rpmMessage, strerror, and tagName(). Referenced by rpmdbAdd(), rpmdbCountPackages(), rpmdbFindByFile(), rpmdbFreeIterator(), rpmdbGrowIterator(), rpmdbInitIterator(), rpmdbNextIterator(), rpmdbOpenDatabase(), rpmdbRemove(), rpmpsmStage(), and unsatisfiedDepend(). |
|
Remove element(s) from set of index database items.
Definition at line 597 of file rpmdb.c. References hdrNumCmp(). Referenced by rpmdbPruneIterator(), and rpmdbRemove(). |
|
|
|
Initialize database (index, tag) tuple from configuration.
Definition at line 169 of file rpmdb.c. References _free(), RPMDBI_PACKAGES, rpmExpand(), xcalloc(), xisspace(), and xstrdup(). Referenced by rpmdbNew(), and rpmdbRebuild(). |
|
Return dbi index used for rpm tag.
Definition at line 149 of file rpmdb.c. Referenced by dbiOpen(). |
|
Convert retrieved data to index set.
Definition at line 411 of file rpmdb.c. References _DBSWAP, _dbswap::ui, and xmalloc(). Referenced by dbiFindMatches(), rpmdbCountPackages(), rpmdbFindByFile(), rpmdbGrowIterator(), rpmdbInitIterator(), and rpmdbRemove(). |
|
Definition at line 542 of file rpmdb.c. Referenced by dbiAppendSet(), dbiPruneSet(), and rpmdbSortIterator(). |
|
Rewrite a header into packages (if necessary) and free the header. Note: this is called from a markReplacedFiles iteration, and *must* preserve the "join key" (i.e. offset) for the header.
Definition at line 1800 of file rpmdb.c. References _, _free(), blockSignals(), HEADER_MAGIC_NO, headerFree(), headerSizeof(), headerUnload(), _rpmdbMatchIterator::mi_data, _rpmdbMatchIterator::mi_dbc, _rpmdbMatchIterator::mi_h, _rpmdbMatchIterator::mi_hdrchk, _rpmdbMatchIterator::mi_key, _rpmdbMatchIterator::mi_modified, _rpmdbMatchIterator::mi_prevoffset, _rpmdbMatchIterator::mi_ts, RPMERR_DBPUTINDEX, rpmError, RPMMESS_DEBUG, RPMMESS_ERROR, rpmMessage, RPMRC_FAIL, RPMRC_NOTFOUND, tagName(), and unblockSignals(). Referenced by rpmdbFreeIterator(), and rpmdbNextIterator(). |
|
Compare iterator selectors by rpm tag (qsort/bsearch).
Definition at line 1920 of file rpmdb.c. Referenced by rpmdbSetIteratorRE(). |
|
Copy pattern, escaping for appropriate mode.
Definition at line 1934 of file rpmdb.c. References RPMTAG_BASENAMES, RPMTAG_DIRNAMES, and xstrdup(). Referenced by rpmdbSetIteratorRE(). |
|
Return iterator selector match.
Definition at line 2104 of file rpmdb.c. References argv, headerFreeData(), headerGetEntryMinMemory(), _rpmdbMatchIterator::mi_h, _rpmdbMatchIterator::mi_nre, _rpmdbMatchIterator::mi_re, RPM_INT32_TYPE, and RPMTAG_EPOCH. Referenced by rpmdbNextIterator(). |
|
Convert hex to binary nibble.
|
|
Reallocate a bit map.
Definition at line 87 of file rpmdb.c. References __PBM_BITS, __PBM_IX, and xrealloc(). Referenced by rpmdbNextIterator(). |
|
Return header query string.
Definition at line 777 of file rpmdb.c. References _, headerDefaultFormats, headerSprintf(), RPMERR_QFMT, rpmError, and rpmTagTable. |
|
Block access to a single database index.
Definition at line 889 of file rpmdb.c. Referenced by rpmgiNext(). |
|
Close a single database index.
Definition at line 907 of file rpmdb.c. Referenced by rpmtsCheck(). |
|
Write added/removed header info.
Definition at line 799 of file rpmdb.c. References _free(), Fclose(), Fopen(), headerGetEntry(), queryHeader(), rpmGetPath(), RPMMESS_DEBUG, rpmMessage, RPMTAG_INSTALLTID, Unlink(), and Utime(). Referenced by rpmdbNew(). |
|
Find file matches in database.
Definition at line 1360 of file rpmdb.c. References _, _db_tagged_file_indices, alloca(), dbiOpen(), dbt2set(), dirName, fpCacheCreate(), fpLookup(), headerFreeData(), headerGetEntryMinMemory(), RPMERR_DBGETINDEX, rpmError, RPMTAG_BASENAMES, and tagName(). Referenced by rpmdbInitIterator(). |
|
Definition at line 1906 of file rpmdb.c. References _rpmdbMatchIterator::mi_filenum. Referenced by rpmtsFindPubkey(). |
|
Definition at line 2484 of file rpmdb.c. References _, _db_tagged_file_indices, dbiOpen(), dbt2set(), _rpmdbMatchIterator::mi_data, _rpmdbMatchIterator::mi_db, _rpmdbMatchIterator::mi_dbc, _rpmdbMatchIterator::mi_key, _rpmdbMatchIterator::mi_rpmtag, RPMERR_DBGETINDEX, rpmError, and tagName(). Referenced by rpmdbFindFpList(). |
|
Definition at line 3738 of file rpmdb.c. References alloca(), rpmCleanPath(), RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPENDS, RPMDBI_REMOVED, rpmioFileExists(), and tagName(). Referenced by rpmdbRebuild(). |
|
Definition at line 1071 of file rpmdb.c. References _, _DB_ERRPFX, _db_filter_dups, _DB_HOME, _DB_ROOT, _free(), _rpmdb_debug, _VARLIBRPM, dbiTagsInit(), dbTemplate, rpmdbExportInfo(), rpmdbLink, rpmdbURIPath(), RPMERR_DBOPEN, rpmError, rpmExpand(), rpmExpandNumeric(), rpmGetPath(), urlPath(), and xcalloc(). Referenced by rpmdbOpenDatabase(). |
|
Definition at line 1145 of file rpmdb.c. References dbiOpen(), RPMDB_FLAG_JUSTCHECK, RPMDB_FLAG_MINIMAL, RPMDBI_ADDED, RPMDBI_AVAILABLE, RPMDBI_DEPENDS, RPMDBI_PACKAGES, RPMDBI_REMOVED, rpmdbNew(), rpmsqEnable(), and RPMTAG_NAME. Referenced by rpmdbInit(), rpmdbOpen(), rpmdbRebuild(), and rpmdbVerify(). |
|
Definition at line 3679 of file rpmdb.c. References alloca(), rpmCleanPath(), rpmioFileExists(), and tagName(). Referenced by rpmdbRebuild(). |
|
Definition at line 2462 of file rpmdb.c. References hdrNumCmp(), mergesort(), _rpmdbMatchIterator::mi_set, and _rpmdbMatchIterator::mi_sorted. |
|
Return macro expanded absolute path to rpmdb.
Definition at line 1019 of file rpmdb.c. References _free(), PATH_MAX, realpath(), rpmGetPath(), stpncpy(), URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, and urlPath(). Referenced by rpmdbNew(). |
|
Check if file esists using stat(2).
Definition at line 3644 of file rpmdb.c. References errno, Stat(), URL_IS_DASH, URL_IS_FTP, URL_IS_HKP, URL_IS_HTTP, URL_IS_HTTPS, URL_IS_PATH, URL_IS_UNKNOWN, and urlPath(). Referenced by rpmdbMoveDatabase(), and rpmdbRemoveDatabase(). |
|
Convert index set to database representation.
Definition at line 481 of file rpmdb.c. References _DBSWAP, and xmalloc(). Referenced by rpmdbRemove(). |
|
Return a tagnum with hash on the (directory) path in upper 16 bits.
Definition at line 1339 of file rpmdb.c. Referenced by rpmdbAdd(), and rpmdbFindFpList(). |
|
Restore signal mask.
Definition at line 762 of file rpmdb.c. References rpmdbCheckSignals(). Referenced by miFreeHeader(). |
|
Definition at line 1254 of file rpmdb.c. References _rpmdb_debug. |
|
Definition at line 1244 of file rpmdb.c. References _rpmdb_debug. |
|
Definition at line 46 of file rpmdb.c. Referenced by rpmdbNew(), and rpmdbRebuild(). |
|
Definition at line 53 of file rpmdb.c. Referenced by rpmdbAdd(), rpmdbFindByFile(), rpmdbFindFpList(), and rpmdbGrowIterator(). |
|
Definition at line 44 of file rpmdb.c. Referenced by dbiOpen(), and rpmdbRebuild(). |
|
|
|
|
|
|
|
Initial value: { "/" , "%{?_dbpath}" , 0 , 0 , 0644 , -1 , "rpmdb" } Definition at line 855 of file rpmdb.c. Referenced by rpmdbNew(). |
|
Initial value: { NULL , NULL , NULL , NULL , NULL , NULL } |
|
Definition at line 681 of file rpmdb.c. Referenced by rpmdbClose(). |
|
Definition at line 684 of file rpmdb.c. Referenced by rpmdbCheckSignals(), rpmdbFreeIterator(), and rpmdbInitIterator(). |