# rpmmodule.c File Reference

`#include <errno.h>`
`#include <fcntl.h>`
`#include <time.h>`
`#include <sys/stat.h>`
`#include <sys/time.h>`
`#include <unistd.h>`
`#include <glob.h>`
`#include <dirent.h>`
`#include <locale.h>`
`#include "Python.h"`
`#include "rpmio_internal.h"`
`#include "rpmcli.h"`
`#include "misc.h"`
`#include "header_internal.h"`
`#include "upgrade.h"`

Go to the source code of this file.

## Module: rpm

typedef FDlist_t | FDlist
void | initrpm (void)
static PyObject * | rpmtransCreate (PyObject *self, PyObject *args)
static PyObject * | doAddMacro (PyObject *self, PyObject *args)
static PyObject * | doDelMacro (PyObject *self, PyObject *args)
static PyObject * | archScore (PyObject *self, PyObject *args)
static int | psGetArchScore (Header h)
static int | pkgCompareVer (void *first, void *second)
static void | pkgSort (struct pkgSet *psp)
static PyObject * | findUpgradeSet (PyObject *self, PyObject *args)
static PyObject * | rpmHeaderFromPackage (PyObject *self, PyObject *args)
static PyObject * | hdrLoad (PyObject *self, PyObject *args)
static PyObject * | rhnLoad (PyObject *self, PyObject *args)
static PyObject * | rpmInitDB (PyObject *self, PyObject *args)
static rpmdbObject * | rpmOpenDB (PyObject *self, PyObject *args)
static PyObject * | rebuildDB (PyObject *self, PyObject *args)
static PyObject * | rpmReadHeaders (FD_t fd)
static PyObject * | rpmHeaderFromFD (PyObject *self, PyObject *args)
static PyObject * | rpmHeaderFromFile (PyObject *self, PyObject *args)
static int | rpmMergeHeaders (PyObject *list, FD_t fd, int matchTag)
| This assumes the order of list matches the order of the new headers, and throws an exception if that isn't true.
static PyObject * | rpmMergeHeadersFromFD (PyObject *self, PyObject *args)
static void | errorcb (void)
static PyObject * | errorSetCallback (PyObject *self, PyObject *args)
static PyObject * | errorString (PyObject *self, PyObject *args)
static PyObject * | versionCompare (PyObject *self, PyObject *args)
static PyObject * | labelCompare (PyObject *self, PyObject *args)
static PyObject * | checkSig (PyObject *self, PyObject *args)
static PyObject * | getTsHeader (PyObject *self, PyObject *args)
static PyObject * | setVerbosity (PyObject *self, PyObject *args)
static int | closeCallback (FILE *f)
static PyObject * | doFopen (PyObject *self, PyObject *args)
static PyObject * | errorCB = NULL
static PyObject * | errorData = NULL
static FDlist * | fdhead = NULL
static FDlist * | fdtail = NULL
static PyMethodDef | rpmModuleMethods []

## Class: header

static PyObject * | hdrKeyList (hdrObject *s, PyObject *args)
static PyObject * | hdrUnload (hdrObject *s, PyObject *args, PyObject *keywords)
static PyObject * | hdrVerifyFile (hdrObject *s, PyObject *args)
static PyObject * | hdrExpandFilelist (hdrObject *s, PyObject *args)
static PyObject * | hdrCompressFilelist (hdrObject *s, PyObject *args)
static void | mungeFilelist (Header h)
static PyObject * | rhnUnload (hdrObject *s, PyObject *args)
static PyObject * | hdrFullFilelist (hdrObject *s, PyObject *args)
static PyObject * | hdrSprintf (hdrObject *s, PyObject *args)
static PyObject * | hdrGetAttr (hdrObject *s, char *name)
static void | hdrDealloc (hdrObject *s)
static long | tagNumFromPyObject (PyObject *item)
static PyObject * | hdrSubscript (hdrObject *s, PyObject *item)
static struct PyMethodDef | hdrMethods []
static PyMappingMethods | hdrAsMapping
static PyTypeObject | hdrType

## Class: rpmdbMatchIterator

static PyObject * | rpmdbMINext (rpmdbMIObject *s, PyObject *args)
static PyObject * | rpmdbMIGetAttr (rpmdbObject *s, char *name)
static void | rpmdbMIDealloc (rpmdbMIObject *s)
static struct PyMethodDef | rpmdbMIMethods []
static PyTypeObject | rpmdbMIType

## Class: rpmdb

