rpm  5.4.14
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...
 
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 1372 of file pkgio.c.

References h, headerFree, headerLoad(), NULL, rc, RPMRC_FAIL, RPMRC_OK, and void.

Referenced by rpmpkgCheck().

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 1027 of file pkgio.c.

References _, _free(), alloca(), assert(), b, buf, entryInfo_s::count, exit, fprintf(), headerGetMagic(), headerVerifyInfo(), i, indexEntry_s::info, int, memset(), nb, NULL, entryInfo_s::offset, op, pgpDigVSFlags, pgpGetSig(), PGPHASHALGO_SHA1, pgpPktLen(), pgpSetSig(), pgpStatsAccumulator(), rc, 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, siglen, snprintf(), entryInfo_s::tag, entryInfo_s::type, unsigned, void, vsflags, xmalloc, xstrdup(), and xx.

Referenced by rpmReadHeader(), 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 711 of file pkgio.c.

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

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 1589 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 547 of file pkgio.c.

References _, _free(), rpmlead::archnum, assert(), b, buf, errno, exit, fdGetOPath(), fdGetXAR(), fdSetXAR(), Ferror(), fn, fprintf(), Fstrerror(), rpmlead::magic, rpmlead::major, nb, NULL, rpmlead::osnum, rc, RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, rpmxarFree(), rpmxarNew(), rpmxarNext(), rpmxarPull(), rpmxarSwapBuf(), rpmlead::signature_type, snprintf(), timedRead, rpmlead::type, unsigned, void, xcalloc(), xstrdup(), and xx.

Referenced by rpmpkgRead().

static rpmRC rdSignature ( FD_t  fd,
void ptr,
const char **  msg 
)
static
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 1635 of file pkgio.c.

References ckHeader(), NULL, rc, RPMRC_FAIL, and strcmp().

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 1647 of file pkgio.c.

References NULL, rc, rdHeader(), rdLead(), rdSignature(), RPMRC_FAIL, and strcmp().

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 1619 of file pkgio.c.

References len, strcmp(), 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 1665 of file pkgio.c.

References NULL, rc, RPMRC_FAIL, strcmp(), 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 1396 of file pkgio.c.

References _, _free(), b, buf, dig, errno, exit, fdGetDig(), fdGetOPath(), fdGetXAR(), fdno, fdSetDig(), FDSTAT_READ, headerToken_s::flags, flags, fprintf(), Fstat(), h, hdrchkData, hdrchkTags, headerCheck(), HEADERFLAG_ALLOCATED, HEADERFLAG_MAPPED, HEADERFLAG_RDONLY, headerFree, headerGetMagic(), headerGetStatbuf(), headerLink(), headerLoad(), headerSetEndOff(), headerSetOrigin(), headerSetStartOff(), int, memset(), nb, NULL, pgpDigFree(), pgpDigLink(), pgpDigNew(), rc, Realpath(), RPMRC_FAIL, RPMRC_NOTFOUND, RPMRC_OK, RPMVSF_DEFAULT, rpmxarNext(), rpmxarPull(), snprintf(), st, _FD_s::stats, timedRead, uc, unsigned, urlPath(), void, xmalloc, xstrdup(), and xx.

Referenced by rdHeader().

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 1355 of file pkgio.c.

References assert(), NULL, and p.

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 1607 of file pkgio.c.

References h, and 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 509 of file pkgio.c.

References rpmlead::archnum, fd, fprintf(), Fwrite(), rpmlead::magic, rpmlead::major, rpmlead::name, rpmlead::osnum, RPMRC_FAIL, RPMRC_OK, rpmlead::signature_type, strncpy(), rpmlead::type, and void.

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 674 of file pkgio.c.

References D_, fd, fprintf(), Fwrite(), headerSizeof(), rc, rpmlog(), RPMLOG_DEBUG, RPMRC_FAIL, RPMRC_OK, and rpmWriteHeader().

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 495 of file pkgio.c.