rpm
5.4.10
|
#include "system.h"
#include <netinet/in.h>
#include <rpmiotypes.h>
#include <rpmio_internal.h>
#include <rpmcb.h>
#include <rpmbc.h>
#include <rpmmacro.h>
#include <rpmhkp.h>
#include <rpmku.h>
#include "header_internal.h"
#include <rpmdb.h>
#include <pkgio.h>
#include "rpmts.h"
#include <rpmxar.h>
#include "signature.h"
#include "debug.h"
Go to the source code of this file.
Data Structures | |
struct | rpmlead |
The lead data structure. More... | |
Macros | |
#define | _RPMIOB_INTERNAL |
#define | _RPMHKP_INTERNAL |
#define | _RPMTAG_INTERNAL |
#define | _RPMTS_INTERNAL |
#define | timedRead (ufdio->read) |
Functions | |
ssize_t | timedRead (FD_t fd, void *bufptr, size_t length) |
static rpmRC | rpmWriteHeader (FD_t fd, Header h, const char **msg) |
Write (with unload) header to file handle. More... | |
rpmop | rpmtsOp (rpmts ts, rpmtsOpX opx) |
Retrieve operation timestamp from a transaction set. More... | |
pgpDigParams | rpmtsPubkey (const rpmts ts) |
Return OpenPGP pubkey constants. More... | |
rpmdb | rpmtsGetRdb (rpmts ts) |
Get transaction set database handle. More... | |
rpmRC | rpmtsFindPubkey (rpmts ts, void *_dig) |
Retrieve pubkey from rpm database. More... | |
pgpDig | rpmtsDig (rpmts ts) |
Get OpenPGP packet parameters, i.e. More... | |
void | rpmtsCleanDig (rpmts ts) |
Free signature verification data. More... | |
static rpmRC | wrLead (FD_t fd, const void *ptr, const char **msg) |
Write lead to file handle. More... | |
static rpmRC | rdLead (FD_t fd, void *ptr, const char **msg) |
Read lead from file handle. More... | |
static rpmRC | wrSignature (FD_t fd, void *ptr, const char **msg) |
Write signature header. More... | |
static rpmRC | printSize (FD_t fd, size_t siglen, size_t pad, size_t datalen) |
Print package size. More... | |
static rpmRC | rdSignature (FD_t fd, void *ptr, const char **msg) |
Read (and verify header+payload size) signature header. More... | |
rpmRC | headerCheck (pgpDig dig, const void *uh, size_t uc, const char **msg) |
Check header consistency, performing headerGet() the hard way. More... | |
static size_t | szHeader (const void *ptr) |
Return size of Header. More... | |
static rpmRC | ckHeader (FD_t fd, const void *ptr, const char **msg) |
Check metadata header. More... | |
static rpmRC | rpmReadHeader (FD_t fd, Header *hdrp, const char **msg) |
Return checked and loaded header. More... | |
static rpmRC | rdHeader (FD_t fd, void *ptr, const char **msg) |
Read metadata header. More... | |
static rpmRC | wrHeader (FD_t fd, void *ptr, const char **msg) |
Write metadata header. More... | |
size_t | rpmpkgSizeof (const char *fn, const void *ptr) |
Return size of item in bytes. More... | |
rpmRC | rpmpkgCheck (const char *fn, FD_t fd, const void *ptr, const char **msg) |
Verify item integrity. More... | |
rpmRC | rpmpkgRead (const char *fn, FD_t fd, void *ptr, const char **msg) |
Read item from file descriptor. More... | |
rpmRC | rpmpkgWrite (const char *fn, FD_t fd, void *ptr, const char **msg) |
Write item onto file descriptor. More... | |
Variables | |
int | _pkgio_debug = 0 |
static unsigned char | lead_magic [] |
#define timedRead (ufdio->read) |
Definition at line 63 of file pkgio.c.
Referenced by rdLead(), rdSignature(), and rpmReadHeader().
Check metadata header.
fd | file handle |
ptr | metadata header |
*msg | failure msg |
Definition at line 1372 of file pkgio.c.
References headerFree(), headerLoad(), RPMRC_FAIL, and RPMRC_OK.
Referenced by rpmpkgCheck().
Check header consistency, performing headerGet() the hard way.
Check header consistency, performing headerGetEntry() the hard way.
Sanity checks on the header are performed while looking for a header-only digest or signature to verify the blob. If found, the digest or signature is verified.
dig | signature parameters container |
uh | unloaded header blob |
uc | no. of bytes in blob (or 0 to disable) |
*msg | signature verification msg |
Definition at line 1027 of file pkgio.c.
References _, _free(), alloca(), entryInfo_s::count, headerGetMagic(), headerVerifyInfo(), indexEntry_s::info, entryInfo_s::offset, pgpDigVSFlags, pgpGetSig(), PGPHASHALGO_SHA1, pgpPktLen(), pgpSetSig(), pgpStatsAccumulator(), REGION_TAG_COUNT, REGION_TAG_TYPE, RPM_BIN_TYPE, RPM_STRING_TYPE, RPMDIGEST_NONE, rpmDigestInit(), rpmDigestUpdate(), rpmlog(), RPMLOG_ERR, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, rpmswEnter(), rpmswExit(), RPMTAG_DSAHEADER, RPMTAG_HEADERIMMUTABLE, RPMTAG_RSAHEADER, RPMTAG_SHA1HEADER, rpmVerifySignature(), RPMVSF_NODSAHEADER, RPMVSF_NORSAHEADER, RPMVSF_NOSHA1HEADER, snprintf(), entryInfo_s::tag, entryInfo_s::type, vsflags, xmalloc, and xstrdup().
Referenced by rpmReadHeader(), rpmts_HdrCheck(), and showVerifyPackage().
Print package size.
fd | package file handle |
siglen | signature header size |
pad | signature padding |
datalen | length of header+payload |
Definition at line 711 of file pkgio.c.
References D_, Fileno(), Fstat(), rpmlog(), RPMLOG_DEBUG, rpmpkgSizeof(), RPMRC_FAIL, and RPMRC_OK.
Referenced by rdSignature().
Read metadata header.
fd | file handle |
*ptr | metadata header (or NULL) |
*msg | failure msg |
Definition at line 1589 of file pkgio.c.
References rpmReadHeader().
Referenced by rpmpkgRead().
Read lead from file handle.
fd | file handle |
*ptr | package lead |
*msg | failure msg |
Definition at line 547 of file pkgio.c.
References _, _free(), rpmlead::archnum, errno, fdGetOPath(), fdGetXAR(), fdSetXAR(), Ferror(), Fstrerror(), rpmlead::magic, rpmlead::major, rpmlead::osnum, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, rpmxarFree(), rpmxarNew(), rpmxarNext(), rpmxarPull(), rpmxarSwapBuf(), rpmlead::signature_type, snprintf(), timedRead, rpmlead::type, xcalloc(), and xstrdup().
Referenced by rpmpkgRead().
Read (and verify header+payload size) signature header.
fd | file handle |
*ptr | signature header (or NULL) |
*msg | failure msg |
< Is 1st header region mmap'd?
< Is 1st header region rdonly?
< Is 1st header region allocated?
< Signature header?
Definition at line 751 of file pkgio.c.
References _, _free(), alloca(), entryInfo_s::count, errno, fdGetXAR(), FDSTAT_READ, headerToken_s::flags, HEADERFLAG_ALLOCATED, HEADERFLAG_MAPPED, HEADERFLAG_RDONLY, HEADERFLAG_SIGNATURE, headerFree(), headerGet(), headerGetMagic(), headerLink(), headerLoad(), headerSetEndOff(), headerSetStartOff(), headerSizeof(), headerVerifyInfo(), indexEntry_s::info, entryInfo_s::offset, _HE_s::p, printSize(), rpmDataType_u::ptr, REGION_TAG_COUNT, REGION_TAG_TYPE, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMSIGTAG_SIZE, RPMTAG_HEADERIMAGE, RPMTAG_HEADERSIGNATURES, rpmxarNext(), rpmxarPull(), snprintf(), _FD_s::stats, entryInfo_s::tag, _HE_s::tag, timedRead, entryInfo_s::type, rpmDataType_u::ui32p, xmalloc, and xstrdup().
Referenced by rpmpkgRead().
Verify item integrity.
fn | item name |
fd | file handle |
ptr | item buffer |
*msg | item check failure message |
Definition at line 1635 of file pkgio.c.
References ckHeader(), and RPMRC_FAIL.
Read item from file descriptor.
fn | item name |
fd | file handle |
*ptr | item buffer |
*msg | item check failure message |
Definition at line 1647 of file pkgio.c.
References rdHeader(), rdLead(), rdSignature(), and RPMRC_FAIL.
Referenced by makeHDRSignature(), processScriptFiles(), readFile(), rpmgiNext(), rpmReadHeaders(), rpmReadPackageFile(), rpmReSign(), rpmSingleHeaderFromFD(), rpmVerifySignatures(), and writeRPM().
size_t rpmpkgSizeof | ( | const char * | fn, |
const void * | ptr | ||
) |
Return size of item in bytes.
fn | item name |
ptr | item buffer |
Definition at line 1619 of file pkgio.c.
References szHeader().
Referenced by printSize(), processScriptFiles(), rpmpsmStage(), and writeRPM().
Write item onto file descriptor.
fn | item name |
fd | file handle |
ptr | item buffer |
*msg | item check failure message |
Definition at line 1665 of file pkgio.c.
References RPMRC_FAIL, wrHeader(), wrLead(), and wrSignature().
Referenced by makeHDRSignature(), rpmpsmStage(), rpmReSign(), rpmWriteHeaders(), and writeRPM().
Return checked and loaded header.
fd | file handle |
hdrp | address of header (or NULL) |
*msg | verification error message (or NULL) |
< Is 1st header region mmap'd?
< Is 1st header region rdonly?
< Is 1st header region allocated?
Definition at line 1396 of file pkgio.c.
References _, _free(), errno, fdGetDig(), fdGetOPath(), fdGetXAR(), fdSetDig(), FDSTAT_READ, headerToken_s::flags, Fstat(), hdrchkData, hdrchkTags, headerCheck(), HEADERFLAG_ALLOCATED, HEADERFLAG_MAPPED, HEADERFLAG_RDONLY, headerFree(), headerGetMagic(), headerGetStatbuf(), headerLink(), headerLoad(), headerSetEndOff(), headerSetOrigin(), headerSetStartOff(), pgpDigFree(), pgpDigLink(), pgpDigNew(), Realpath(), RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMVSF_DEFAULT, rpmxarNext(), rpmxarPull(), snprintf(), _FD_s::stats, timedRead, urlPath(), xmalloc, and xstrdup().
Referenced by rdHeader().
void rpmtsCleanDig | ( | rpmts | ts | ) |
Free signature verification data.
ts | transaction set |
Definition at line 457 of file pkgio.c.
References pgpDigFree(), pgpStatsAccumulator(), rpmswAdd(), RPMTS_OP_DIGEST, RPMTS_OP_SIGNATURE, and rpmtsOp().
Referenced by rpmnsProbeSignature(), rpmReadPackageFile(), rpmtsClean(), rpmtsVerifyDB(), rpmVerifySignatures(), and showVerifyPackage().
Get OpenPGP packet parameters, i.e.
signature/pubkey constants.
ts | transaction set |
Definition at line 442 of file pkgio.c.
References pgpDigNew(), pgpSetFindPubkey(), rpmtsFindPubkey(), and RPMVSF_DEFAULT.
Referenced by rpmnsProbeSignature(), rpmReadPackageFile(), rpmtsFindPubkey(), rpmtsPubkey(), rpmVerifySignatures(), and showVerifyPackage().
Retrieve pubkey from rpm database.
ts | rpm transaction |
_dig | container (NULL uses rpmtsDig(ts) instead). |
Definition at line 162 of file pkgio.c.
References _, _free(), alloca(), rpmDataType_u::argv, _HE_s::c, headerGet(), _HE_s::p, PGPARMOR_PUBKEY, pgpGetPubkey(), pgpGetSignature(), pgpGrab(), pgpGrabPkts(), pgpHexStr(), PGPPUBKEYALGO_DSA, PGPPUBKEYALGO_RSA, pgpPubkeyFingerprint(), pgpReadPkts(), rpmDataType_u::ptr, RPM_STRING_ARRAY_TYPE, rpmdbOpen(), rpmExpand(), rpmGetPath(), rpmiobNew(), rpmkuFindPubkey(), rpmkuStorePubkey(), rpmlog(), RPMLOG_DEBUG, RPMLOG_ERR, rpmmiFree(), rpmmiInit(), rpmmiInstance(), rpmmiNext(), RPMRC_FAIL, RPMRC_NOKEY, RPMRC_NOSIG, RPMRC_NOTFOUND, RPMRC_NOTTRUSTED, RPMRC_OK, RPMTAG_PUBKEYS, rpmtsDig(), rpmtsGetRdb(), _HE_s::t, _HE_s::tag, xmalloc, and xstrdup().
Referenced by rpmtsDig(), and rpmtsVerifyDB().
Get transaction set database handle.
ts | transaction set |
Definition at line 151 of file pkgio.c.
Referenced by _rpmtsCheck(), _rpmtsRun(), checkDependentConflicts(), checkDependentPackages(), extractRegular(), fsmStage(), ftsCacheUpdate(), handleOneScriptTrigger(), handleOneTrigger(), rpmcliImportPubkey(), rpmdbTriggerGlobs(), rpmgiNext(), rpmpsmStage(), rpmts_dealloc(), rpmts_free(), rpmts_Match(), rpmts_new(), rpmtsAddInstallElement(), rpmtsFindBaseNamesInDB(), rpmtsFindPubkey(), rpmtsLoadNVRA(), rpmtsPrepare(), rpmtsProcess(), rpmtsRebuildDB(), rpmtsRollback(), rpmtsSanityCheck(), rpmtsSetKeyring(), runImmedTriggers(), runScript(), runTriggers(), and unsatisfiedDepend().
Retrieve operation timestamp from a transaction set.
ts | transaction set |
opx | operation timestamp index |
Definition at line 133 of file pkgio.c.
References RPMTS_OP_MAX.
Referenced by _rpmtsCheck(), fsmTeardown(), iosmTeardown(), psmWait(), rpmpsmStage(), rpmReadPackageFile(), rpmrepoFclose(), rpmrepoRfileDigest(), rpmtsAddFingerprints(), rpmtsCleanDig(), rpmtsCloseDB(), rpmtsCloseSDB(), rpmtsCreate(), rpmtsPrepare(), rpmtsPrintStats(), rpmtsProcess(), and rpmtsRepackage().
pgpDigParams rpmtsPubkey | ( | const rpmts | ts | ) |
Return OpenPGP pubkey constants.
ts | transaction set |
Definition at line 144 of file pkgio.c.
References pgpGetPubkey(), and rpmtsDig().
Write (with unload) header to file handle.
fd | file handle |
h | header |
*msg | failure msg |
Definition at line 75 of file pkgio.c.
References _, _free(), Ferror(), Fstrerror(), Fwrite(), headerGetMagic(), headerUnload(), RPMRC_FAIL, RPMRC_OK, and xstrdup().
Referenced by wrHeader(), and wrSignature().
|
static |
Return size of Header.
ptr | metadata header (at least 32 bytes) |
Definition at line 1355 of file pkgio.c.
Referenced by rpmpkgSizeof().
ssize_t timedRead | ( | FD_t | fd, |
void * | bufptr, | ||
size_t | length | ||
) |
Write metadata header.
fd | file handle |
ptr | metadata header |
*msg | failure msg |
Definition at line 1607 of file pkgio.c.
References rpmWriteHeader().
Referenced by rpmpkgWrite().
Write lead to file handle.
fd | file handle |
ptr | package lead |
*msg | name to include in lead (or NULL) |
Definition at line 509 of file pkgio.c.
References rpmlead::archnum, Fwrite(), rpmlead::magic, rpmlead::major, rpmlead::name, rpmlead::osnum, RPMRC_FAIL, RPMRC_OK, rpmlead::signature_type, and rpmlead::type.
Referenced by rpmpkgWrite().
Write signature header.
fd | file handle |
ptr | signature header |
*msg | failure msg |
Definition at line 674 of file pkgio.c.
References D_, Fwrite(), headerSizeof(), rpmlog(), RPMLOG_DEBUG, RPMRC_FAIL, RPMRC_OK, and rpmWriteHeader().
Referenced by rpmpkgWrite().