260 lines
7.6 KiB
C
260 lines
7.6 KiB
C
#ifndef H_RPMLIB
|
|
#define H_RPMLIB
|
|
|
|
/** \ingroup rpmcli rpmrc rpmdep rpmtrans rpmdb lead signature header payload dbi
|
|
* \file lib/rpmlib.h
|
|
*
|
|
* In Memoriam: Steve Taylor <staylor@redhat.com> was here, now he's not.
|
|
*
|
|
*/
|
|
|
|
#include <popt.h>
|
|
|
|
#include <rpm/rpmio.h>
|
|
#include <rpm/header.h>
|
|
#include <rpm/rpmtag.h>
|
|
#include <rpm/rpmds.h> /* XXX move rpmlib provides to rpmds instead */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern struct rpmMacroContext_s * rpmGlobalMacroContext;
|
|
|
|
extern struct rpmMacroContext_s * rpmCLIMacroContext;
|
|
|
|
extern const char * const RPMVERSION;
|
|
|
|
extern const char * const rpmNAME;
|
|
|
|
extern const char * const rpmEVR;
|
|
|
|
extern const int rpmFLAGS;
|
|
|
|
/** \ingroup header
|
|
* Translate and merge legacy signature tags into header.
|
|
* @todo Remove headerSort() through headerInitIterator() modifies sig.
|
|
* @param h header
|
|
* @param sigh signature header
|
|
*/
|
|
void headerMergeLegacySigs(Header h, const Header sigh);
|
|
|
|
/** \ingroup header
|
|
* Regenerate signature header.
|
|
* @todo Remove headerSort() through headerInitIterator() modifies h.
|
|
* @param h header
|
|
* @param noArchiveSize don't copy archive size tag (pre rpm-4.1)
|
|
* @return regenerated signature header
|
|
*/
|
|
Header headerRegenSigHeader(const Header h, int noArchiveSize);
|
|
|
|
/* ==================================================================== */
|
|
/** \name RPMRC */
|
|
|
|
/** \ingroup rpmrc
|
|
* Build and install arch/os table identifiers.
|
|
* @todo Eliminate from API.
|
|
*/
|
|
enum rpm_machtable_e {
|
|
RPM_MACHTABLE_INSTARCH = 0, /*!< Install platform architecture. */
|
|
RPM_MACHTABLE_INSTOS = 1, /*!< Install platform operating system. */
|
|
RPM_MACHTABLE_BUILDARCH = 2, /*!< Build platform architecture. */
|
|
RPM_MACHTABLE_BUILDOS = 3 /*!< Build platform operating system. */
|
|
};
|
|
#define RPM_MACHTABLE_COUNT 4 /*!< No. of arch/os tables. */
|
|
|
|
/** \ingroup rpmrc
|
|
* Read macro configuration file(s) for a target.
|
|
* @param file colon separated files to read (NULL uses default)
|
|
* @param target target platform (NULL uses default)
|
|
* @return 0 on success, -1 on error
|
|
*/
|
|
int rpmReadConfigFiles(const char * file,
|
|
const char * target);
|
|
|
|
/** \ingroup rpmrc
|
|
* Return current arch name and/or number.
|
|
* @todo Generalize to extract arch component from target_platform macro.
|
|
* @retval name address of arch name (or NULL)
|
|
* @retval num address of arch number (or NULL)
|
|
*/
|
|
void rpmGetArchInfo( const char ** name,
|
|
int * num);
|
|
|
|
/** \ingroup rpmrc
|
|
* Return current os name and/or number.
|
|
* @todo Generalize to extract os component from target_platform macro.
|
|
* @retval name address of os name (or NULL)
|
|
* @retval num address of os number (or NULL)
|
|
*/
|
|
void rpmGetOsInfo( const char ** name,
|
|
int * num);
|
|
|
|
/** \ingroup rpmrc
|
|
* Return arch/os score of a name.
|
|
* An arch/os score measures the "nearness" of a name to the currently
|
|
* running (or defined) platform arch/os. For example, the score of arch
|
|
* "i586" on an i686 platform is (usually) 2. The arch/os score is used
|
|
* to select one of several otherwise identical packages using the arch/os
|
|
* tags from the header as hints of the intended platform for the package.
|
|
* @todo Rewrite to use RE's against config.guess target platform output.
|
|
*
|
|
* @param type any of the RPM_MACHTABLE_* constants
|
|
* @param name name
|
|
* @return arch score (0 is no match, lower is preferred)
|
|
*/
|
|
int rpmMachineScore(int type, const char * name);
|
|
|
|
/** \ingroup rpmrc
|
|
* Display current rpmrc (and macro) configuration.
|
|
* @param fp output file handle
|
|
* @return 0 always
|
|
*/
|
|
int rpmShowRC(FILE * fp);
|
|
|
|
/** \ingroup rpmrc
|
|
* @deprecated Use addMacro to set _target_* macros.
|
|
* @todo Eliminate from API.
|
|
# @note Only used by build code.
|
|
* @param archTable
|
|
* @param osTable
|
|
*/
|
|
void rpmSetTables(int archTable, int osTable);
|
|
|
|
/** \ingroup rpmrc
|
|
* Destroy rpmrc arch/os compatibility tables.
|
|
* @todo Eliminate from API.
|
|
*/
|
|
void rpmFreeRpmrc(void);
|
|
|
|
/**
|
|
* Compare headers to determine which header is "newer".
|
|
* @param first 1st header
|
|
* @param second 2nd header
|
|
* @return result of comparison
|
|
*/
|
|
int rpmVersionCompare(Header first, Header second);
|
|
|
|
/** \ingroup header
|
|
* Check for supported payload format in header.
|
|
* @param h header to check
|
|
* @return RPMRC_OK if supported, RPMRC_FAIL otherwise
|
|
*/
|
|
rpmRC headerCheckPayloadFormat(Header h);
|
|
|
|
/** \ingroup header
|
|
* 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.
|
|
*
|
|
* @param ts transaction set
|
|
* @param uh unloaded header blob
|
|
* @param uc no. of bytes in blob (or 0 to disable)
|
|
* @retval *msg verification error message (or NULL)
|
|
* @return RPMRC_OK on success
|
|
*/
|
|
rpmRC headerCheck(rpmts ts, const void * uh, size_t uc, char ** msg);
|
|
|
|
/** \ingroup header
|
|
* Return checked and loaded header.
|
|
* @param ts transaction set
|
|
* @param fd file handle
|
|
* @retval hdrp address of header (or NULL)
|
|
* @retval *msg verification error message (or NULL)
|
|
* @return RPMRC_OK on success
|
|
*/
|
|
rpmRC rpmReadHeader(rpmts ts, FD_t fd, Header *hdrp, char ** msg);
|
|
|
|
/** \ingroup header
|
|
* Return package header from file handle, verifying digests/signatures.
|
|
* @param ts transaction set
|
|
* @param fd file handle
|
|
* @param fn file name
|
|
* @retval hdrp address of header (or NULL)
|
|
* @return RPMRC_OK on success
|
|
*/
|
|
rpmRC rpmReadPackageFile(rpmts ts, FD_t fd,
|
|
const char * fn, Header * hdrp);
|
|
|
|
/** \ingroup rpmtrans
|
|
* Install source package.
|
|
* @param ts transaction set
|
|
* @param fd file handle
|
|
* @retval specFilePtr address of spec file name (or NULL)
|
|
* @retval cookie address of cookie pointer (or NULL)
|
|
* @return rpmRC return code
|
|
*/
|
|
rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd,
|
|
char ** specFilePtr,
|
|
char ** cookie);
|
|
|
|
/** \ingroup rpmtrans
|
|
* Segmented string compare for version and/or release.
|
|
*
|
|
* @param a 1st string
|
|
* @param b 2nd string
|
|
* @return +1 if a is "newer", 0 if equal, -1 if b is "newer"
|
|
*/
|
|
int rpmvercmp(const char * a, const char * b);
|
|
|
|
/**
|
|
* Release storage used by file system usage cache.
|
|
*/
|
|
void rpmFreeFilesystems(void);
|
|
|
|
/**
|
|
* Return (cached) file system mount points.
|
|
* @retval listptr addess of file system names (or NULL)
|
|
* @retval num address of number of file systems (or NULL)
|
|
* @return 0 on success, 1 on error
|
|
*/
|
|
int rpmGetFilesystemList( const char *** listptr,
|
|
unsigned int * num);
|
|
|
|
/**
|
|
* Determine per-file system usage for a list of files.
|
|
* @param fileList array of absolute file names
|
|
* @param fssizes array of file sizes
|
|
* @param numFiles number of files in list
|
|
* @retval usagesPtr address of per-file system usage array (or NULL)
|
|
* @param flags (unused)
|
|
* @return 0 on success, 1 on error
|
|
*/
|
|
int rpmGetFilesystemUsage(const char ** fileList, rpm_off_t * fssizes,
|
|
unsigned int numFiles, uint32_t ** usagesPtr,
|
|
int flags);
|
|
|
|
/* ==================================================================== */
|
|
/** \name RPMK */
|
|
|
|
/** \ingroup signature
|
|
* Verify a signature from a package.
|
|
*
|
|
* This needs the following variables from the transaction set:
|
|
* - ts->sigtag type of signature
|
|
* - ts->sig signature itself (from signature header)
|
|
* - ts->siglen no. of bytes in signature
|
|
* - ts->dig signature/pubkey parameters (malloc'd workspace)
|
|
*
|
|
* @param ts transaction set
|
|
* @retval result detailed text result of signature verification
|
|
* (malloc'd)
|
|
* @return result of signature verification
|
|
*/
|
|
rpmRC rpmVerifySignature(const rpmts ts, char ** result);
|
|
|
|
/** \ingroup signature
|
|
* Destroy signature header from package.
|
|
* @param h signature header
|
|
* @return NULL always
|
|
*/
|
|
Header rpmFreeSignature(Header h);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* H_RPMLIB */
|