static PyObject * | rpmdbFirst (rpmdbObject *s, PyObject *args)
static PyObject * | rpmdbNext (rpmdbObject *s, PyObject *args)
static PyObject * | handleDbResult (rpmdbMatchIterator mi)
static PyObject * | rpmdbByFile (rpmdbObject *s, PyObject *args)
static PyObject * | rpmdbByName (rpmdbObject *s, PyObject *args)
static PyObject * | rpmdbByProvides (rpmdbObject *s, PyObject *args)
static rpmdbMIObject * | py_rpmdbInitIterator (rpmdbObject *s, PyObject *args)
static PyObject * | rpmdbGetAttr (rpmdbObject *s, char *name)
static void | rpmdbDealloc (rpmdbObject *s)
static int | rpmdbLength (rpmdbObject *s)
static hdrObject * | rpmdbSubscript (rpmdbObject *s, PyObject *key)
static struct PyMethodDef | rpmdbMethods []
static PyMappingMethods | rpmdbAsMapping
static PyTypeObject | rpmdbType

## Class: rpmtrans

static PyObject * | rpmtransAdd (rpmtransObject *s, PyObject *args)
static PyObject * | rpmtransRemove (rpmtransObject *s, PyObject *args)
static PyObject * | rpmtransDepCheck (rpmtransObject *s, PyObject *args)
static PyObject * | rpmtransOrder (rpmtransObject *s, PyObject *args)
static PyObject * | py_rpmtransGetKeys (rpmtransObject *s, PyObject *args)
static void * | tsCallback (const void *hd, const rpmCallbackType what, const unsigned long amount, const unsigned long total, const void *pkgKey, rpmCallbackData data)
static PyObject * | rpmtransRun (rpmtransObject *s, PyObject *args)
static PyObject * | rpmtransGetAttr (rpmtransObject *o, char *name)
static void | rpmtransDealloc (PyObject *o)
static int | rpmtransSetAttr (rpmtransObject *o, char *name, PyObject *val)
static Header | transactionSetHeader = NULL
static struct PyMethodDef | rpmtransMethods []
static PyTypeObject | rpmtransType

## Defines

#define | REGISTER_ENUM(val)

## Typedefs

typedef rpmdbObject_s | rpmdbObject
typedef rpmdbMIObject_s | rpmdbMIObject
typedef rpmtransObject_s | rpmtransObject
typedef hdrObject_s | hdrObject

## Functions

static Header | headerAllocated (Header h)
int | mdfile (const char *fn, unsigned char *digest)
int | rpmvercmp (const char *one, const char *two)

## Variables

int | _rpmio_debug
static PyObject * | pyrpmError

## Detailed Description

Definition in file rpmmodule.c.

## Define Documentation

#define REGISTER_ENUM | ( | val |  | ) |

