rpm
5.4.15
|
#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... | |
static int | hBlobDigest (const void *uh, pgpDig dig, pgpHashAlgo hash_algo, const unsigned char *regionEnd, rpmuint32_t ril, DIGEST_CTX *ctxp) |
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 1398 of file pkgio.c.
References headerFree(), headerLoad(), RPMRC_FAIL, and RPMRC_OK.
Referenced by rpmpkgCheck().
|
static |
Definition at line 1013 of file pkgio.c.
References b, headerGetMagic(), op, pgpStatsAccumulator(), RPMDIGEST_NONE, rpmDigestInit(), rpmDigestUpdate(), rpmswEnter(), and rpmswExit().
Referenced by headerCheck().
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 1075 of file pkgio.c.
References _, _free(), alloca(), b, entryInfo_s::count, hBlobDigest(), headerVerifyInfo(), i, indexEntry_s::info, entryInfo_s::offset, pgpDigVSFlags, pgpGetSig(), PGPHASHALGO_SHA1, pgpPktLen(), pgpSetSig(), REGION_TAG_COUNT, REGION_TAG_TYPE, RPM_BIN_TYPE, RPM_STRING_TYPE, rpmhkpLoadSignature(), rpmlog(), RPMLOG_ERR, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMTAG_DSAHEADER, RPMTAG_ECDSAHEADER, RPMTAG_HEADERIMMUTABLE, RPMTAG_RSAHEADER, RPMTAG_SHA1HEADER, rpmVerifySignature(), RPMVSF_NODSAHEADER, RPMVSF_NOECDSAHEADER, 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 710 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 1616 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 546 of file pkgio.c.
References _, _free(), rpmlead::archnum, b, 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 750 of file pkgio.c.
References _, _free(), alloca(), entryInfo_s::count, errno, fdGetXAR(), FDSTAT_READ, headerToken_s::flags, flags, HEADERFLAG_ALLOCATED, HEADERFLAG_MAPPED, HEADERFLAG_RDONLY, HEADERFLAG_SIGNATURE, headerFree(), headerGet(), headerGetMagic(), headerLink(), headerLoad(), headerSetEndOff(), headerSetStartOff(), headerSizeof(), headerVerifyInfo(), i, 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 1662 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 1674 of file pkgio.c.
References rdHeader(), rdLead(), rdSignature(), and RPMRC_FAIL.
Referenced by makeHDRSignature(), 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 1646 of file pkgio.c.
References len, and szHeader().
Referenced by printSize(), 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 1692 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 1422 of file pkgio.c.
References _, _free(), b, errno, fdGetDig(), fdGetOPath(), fdGetXAR(), fdSetDig(), FDSTAT_READ, headerToken_s::flags, 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 456 of file pkgio.c.
References pgpDigFree(), pgpStatsAccumulator(), rpmswAdd(), RPMTS_OP_DIGEST, RPMTS_OP_SIGNATURE, and rpmtsOp().
Referenced by rpmnsProbeSignature(), rpmReadPackageFile(), rpmtsClean(), rpmVerifySignatures(), and showVerifyPackage().
Get OpenPGP packet parameters, i.e.
signature/pubkey constants.
ts | transaction set |
Definition at line 441 of file pkgio.c.
References pgpDigNew(), pgpSetFindPubkey(), rpmtsFindPubkey(), RPMVSF_DEFAULT, and ts.
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(), _pgpPubkeyAlgo2Name(), _rpmhkp_debug, _rpmhkpDumpDig(), alloca(), rpmDataType_u::argv, _HE_s::c, headerGet(), _HE_s::p, PGPARMOR_PUBKEY, pgpGetPubkey(), pgpGetSignature(), pgpGrab(), pgpGrabPkts(), pgpHexStr(), pgpPubkeyFingerprint(), pgpReadPkts(), rpmDataType_u::ptr, RPM_STRING_ARRAY_TYPE, rpmbfAdd(), rpmbfChk(), rpmbfFree(), rpmbfLink(), rpmdbOpen(), rpmExpand(), rpmGetPath(), rpmhkpFindKey(), rpmhkpFree(), rpmhkpLink(), rpmhkpNew(), rpmhkpValidate(), 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().
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(), 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 op, and RPMTS_OP_MAX.
Referenced by _orgrpmtsOrder(), _rpmtsCheck(), _rpmtsOrder(), 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 1381 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 1634 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 508 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 673 of file pkgio.c.
References D_, Fwrite(), headerSizeof(), rpmlog(), RPMLOG_DEBUG, RPMRC_FAIL, RPMRC_OK, rpmWriteHeader(), and zero.
Referenced by rpmpkgWrite().