rpm  5.4.15
Data Structures | Macros | Functions | Variables
pkgio.c File Reference
#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"
Include dependency graph for pkgio.c:

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 []
 

Macro Definition Documentation

#define _RPMHKP_INTERNAL

Definition at line 20 of file pkgio.c.

#define _RPMIOB_INTERNAL

Definition at line 14 of file pkgio.c.

#define _RPMTAG_INTERNAL

Definition at line 24 of file pkgio.c.

#define _RPMTS_INTERNAL

Definition at line 30 of file pkgio.c.

#define timedRead   (ufdio->read)

Definition at line 63 of file pkgio.c.

Referenced by rdLead(), rdSignature(), and rpmReadHeader().

Function Documentation

static rpmRC ckHeader ( FD_t  fd,
const void *  ptr,
const char **  msg 
)
static

Check metadata header.

Parameters
fdfile handle
ptrmetadata header
Return values
*msgfailure msg
Returns
rpmRC return code

Definition at line 1398 of file pkgio.c.

References headerFree(), headerLoad(), RPMRC_FAIL, and RPMRC_OK.

Referenced by rpmpkgCheck().

static int hBlobDigest ( const void *  uh,
pgpDig  dig,
pgpHashAlgo  hash_algo,
const unsigned char *  regionEnd,
rpmuint32_t  ril,
DIGEST_CTX ctxp 
)
static
rpmRC headerCheck ( pgpDig  dig,
const void *  uh,
size_t  uc,
const char **  msg 
)

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.

Parameters
digsignature parameters container
uhunloaded header blob
ucno. of bytes in blob (or 0 to disable)
Return values
*msgsignature verification msg
Returns
RPMRC_OK/RPMRC_NOTFOUND/RPMRC_FAIL

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().

static rpmRC printSize ( FD_t  fd,
size_t  siglen,
size_t  pad,
size_t  datalen 
)
inlinestatic

Print package size.

Parameters
fdpackage file handle
siglensignature header size
padsignature padding
datalenlength of header+payload
Returns
rpmRC return code

Definition at line 710 of file pkgio.c.

References D_, Fileno(), Fstat(), rpmlog(), RPMLOG_DEBUG, rpmpkgSizeof(), RPMRC_FAIL, and RPMRC_OK.

Referenced by rdSignature().

static rpmRC rdHeader ( FD_t  fd,
void *  ptr,
const char **  msg 
)
static

Read metadata header.

Parameters
fdfile handle
Return values
*ptrmetadata header (or NULL)
*msgfailure msg
Returns
rpmRC return code

Definition at line 1616 of file pkgio.c.

References rpmReadHeader().

Referenced by rpmpkgRead().

static rpmRC rdLead ( FD_t  fd,
void *  ptr,
const char **  msg 
)
static

Read lead from file handle.

Parameters
fdfile handle
Return values
*ptrpackage lead
*msgfailure msg
Returns
rpmRC return code

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().

static rpmRC rdSignature ( FD_t  fd,
void *  ptr,
const char **  msg 
)
static

Read (and verify header+payload size) signature header.

Parameters
fdfile handle
Return values
*ptrsignature header (or NULL)
*msgfailure msg
Returns
rpmRC return code

< 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().

rpmRC rpmpkgCheck ( const char *  fn,
FD_t  fd,
const void *  ptr,
const char **  msg 
)

Verify item integrity.

Parameters
fnitem name
fdfile handle
ptritem buffer
Return values
*msgitem check failure message
Returns
RPMRC_OK on success

Definition at line 1662 of file pkgio.c.

References ckHeader(), and RPMRC_FAIL.

rpmRC rpmpkgRead ( const char *  fn,
FD_t  fd,
void *  ptr,
const char **  msg 
)

Read item from file descriptor.

Parameters
fnitem name
fdfile handle
Return values
*ptritem buffer
*msgitem check failure message
Returns
RPMRC_OK on success

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.

Parameters
fnitem name
ptritem buffer
Returns
size of item in bytes.

Definition at line 1646 of file pkgio.c.

References len, and szHeader().

Referenced by printSize(), rpmpsmStage(), and writeRPM().

rpmRC rpmpkgWrite ( const char *  fn,
FD_t  fd,
void *  ptr,
const char **  msg 
)

Write item onto file descriptor.

Parameters
fnitem name
fdfile handle
ptritem buffer
Return values
*msgitem check failure message
Returns
RPMRC_OK on success

Definition at line 1692 of file pkgio.c.

References RPMRC_FAIL, wrHeader(), wrLead(), and wrSignature().

Referenced by makeHDRSignature(), rpmpsmStage(), rpmReSign(), rpmWriteHeaders(), and writeRPM().

static rpmRC rpmReadHeader ( FD_t  fd,
Header hdrp,
const char **  msg 
)
static

Return checked and loaded header.

Parameters
fdfile handle
Return values
hdrpaddress of header (or NULL)
*msgverification error message (or NULL)
Returns
RPMRC_OK on success

< 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.

Parameters
tstransaction 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().

pgpDig rpmtsDig ( rpmts  ts)

Get OpenPGP packet parameters, i.e.

signature/pubkey constants.

Parameters
tstransaction set
Returns
signature/pubkey constants.

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().

rpmRC rpmtsFindPubkey ( rpmts  ts,
void *  _dig 
)
rpmdb rpmtsGetRdb ( rpmts  ts)
rpmop rpmtsOp ( rpmts  ts,
rpmtsOpX  opx 
)

Retrieve operation timestamp from a transaction set.

Parameters
tstransaction set
opxoperation timestamp index
Returns
pointer to operation timestamp.

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.

Parameters
tstransaction set
Returns
pubkey constants.

Definition at line 144 of file pkgio.c.

References pgpGetPubkey(), and rpmtsDig().

static rpmRC rpmWriteHeader ( FD_t  fd,
Header  h,
const char **  msg 
)
static

Write (with unload) header to file handle.

Parameters
fdfile handle
hheader
Return values
*msgfailure msg
Returns
RPMRC_OK on success

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 size_t szHeader ( const void *  ptr)
static

Return size of Header.

Parameters
ptrmetadata header (at least 32 bytes)
Returns
size of header

Definition at line 1381 of file pkgio.c.

Referenced by rpmpkgSizeof().

ssize_t timedRead ( FD_t  fd,
void *  bufptr,
size_t  length 
)
static rpmRC wrHeader ( FD_t  fd,
void *  ptr,
const char **  msg 
)
static

Write metadata header.

Parameters
fdfile handle
ptrmetadata header
Return values
*msgfailure msg
Returns
rpmRC return code

Definition at line 1634 of file pkgio.c.

References rpmWriteHeader().

Referenced by rpmpkgWrite().

static rpmRC wrLead ( FD_t  fd,
const void *  ptr,
const char **  msg 
)
static

Write lead to file handle.

Parameters
fdfile handle
ptrpackage lead
*msgname to include in lead (or NULL)
Returns
RPMRC_OK on success, RPMRC_FAIL on error

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().

static rpmRC wrSignature ( FD_t  fd,
void *  ptr,
const char **  msg 
)
static

Write signature header.

Parameters
fdfile handle
ptrsignature header
Return values
*msgfailure msg
Returns
rpmRC return code

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().

Variable Documentation

int _pkgio_debug = 0

Definition at line 55 of file pkgio.c.

unsigned char lead_magic[]
static
Initial value:
= {
0xed, 0xab, 0xee, 0xdb, 0x00, 0x00, 0x00, 0x00
}

Definition at line 494 of file pkgio.c.