Value:

    PyDict_SetItemString(d, #val, o=PyInt_FromLong( val )); \
        Py_DECREF(o);

Referenced by initrpm().

## Typedef Documentation

typedef struct FDlist_t FDlist

| Definition at line 2381 of file rpmmodule.c.

## Function Documentation

static PyObject* archScore | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 1704 of file rpmmodule.c. References RPM_MACHTABLE_INSTARCH, and rpmMachineScore().

static PyObject* checkSig | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2331 of file rpmmodule.c. References rpmCheckSig().

static int closeCallback | ( | FILE * | f | ) | `[static]`

| Definition at line 2402 of file rpmmodule.c. References FDlist_t::f, Fclose(), FDlist_t::fd, fdFree, fdhead, fdLink, FDlist_t::next, and FDlist_t::note. Referenced by doFopen().

static PyObject* doAddMacro | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 1676 of file rpmmodule.c. References addMacro(), and RMIL_DEFAULT.

static PyObject* doDelMacro | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 1690 of file rpmmodule.c. References delMacro().

static PyObject* doFopen | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2433 of file rpmmodule.c. References closeCallback(), FDlist_t::f, FDlist_t::fd, fdGetFp(), fdhead, fdLink, fdtail, Ferror(), Fopen(), Fstrerror(), FDlist_t::next, FDlist_t::note, and pyrpmError.

static void errorcb | ( | void |  | ) | `[static]`

| Definition at line 2225 of file rpmmodule.c. References errorCB, and errorData. Referenced by errorSetCallback().

static PyObject* errorSetCallback | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2244 of file rpmmodule.c. References errorcb(), errorCB, errorData, and rpmErrorSetCallback.

static PyObject* errorString | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2284 of file rpmmodule.c. References rpmErrorString.

static PyObject* findUpgradeSet | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 1786 of file rpmmodule.c. References alloca(), packageInfo::data, packageInfo::h, hdrType, headerGetEntry(), packageInfo::name, pkgSet::numPackages, pkgSet::packages, pkgSort(), pyrpmError, RPMTAG_NAME, packageInfo::selected, and ugFindUpgradePackages().

static PyObject* getTsHeader | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2348 of file rpmmodule.c. References hdrObject_s::fileList, hdrObject_s::fileSizes, hdrObject_s::gids, hdrObject_s::h, hdrType, headerLink(), hdrObject_s::linkList, hdrObject_s::md5list, hdrObject_s::modes, hdrObject_s::mtimes, hdrObject_s::rdevs, hdrObject_s::sigs, transactionSetHeader, and hdrObject_s::uids.

static PyObject* hdrLoad | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 1882 of file rpmmodule.c. References compressFilelist(), hdrObject_s::fileList, hdrObject_s::fileSizes, hdrObject_s::gids, hdrObject_s::h, hdrType, headerAllocated(), headerLoad(), hdrObject_s::linkList, hdrObject_s::md5list, hdrObject_s::modes, hdrObject_s::mtimes, providePackageNVR(), pyrpmError, hdrObject_s::rdevs, hdrObject_s::sigs, and hdrObject_s::uids.

static Header headerAllocated | ( | Header | h | ) | `[inline, static]`

| Definition at line 25 of file rpmmodule.c. References headerToken::flags, and HEADERFLAG_ALLOCATED. Referenced by hdrLoad(), rhnLoad(), and rhnUnload().

void initrpm | ( | void |  | ) |

Definition at line 2511 of file rpmmodule.c.

References CHECKSIG_GPG, CHECKSIG_MD5, CHECKSIG_PGP, hdrType, HEADER_EXT_TAG, headerSprintfExtension_s::name, pyrpmError, REGISTER_ENUM, RPMCALLBACK_INST_CLOSE_FILE, RPMCALLBACK_INST_OPEN_FILE, RPMCALLBACK_INST_PROGRESS, RPMCALLBACK_INST_START, RPMCALLBACK_TRANS_PROGRESS, RPMCALLBACK_TRANS_START, RPMCALLBACK_TRANS_STOP, RPMCALLBACK_UNINST_PROGRESS, RPMCALLBACK_UNINST_START, RPMCALLBACK_UNINST_STOP, rpmdbMIType, rpmdbType, RPMFILE_CONFIG, RPMFILE_DOC, RPMFILE_GHOST, RPMFILE_LICENSE, RPMFILE_MISSINGOK, RPMFILE_NOREPLACE, RPMFILE_README, RPMFILE_STATE_NETSHARED, RPMFILE_STATE_NORMAL, RPMFILE_STATE_NOTINSTALLED, RPMFILE_STATE_REPLACED, rpmHeaderFormats, rpmModuleMethods, RPMPROB_BADARCH, RPMPROB_BADOS, RPMPROB_BADPRETRANS, RPMPROB_BADRELOCATE, RPMPROB_CONFLICT, RPMPROB_DISKNODES, RPMPROB_DISKSPACE, RPMPROB_FILE_CONFLICT, RPMPROB_FILTER_DISKNODES, RPMPROB_FILTER_DISKSPACE, RPMPROB_FILTER_FORCERELOCATE, RPMPROB_FILTER_IGNOREARCH, RPMPROB_FILTER_IGNOREOS, RPMPROB_FILTER_OLDPACKAGE, RPMPROB_FILTER_REPLACENEWFILES, RPMPROB_FILTER_REPLACEOLDFILES, RPMPROB_FILTER_REPLACEPKG, RPMPROB_NEW_FILE_CONFLICT, RPMPROB_OLDPACKAGE, RPMPROB_PKG_INSTALLED, RPMPROB_REQUIRES, rpmReadConfigFiles(), RPMSENSE_EQUAL, RPMSENSE_FIND_PROVIDES, RPMSENSE_FIND_REQUIRES, RPMSENSE_GREATER, RPMSENSE_INTERP, RPMSENSE_LESS, RPMSENSE_MULTILIB, RPMSENSE_PREREQ, RPMSENSE_RPMLIB, RPMSENSE_SCRIPT_BUILD, RPMSENSE_SCRIPT_CLEAN, RPMSENSE_SCRIPT_INSTALL, RPMSENSE_SCRIPT_POST, RPMSENSE_SCRIPT_POSTUN, RPMSENSE_SCRIPT_PRE, RPMSENSE_SCRIPT_PREP, RPMSENSE_SCRIPT_PREUN, RPMSENSE_SCRIPT_VERIFY, RPMSENSE_SERIAL, RPMSENSE_TRIGGERIN, RPMSENSE_TRIGGERPOSTUN, RPMSENSE_TRIGGERPREIN, RPMSENSE_TRIGGERUN, rpmTagTable, rpmTagTableSize, RPMTRANS_FLAG_ALLFILES, RPMTRANS_FLAG_BUILD_PROBS, RPMTRANS_FLAG_JUSTDB, RPMTRANS_FLAG_KEEPOBSOLETE, RPMTRANS_FLAG_MULTILIB, RPMTRANS_FLAG_NODOCS, RPMTRANS_FLAG_NOSCRIPTS, RPMTRANS_FLAG_NOTRIGGERS, RPMTRANS_FLAG_TEST, rpmtransType, and headerSprintfExtension_s::type.

static PyObject* labelCompare | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2300 of file rpmmodule.c. References rpmvercmp().

int mdfile | ( | const char * | fn,
|  | unsigned char * | digest
| ) |

static int pkgCompareVer | ( | void * | first,
|  | void * | second
| ) | `[static]`

| Definition at line 1731 of file rpmmodule.c. References psGetArchScore(), rpmVersionCompare(), and xstrcasecmp(). Referenced by pkgSort().

static void pkgSort | ( | struct pkgSet * | psp | ) | `[static]`

| Definition at line 1753 of file rpmmodule.c. References pkgCompareVer(). Referenced by findUpgradeSet().

static int psGetArchScore | ( | Header | h | ) | `[static]`

| Definition at line 1718 of file rpmmodule.c. References headerGetEntry(), RPM_INT8_TYPE, RPM_MACHTABLE_INSTARCH, rpmMachineScore(), and RPMTAG_ARCH. Referenced by pkgCompareVer().

static PyObject* rebuildDB | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2039 of file rpmmodule.c. References rpmdbRebuild().

static PyObject* rhnLoad | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

Definition at line 1919 of file rpmmodule.c.

References hdrObject_s::fileList, hdrObject_s::fileSizes, hdrObject_s::gids, hdrObject_s::h, hdrType, headerAddEntry(), headerAllocated(), headerFree(), headerGetEntry(), headerIsEntry(), headerLoad(), hdrObject_s::linkList, hdrObject_s::md5list, hdrObject_s::modes, hdrObject_s::mtimes, pyrpmError, hdrObject_s::rdevs, RPMTAG_ARCH, RPMTAG_HEADERIMMUTABLE, RPMTAG_RHNPLATFORM, RPMTAG_SHA1HEADER, RPMTAG_SHA1RHN, rpmVerifyDigest(), hdrObject_s::sigs, and hdrObject_s::uids.

static PyObject* rpmHeaderFromFD | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2091 of file rpmmodule.c. References Fclose(), fdDup(), and rpmReadHeaders().

static PyObject* rpmHeaderFromFile | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2107 of file rpmmodule.c. References Fclose(), Fopen(), pyrpmError, and rpmReadHeaders().

static PyObject* rpmHeaderFromPackage | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

Definition at line 1837 of file rpmmodule.c.

References Fclose(), fdDup(), hdrObject_s::fileList, hdrObject_s::fileSizes, hdrObject_s::gids, hdrObject_s::h, hdrType, headerIsEntry(), hdrObject_s::linkList, hdrObject_s::md5list, hdrObject_s::modes, hdrObject_s::mtimes, pyrpmError, hdrObject_s::rdevs, RPMRC_BADMAGIC, RPMRC_BADSIZE, RPMRC_FAIL, RPMRC_OK, RPMRC_SHORTREAD, rpmReadPackageInfo(), RPMTAG_SOURCEPACKAGE, hdrObject_s::sigs, and hdrObject_s::uids.

static PyObject* rpmInitDB | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 1983 of file rpmmodule.c. References alloca(), pyrpmError, rpmdbInit(), and snprintf().

static int rpmMergeHeaders | ( | PyObject * | list,
|  | FD_t | fd,
|  | int | matchTag
| ) | `[static]`

This assumes the order of list matches the order of the new headers, and throws an exception if that isn't true.

Definition at line 2130 of file rpmmodule.c.

References hdrObject_s::fileList, hdrObject_s::h, HEADER_MAGIC_YES, headerAddEntry(), headerFree(), headerFreeData(), headerFreeIterator(), headerGetEntry(), headerInitIterator(), headerNextIterator(), headerRead(), headerRemoveEntry(), hdrObject_s::linkList, hdrObject_s::md5list, pyrpmError, and hdrObject_s::sigs.

Referenced by rpmMergeHeadersFromFD().

static PyObject* rpmMergeHeadersFromFD | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2191 of file rpmmodule.c. References Fclose(), fdDup(), and rpmMergeHeaders().

static rpmdbObject* rpmOpenDB | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2007 of file rpmmodule.c. References alloca(), rpmdbObject_s::db, rpmdbObject_s::noffs, rpmdbObject_s::offsets, rpmdbObject_s::offx, pyrpmError, rpmdbOpen(), rpmdbType, and snprintf().

static PyObject* rpmReadHeaders | ( | FD_t | fd | ) | `[static]`

Definition at line 2049 of file rpmmodule.c.

References compressFilelist(), hdrObject_s::fileList, hdrObject_s::fileSizes, hdrObject_s::gids, hdrObject_s::h, hdrType, HEADER_MAGIC_YES, headerRead(), hdrObject_s::linkList, hdrObject_s::md5list, hdrObject_s::modes, hdrObject_s::mtimes, providePackageNVR(), pyrpmError, hdrObject_s::rdevs, hdrObject_s::sigs, and hdrObject_s::uids.

Referenced by rpmHeaderFromFD(), and rpmHeaderFromFile().

static PyObject* setVerbosity | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2367 of file rpmmodule.c. References rpmSetVerbosity.

static PyObject* versionCompare | ( | PyObject * | self,
|  | PyObject * | args
| ) | `[static]`

| Definition at line 2290 of file rpmmodule.c. References hdrObject_s::h, hdrType, and rpmVersionCompare().

## Variable Documentation

int _rpmio_debug

| Definition at line 123 of file rpmio.c.

PyObject* errorCB = NULL`[static]`

| Definition at line 2221 of file rpmmodule.c. Referenced by errorcb(), and errorSetCallback().

PyObject * errorData = NULL`[static]`

| Definition at line 2221 of file rpmmodule.c. Referenced by errorcb(), and errorSetCallback().

FDlist* fdhead = NULL`[static]`

| Definition at line 2394 of file rpmmodule.c. Referenced by closeCallback(), and doFopen().

FDlist* fdtail = NULL`[static]`

| Definition at line 2398 of file rpmmodule.c. Referenced by doFopen().

PyMethodDef rpmModuleMethods[]`[static]`

Initial value:

     {
        { "TransactionSet", (PyCFunction) rpmtransCreate, METH_VARARGS, NULL },
        { "addMacro", (PyCFunction) doAddMacro, METH_VARARGS, NULL },
        { "delMacro", (PyCFunction) doDelMacro, METH_VARARGS, NULL },
        { "archscore", (PyCFunction) archScore, METH_VARARGS, NULL },
        { "findUpgradeSet", (PyCFunction) findUpgradeSet, METH_VARARGS, NULL },
        { "headerFromPackage", (PyCFunction) rpmHeaderFromPackage, METH_VARARGS, NULL },
        { "headerLoad", (PyCFunction) hdrLoad, METH_VARARGS, NULL },
        { "rhnLoad", (PyCFunction) rhnLoad, METH_VARARGS, NULL },
        { "initdb", (PyCFunction) rpmInitDB, METH_VARARGS, NULL },
        { "opendb", (PyCFunction) rpmOpenDB, METH_VARARGS, NULL },
        { "rebuilddb", (PyCFunction) rebuildDB, METH_VARARGS, NULL },
        { "mergeHeaderListFromFD", (PyCFunction) rpmMergeHeadersFromFD, METH_VARARGS, NULL },
        { "readHeaderListFromFD", (PyCFunction) rpmHeaderFromFD, METH_VARARGS, NULL },
        { "readHeaderListFromFile", (PyCFunction) rpmHeaderFromFile, METH_VARARGS, NULL },
        { "errorSetCallback", (PyCFunction) errorSetCallback, METH_VARARGS, NULL },
        { "errorString", (PyCFunction) errorString, METH_VARARGS, NULL },
        { "versionCompare", (PyCFunction) versionCompare, METH_VARARGS, NULL },
        { "labelCompare", (PyCFunction) labelCompare, METH_VARARGS, NULL },
        { "checksig", (PyCFunction) checkSig, METH_VARARGS, NULL },
        { "getTransactionCallbackHeader", (PyCFunction) getTsHeader, METH_VARARGS, NULL },

        { "setVerbosity", (PyCFunction) setVerbosity, METH_VARARGS, NULL },
        { NULL }
    }

Definition at line 2483 of file rpmmodule.c.

Referenced by initrpm().