#include "system.h"
#include <netinet/in.h>
#include <rpmio_internal.h>
#include <rpmlib.h>
#include "rpmts.h"
#include "rpmevr.h"
#include "misc.h"
#include "rpmlead.h"
#include "header_internal.h"
#include "signature.h"
#include "debug.h"
Include dependency graph for package.c:
Go to the source code of this file.
Defines | |
#define | alloca_strdup(_s) strcpy(alloca(strlen(_s)+1), (_s)) |
#define | hdrchkTags(_ntags) ((_ntags) & 0xffff0000) |
Sanity check on no. | |
#define | hdrchkType(_type) ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE) |
Sanity check on type values. | |
#define | hdrchkData(_nbytes) ((_nbytes) & 0xff000000) |
Sanity check on data size and/or offset and/or count. | |
#define | hdrchkAlign(_type, _off) ((_off) & (typeAlign[_type]-1)) |
Sanity check on data alignment for data type. | |
#define | hdrchkRange(_dl, _off) ((_off) < 0 || (_off) > (_dl)) |
Sanity check on range of data offset. | |
#define | _chk(_mask) (sigtag == 0 && !(vsflags & (_mask))) |
Functions | |
static int | dncmp (const void *a, const void *b) |
static void | compressFilelist (Header h) |
Convert absolute path tag to (dirname,basename,dirindex) tags. | |
static void | rpm3to4 (Header h) |
void | headerMergeLegacySigs (Header h, const Header sigh) |
Translate and merge legacy signature tags into header. | |
Header | headerRegenSigHeader (const Header h, int noArchiveSize) |
Regenerate signature header. | |
static int | rpmtsStashKeyid (rpmts ts) |
Remember current key id. | |
int | headerVerifyInfo (int il, int dl, const void *pev, void *iv, int negate) |
Perform simple sanity and range checks on header tag(s). | |
rpmRC | headerCheck (rpmts ts, const void *uh, size_t uc, const char **msg) |
Check header consistency, performing headerGetEntry() the hard way. | |
rpmRC | rpmReadHeader (rpmts ts, FD_t fd, Header *hdrp, const char **msg) |
Return checked and loaded header. | |
rpmRC | rpmReadPackageFile (rpmts ts, FD_t fd, const char *fn, Header *hdrp) |
Return package header from file handle, verifying digests/signatures. | |
Variables | |
static int | _print_pkts = 0 |
static unsigned int | nkeyids_max = 256 |
static unsigned int | nkeyids = 0 |
static unsigned int | nextkeyid = 0 |
static unsigned int * | keyids |
static unsigned char | header_magic [8] |
static int | typeAlign [16] |
Alignment needs (and sizeof scalars types) for internal rpm data types. |
Definition in file package.c.
|
Referenced by rpmReadPackageFile(). |
|
|
|
Sanity check on data alignment for data type.
Definition at line 91 of file package.c. Referenced by headerVerifyInfo(), and regionSwab(). |
|
Sanity check on data size and/or offset and/or count. This check imposes a limit of 16 MB, more than enough. Definition at line 86 of file package.c. Referenced by doHeaderUnload(), headerMergeLegacySigs(), headerVerifyInfo(), regionSwab(), and rpmReadHeader(). |
|
Sanity check on range of data offset.
Definition at line 96 of file package.c. Referenced by headerVerifyInfo(). |
|
Sanity check on no. of tags. This check imposes a limit of 65K tags, more than enough. Definition at line 75 of file package.c. Referenced by doHeaderUnload(), and rpmReadHeader(). |
|
Sanity check on type values.
Definition at line 80 of file package.c. Referenced by headerMergeLegacySigs(), headerVerifyInfo(), and regionSwab(). |
|
Convert absolute path tag to (dirname,basename,dirindex) tags.
Definition at line 113 of file package.c. References alloca(), dncmp(), headerAddEntry(), headerFreeData(), headerGetEntryMinMemory(), headerIsEntry(), headerRemoveEntry(), RPM_INT32_TYPE, RPM_STRING_ARRAY_TYPE, RPMTAG_BASENAMES, RPMTAG_DIRINDEXES, RPMTAG_DIRNAMES, and RPMTAG_OLDFILENAMES. |
|
|
|
|
Perform simple sanity and range checks on header tag(s).
Definition at line 423 of file package.c. References entryInfo_s::count, hdrchkAlign, hdrchkData, hdrchkRange, hdrchkType, entryInfo_s::offset, entryInfo_s::tag, and entryInfo_s::type. Referenced by headerCheck(), and rpmReadSignature(). |
|
Definition at line 207 of file package.c. References alloca(), compressFilelist(), headerAddOrAppendEntry(), headerFreeTag(), headerGetEntry(), headerNVR(), name, RPM_INT32_TYPE, RPM_STRING_ARRAY_TYPE, RPMSENSE_EQUAL, RPMTAG_EPOCH, RPMTAG_PROVIDEFLAGS, RPMTAG_PROVIDENAME, RPMTAG_PROVIDEVERSION, RPMTAG_RPMVERSION, and stpcpy(). Referenced by rpmReadPackageFile(). |
|
Return checked and loaded header.
Definition at line 790 of file package.c. References _, _free(), block(), fdGetOPath(), headerToken_s::flags, hdrchkData, hdrchkTags, header_magic, headerCheck(), HEADERFLAG_ALLOCATED, headerFree(), headerLink(), headerLoad(), headerSetOrigin(), RPMRC_FAIL, RPMRC_OK, snprintf(), timedRead, xmalloc(), and xstrdup(). Referenced by rpmReadPackageFile(). |
|
Return package header from file handle, verifying digests/signatures.
Definition at line 894 of file package.c. References _, _chk, _free(), _print_pkts, alloca(), entryInfo_s::count, rpmop_s::count, _FD_s::digests, fdInitDigest(), fdstat_op(), FDSTAT_READ, Fileno(), Fread(), Fstrerror(), pgpDigParams_s::hash_algo, _FDDIGEST_s::hashalgo, _FDDIGEST_s::hashctx, pgpDig_s::hdrmd5ctx, pgpDig_s::hdrsha1ctx, header_magic, headerFree(), headerFreeData(), headerGetEntry(), headerIsEntry(), headerLink(), headerMergeLegacySigs(), pgpDig_s::md5ctx, pgpDig_s::nbytes, _FD_s::ndigests, PGPHASHALGO_MD5, PGPHASHALGO_RIPEMD160, PGPHASHALGO_SHA1, PGPHASHALGO_SHA256, PGPHASHALGO_SHA384, PGPHASHALGO_SHA512, pgpPrtPkts(), readLead(), rpm3to4(), RPMDIGEST_NONE, rpmDigestInit(), rpmDigestUpdate(), RPMERR_FREAD, RPMERR_NEWPACKAGE, RPMERR_SIGGEN, rpmError, rpmFreeSignature(), rpmIsDebug, RPMMESS_DEBUG, RPMMESS_ERROR, RPMMESS_WARNING, rpmMessage, RPMRC_FAIL, RPMRC_NOKEY, RPMRC_NOTFOUND, RPMRC_NOTTRUSTED, RPMRC_OK, rpmReadHeader(), rpmReadSignature(), RPMSIGTAG_DSA, RPMSIGTAG_GPG, RPMSIGTAG_MD5, RPMSIGTAG_PGP, RPMSIGTAG_PGP5, RPMSIGTAG_RSA, RPMSIGTAG_SHA1, rpmswAdd(), rpmswEnter(), rpmswExit(), rpmswSub(), RPMTAG_HEADERIMMUTABLE, RPMTS_OP_DIGEST, RPMTS_OP_READHDR, RPMTS_OP_SIGNATURE, rpmtsCleanDig(), rpmtsDig(), rpmtsOp(), rpmtsSetSig(), rpmtsStashKeyid(), rpmtsVSFlags(), rpmVerifySignature(), RPMVSF_NEEDPAYLOAD, RPMVSF_NODSA, RPMVSF_NODSAHEADER, RPMVSF_NOMD5, RPMVSF_NORSA, RPMVSF_NORSAHEADER, RPMVSF_NOSHA1HEADER, pgpDig_s::sha1ctx, pgpDig_s::signature, _FD_s::stats, and pgpDigParams_s::version. Referenced by IDTXglob(), readRPM(), rpmgiReadHeader(), rpmInstall(), rpmInstallSourcePackage(), rpmts_HdrFromFdno(), rpmtsRun(), and rpmtsSolve(). |
|
Remember current key id.
Definition at line 384 of file package.c. References keyids, nextkeyid, nkeyids, nkeyids_max, pgpGrab(), rpmtsDig(), rpmtsSig(), rpmtsSignature(), pgpDigParams_s::signid, and xrealloc(). Referenced by rpmReadPackageFile(). |
|
Definition at line 32 of file package.c. Referenced by headerCheck(), rpmReadPackageFile(), and rpmVerifySignatures(). |
|
Initial value: { 0x8e, 0xad, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x00 } Definition at line 44 of file package.c. Referenced by headerCheck(), makeHDRSignature(), readFile(), rpmReadHeader(), rpmReadPackageFile(), and rpmReadSignature(). |
|
Definition at line 41 of file package.c. Referenced by rpmtsStashKeyid(). |
|
Definition at line 39 of file package.c. Referenced by rpmtsStashKeyid(). |
|
Definition at line 37 of file package.c. Referenced by rpmtsStashKeyid(). |
|
Definition at line 35 of file package.c. Referenced by rpmtsStashKeyid(). |
|
Initial value: { 1, 1, 1, 2, 4, 8, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }
|